custom filetype for extensions

This commit is contained in:
Akash Mozumdar 2020-09-10 07:18:17 -06:00
parent f6742de3d5
commit fe1cdfc947
2 changed files with 31 additions and 23 deletions

View File

@ -33,10 +33,13 @@ namespace
bool Load(QString extenName) bool Load(QString extenName)
{ {
// Extension is dll and exports "OnNewSentence" if (extenName.endsWith(".dll")) extenName.chop(4);
if (QTextFile(extenName + ".dll", QIODevice::ReadOnly).readAll().contains("OnNewSentence")) if (extenName.endsWith(".xdll")) extenName.chop(5);
if (!QFile::exists(extenName + ".xdll")) QFile::copy(extenName + ".dll", extenName + ".xdll");
// Extension must export "OnNewSentence"
if (QTextFile(extenName + ".xdll", QIODevice::ReadOnly).readAll().contains("OnNewSentence"))
{ {
if (HMODULE module = LoadLibraryW(S(extenName + ".dll").c_str())) if (HMODULE module = LoadLibraryW(S(extenName + ".xdll").c_str()))
{ {
if (auto callback = (decltype(Extension::callback))GetProcAddress(module, "OnNewSentence")) if (auto callback = (decltype(Extension::callback))GetProcAddress(module, "OnNewSentence"))
{ {
@ -53,7 +56,7 @@ namespace
void Unload(int index) void Unload(int index)
{ {
std::scoped_lock writeLock(extenMutex); std::scoped_lock writeLock(extenMutex);
FreeLibrary(GetModuleHandleW((extensions.at(index).name + L".dll").c_str())); FreeLibrary(GetModuleHandleW((extensions.at(index).name + L".xdll").c_str()));
extensions.erase(extensions.begin() + index); extensions.erase(extensions.begin() + index);
} }
@ -80,14 +83,14 @@ namespace
void Add(QFileInfo extenFile) void Add(QFileInfo extenFile)
{ {
if (extenFile.suffix() == "dll") if (extenFile.suffix() == "dll" || extenFile.suffix() == "xdll")
{ {
if (extenFile.absolutePath() != QDir::currentPath()) if (extenFile.absolutePath() != QDir::currentPath())
{ {
if (QFile::exists(extenFile.fileName()) && QMessageBox::question(This, EXTENSIONS, CONFIRM_EXTENSION_OVERWRITE) == QMessageBox::Yes) QFile::remove(extenFile.fileName()); if (QFile::exists(extenFile.fileName()) && QMessageBox::question(This, EXTENSIONS, CONFIRM_EXTENSION_OVERWRITE) == QMessageBox::Yes) QFile::remove(extenFile.fileName());
if (!QFile::copy(extenFile.absoluteFilePath(), extenFile.fileName())) QMessageBox::warning(This, EXTENSIONS, EXTENSION_WRITE_ERROR); if (!QFile::copy(extenFile.absoluteFilePath(), extenFile.fileName())) QMessageBox::warning(This, EXTENSIONS, EXTENSION_WRITE_ERROR);
} }
if (Load(extenFile.completeBaseName())) return Sync(); if (Load(extenFile.fileName())) return Sync();
} }
QMessageBox::information(This, EXTENSIONS, QString(INVALID_EXTENSION).arg(extenFile.fileName())); QMessageBox::information(This, EXTENSIONS, QString(INVALID_EXTENSION).arg(extenFile.fileName()));
} }
@ -96,7 +99,7 @@ namespace
{ {
QAction addExtension(ADD_EXTENSION); QAction addExtension(ADD_EXTENSION);
if (QMenu::exec({ &addExtension }, ui.extenList->mapToGlobal(point), nullptr, This)) if (QMenu::exec({ &addExtension }, ui.extenList->mapToGlobal(point), nullptr, This))
if (QString extenFile = QFileDialog::getOpenFileName(This, ADD_EXTENSION, ".", EXTENSIONS + QString(" (*.dll)")); !extenFile.isEmpty()) Add(extenFile); if (QString extenFile = QFileDialog::getOpenFileName(This, ADD_EXTENSION, ".", EXTENSIONS + QString(" (*.xdll)\nLibraries (*.dll)")); !extenFile.isEmpty()) Add(extenFile);
} }
} }
@ -115,7 +118,7 @@ bool DispatchSentenceToExtensions(std::wstring& sentence, const InfoForExtension
void CleanupExtensions() void CleanupExtensions()
{ {
std::scoped_lock writeLock(extenMutex); std::scoped_lock writeLock(extenMutex);
for (auto extension : extensions) FreeLibrary(GetModuleHandleW((extension.name + L".dll").c_str())); for (auto extension : extensions) FreeLibrary(GetModuleHandleW((extension.name + L".xdll").c_str()));
extensions.clear(); extensions.clear();
} }

View File

@ -35,25 +35,30 @@ foreach ($language in @{
foreach ($file in @( foreach ($file in @(
"Textractor.exe", "Textractor.exe",
"TextractorCLI.exe", "TextractorCLI.exe",
"texthook.dll", "texthook.dll"
"Bing Translate.dll",
"Copy to Clipboard.dll",
"DeepL Translate.dll",
"Extra Newlines.dll",
"Extra Window.dll",
"Google Translate.dll",
"Lua.dll",
"Regex Filter.dll",
"Remove Repeated Characters.dll",
"Remove Repeated Phrases.dll",
"Remove Repeated Phrases 2.dll",
"Remove 30 Repeated Sentences.dll",
"Replacer.dll",
"Thread Linker.dll"
)) ))
{ {
copy -Force -Recurse -Verbose -Destination "$folder/$arch" -Path "Release_$arch/$file"; copy -Force -Recurse -Verbose -Destination "$folder/$arch" -Path "Release_$arch/$file";
} }
foreach ($extension in @(
"Bing Translate",
"Copy to Clipboard",
"DeepL Translate",
"Extra Newlines",
"Extra Window",
"Google Translate",
"Lua",
"Regex Filter",
"Remove Repeated Characters",
"Remove Repeated Phrases",
"Remove Repeated Phrases 2",
"Remove 30 Repeated Sentences",
"Replacer",
"Thread Linker"
))
{
copy -Force -Recurse -Verbose -Destination "$folder/$arch/$extension.xdll" -Path "Release_$arch/$extension.dll";
}
} }
} }