void PluginManager::search() { qDebug() << "[PluginManager]" << "Searching: " << pluginDirectory(); for (const QFileInfo& file : pluginDirectory().entryInfoList(QDir::Files)) { learn(file); } emit pluginListUpdated(); }
Status pluginDataClear(const Account &account, const std::string &plugin) { std::string directory = pluginDirectory(account, plugin); if (fileExists(directory)) ABC_CHECK(fileDelete(directory)); return Status(); }
Status pluginDataClear(const Account &account, const std::string &plugin) { std::string directory = pluginDirectory(account, plugin); if (fileExists(directory)) ABC_CHECK_OLD(ABC_FileIODeleteRecursive(directory.c_str(), &error)); return Status(); }
Status pluginDataSet(const Account &account, const std::string &plugin, const std::string &key, const std::string &data) { ABC_CHECK(fileEnsureDir(pluginsDirectory(account))); ABC_CHECK(fileEnsureDir(pluginDirectory(account, plugin))); const auto namePath = pluginDirectory(account, plugin) + "Name.json"; if (!fileExists(namePath)) { PluginNameJson json; ABC_CHECK(json.nameSet(plugin)); json.save(namePath, account.login.dataKey()); } PluginDataFile json; json.keySet(key); json.dataSet(data); ABC_CHECK(json.save(keyFilename(account, plugin, key), account.login.dataKey())); return Status(); }
Status pluginDataSet(const Account &account, const std::string &plugin, const std::string &key, const std::string &data) { ABC_CHECK(fileEnsureDir(pluginsDirectory(account))); ABC_CHECK(fileEnsureDir(pluginDirectory(account, plugin))); PluginDataFile json; json.keySet(key); json.dataSet(data); ABC_CHECK(json.save(keyFilename(account, plugin, key), account.login.dataKey())); return Status(); }
Catagory::Catagory(std::string catagoreysFolder) : _CatagorysFolder(catagoreysFolder) { namespace fs = boost::filesystem; fs::path pluginDirectory(_CatagorysFolder); fs::directory_iterator end_iter; for( fs::directory_iterator dir_iter(pluginDirectory) ; dir_iter != end_iter ; ++dir_iter) { if (fs::is_directory( *dir_iter )) { fs::path path = dir_iter->path(); std::string subCatFolder = path.string(); std::string subCatFolderName(path.leaf().string()); _SubCatagories.push_back(SubCatagory(subCatFolder, subCatFolderName)); } } }
std::list<std::string> pluginDataKeys(const Account &account, const std::string &plugin) { std::list<std::string> out; std::string outer = pluginDirectory(account, plugin); DIR *dir = opendir(outer.c_str()); if (!dir) return out; struct dirent *de; while (nullptr != (de = readdir(dir))) { PluginDataFile json; if (fileIsJson(de->d_name) && json.load(outer + de->d_name, account.login.dataKey()) && json.keyOk()) out.push_back(json.key()); } closedir(dir); return out; }
void PluginManager::loadPlugins() { // first try to remove duplicit directories // (I know, I know, this is bad as it does not take care of // symlinks etc. but it is better than nothing) QStringList::iterator dirEnd = pluginDirectories_.end(); for (QStringList::iterator dir = pluginDirectories_.begin(); dir != dirEnd; ++dir) { if (!dir->endsWith("/")) { dir->append("/"); } } pluginDirectories_.removeDuplicates(); dirEnd = pluginDirectories_.end(); for (QStringList::iterator dir = pluginDirectories_.begin(); dir != dirEnd; ++dir) { QDir pluginDirectory(*dir); QStringList pluginFiles = pluginDirectory.entryList(QStringList() << "lib*plugin*"); QStringList::iterator e = pluginFiles.end(); for (QStringList::iterator i = pluginFiles.begin(); i != e; ++i) { loadPlugin(pluginDirectory.absoluteFilePath(*i)); } } }