diff --git a/doc/build.md b/doc/build.md --- a/doc/build.md +++ b/doc/build.md @@ -70,22 +70,23 @@ sudo make install ``` ### Finding Plugins -AtCore will look in a few places for plugins these are. - 1. BUILDDIR for plugins. - 2. KDE_PLUGIN_DIR/AtCore - 3. Qt's Plugin Path/AtCore - 4. INSTALL_PREFIX/KDE_PLUGIN_DIR/AtCore - 5. Binary using atcore's path/plugins (see Below) +AtCore will check each directory below for plugins. -For the last place bin/plugins atcore will look next to the binary using atcore. -On Windows this is in a directory next to the program + 1. QApplication::applicationDirPath/plugins (see Below) + 2. INSTALL_PREFIX/KDE_PLUGIN_DIR/AtCore + 3. QT_Plugin_Path/AtCore + 4. KDE_PLUGIN_DIR/AtCore + 5. BUILDDIR for plugins. + +For 'QApplication::applicationDirPath/plugins' atcore will look next to the binary using atcore. +Usually this is in a directory next to the program ``` -C:\atcore_test_GUI\atcore-gui.exe -C:\atcore_test_GUI\AtCore.dll -C:\atcore_test_GUI\plugins\repetier.dll +atcore_test_GUI\atcore-gui.exe +atcore_test_GUI\AtCore.dll +atcore_test_GUI\plugins\repetier.dll ``` -On Mac OS this is in the app bundle +But on Mac OS this is in the app bundle ``` atcore-gui.app/Contents/MacOS/atcore-gui atcore-gui.app/Contents/MacOS/AtCore.dylib diff --git a/src/core/atcore.h b/src/core/atcore.h --- a/src/core/atcore.h +++ b/src/core/atcore.h @@ -50,12 +50,12 @@ * - AtCore::close() when you are all done. * #### How AtCore Finds Plugins. - * Searched Paths: - * 1. Build Dir/plugins (buildtime) - * 2. ECM set KDE PLUGIN DIR (buildtime) + * AtCore will check each directory below for plugins. + * 1. QApplication::applicationDirPath/plugins (runtime) + * 2. Fullpath of KDE_PLUGIN_DIR (buildtime) * 3. Qt Plugin path/AtCore (runtime) - * 4. Fullpath of KDE_PLUGIN_DIR (buildtime) - * 5. Program using atcore's path/plugins (runtime) + * 4. ECM set KDE PLUGIN DIR (buildtime) + * 5. Build Dir/plugins (buildtime) */ class ATCORE_EXPORT AtCore : public QObject { @@ -523,8 +523,10 @@ /** * @brief Search for atcore firmware plugins + * @param path: the path to check + * @return QMap of the plugings found */ - void findFirmwarePlugins(); + QMap findFirmwarePlugins(const QString &path); /** * @brief returns AtCorePrivate::sdCardReadingFileList diff --git a/src/core/atcore.cpp b/src/core/atcore.cpp --- a/src/core/atcore.cpp +++ b/src/core/atcore.cpp @@ -49,7 +49,6 @@ IFirmware *firmwarePlugin = nullptr;//!< @param firmwarePlugin: pointer to firmware plugin SerialLayer *serial = nullptr; //!< @param serial: pointer to the serial layer QPluginLoader pluginLoader; //!< @param pluginLoader: QPluginLoader - QDir pluginsDir; //!< @param pluginsDir: Directory where plugins were found QMap plugins; //!< @param plugins: Map of plugins name / path QByteArray lastMessage; //!< @param lastMessage: lastMessage from the printer int extruderCount = 1; //!< @param extruderCount: extruder count @@ -82,16 +81,18 @@ d->tempTimer->setInterval(5000); d->tempTimer->setSingleShot(false); //Attempt to find our plugins + QStringList paths = AtCoreDirectories::pluginDir; + //Add Our current run path/ plugins to the list + paths.prepend(qApp->applicationDirPath() + QStringLiteral("/plugins")); qCDebug(ATCORE_PLUGIN) << "Detecting Plugin path"; - for (const auto &path : AtCoreDirectories::pluginDir) { + for (const auto &path : paths) { qCDebug(ATCORE_PLUGIN) << "Checking: " << path; - if (QDir(path).exists()) { - d->pluginsDir = QDir(path); - break; + QMap tempMap = findFirmwarePlugins(path); + if (!tempMap.isEmpty()) { + d->plugins = tempMap; + return; } } - qCDebug(ATCORE_PLUGIN) << "PluginDir" << d->pluginsDir; - findFirmwarePlugins(); setState(AtCore::DISCONNECTED); } @@ -183,7 +184,7 @@ void AtCore::loadFirmwarePlugin(const QString &fwName) { - qCDebug(ATCORE_CORE) << "Loading plugin: " << fwName; + qCDebug(ATCORE_CORE) << "Loading plugin: " << d->plugins[fwName]; if (d->plugins.contains(fwName)) { d->pluginLoader.setFileName(d->plugins[fwName]); if (!d->pluginLoader.load()) { @@ -474,10 +475,10 @@ } } -void AtCore::findFirmwarePlugins() +QMap AtCore::findFirmwarePlugins(const QString &path) { - d->plugins.clear(); - QStringList files = d->pluginsDir.entryList(QDir::Files); + QMap detectedPlugins; + QStringList files = QDir(path).entryList(QDir::Files); for (const QString &f : files) { QString file = f; #if defined(Q_OS_WIN) @@ -495,12 +496,13 @@ file = file.remove(QStringLiteral("lib")); } file = file.toLower().simplified(); - QString pluginString = d->pluginsDir.absolutePath(); + QString pluginString = path; pluginString.append(QChar::fromLatin1('/')); pluginString.append(f); - d->plugins[file] = pluginString; + detectedPlugins[file] = pluginString; qCDebug(ATCORE_PLUGIN) << QStringLiteral("Plugin:[%1]=%2").arg(file, pluginString); } + return detectedPlugins; } QStringList AtCore::availableFirmwarePlugins() const diff --git a/src/core/atcore_default_folders.h.in b/src/core/atcore_default_folders.h.in --- a/src/core/atcore_default_folders.h.in +++ b/src/core/atcore_default_folders.h.in @@ -24,9 +24,8 @@ namespace AtCoreDirectories { const QStringList pluginDir = \ - QStringList(QStringLiteral("@CMAKE_CURRENT_BINARY_DIR@/../plugins")) \ - << QStringList(QStringLiteral("@KDE_INSTALL_PLUGINDIR@/AtCore")) \ + QStringList(QStringLiteral("@CMAKE_INSTALL_PREFIX@/@KDE_INSTALL_PLUGINDIR@/AtCore")) \ << QStringList(QLibraryInfo::location(QLibraryInfo::PluginsPath) + QStringLiteral("/AtCore")) \ - << QStringList(QStringLiteral("@CMAKE_INSTALL_PREFIX@/@KDE_INSTALL_PLUGINDIR@/AtCore")) \ - << QStringList(QStringLiteral("plugins")); + << QStringList(QStringLiteral("@KDE_INSTALL_PLUGINDIR@/AtCore")) \ + << QStringList(QStringLiteral("@CMAKE_CURRENT_BINARY_DIR@/../plugins")); }