// Imports the file at $path into $resource. void resource_logic_import_images (string resource, string path) { Database_ImageResources database_imageresources; Database_Logs::log ("Importing: " + filter_url_basename (path)); // To begin with, add the path to the main file to the list of paths to be processed. vector <string> paths = {path}; while (!paths.empty ()) { // Take and remove the first path from the container. path = paths[0]; paths.erase (paths.begin()); string basename = filter_url_basename (path); string extension = filter_url_get_extension (path); extension = unicode_string_casefold (extension); if (extension == "pdf") { Database_Logs::log ("Processing PDF: " + basename); // Retrieve PDF information. filter_shell_run ("", "pdfinfo", {path}, NULL, NULL); // Convert the PDF file to separate images. string folder = filter_url_tempfile (); filter_url_mkdir (folder); filter_shell_run (folder, "pdftocairo", {"-jpeg", path}, NULL, NULL); // Add the images to the ones to be processed. filter_url_recursive_scandir (folder, paths); } else if (filter_archive_is_archive (path)) { Database_Logs::log ("Unpacking archive: " + basename); string folder = filter_archive_uncompress (path); filter_url_recursive_scandir (folder, paths); } else { if (!extension.empty ()) { basename = database_imageresources.store (resource, path); Database_Logs::log ("Storing image " + basename ); } } } Database_Logs::log ("Ready importing images"); }
void sword_logic_uninstall_module (string module) { Database_Logs::log ("Uninstall SWORD module " + module); string out_err; string sword_path = sword_logic_get_path (); filter_shell_run ("cd " + sword_path + "; installmgr -u \"" + module + "\"", out_err); sword_logic_log (out_err); }
void sword_logic_install_module (string source_name, string module_name) { Database_Logs::log ("Install SWORD module " + module_name + " from source " + source_name); string sword_path = sword_logic_get_path (); // Installation through SWORD InstallMgr does not yet work. // When running it from the ~/.sword/InstallMgr directory, it works. #ifdef HAVE_SWORD sword::SWMgr *mgr = new sword::SWMgr(); sword::SWBuf baseDir = sword_logic_get_path ().c_str (); sword::InstallMgr *installMgr = new sword::InstallMgr (baseDir, NULL); installMgr->setUserDisclaimerConfirmed (true); sword::InstallSourceMap::iterator source = installMgr->sources.find(source_name.c_str ()); if (source == installMgr->sources.end()) { Database_Logs::log ("Could not find remote source " + source_name); } else { sword::InstallSource *is = source->second; sword::SWMgr *rmgr = is->getMgr(); sword::SWModule *module; sword::ModMap::iterator it = rmgr->Modules.find(module_name.c_str()); if (it == rmgr->Modules.end()) { Database_Logs::log ("Remote source " + source_name + " does not make available module " + module_name); } else { module = it->second; int error = installMgr->installModule(mgr, 0, module->getName(), is); if (error) { Database_Logs::log ("Error installing module " + module_name); } else { Database_Logs::log ("Installed module " + module_name); } } } delete installMgr; delete mgr; #else string out_err; filter_shell_run ("cd " + sword_path + "; echo yes | installmgr -ri \"" + source_name + "\" \"" + module_name + "\"", out_err); sword_logic_log (out_err); #endif // After the installation is complete, cache some data. // This cached data indicates the last access time for this SWORD module. string url = sword_logic_virtual_url (module_name, 0, 0, 0); database_filebased_cache_put (url, "SWORD"); }
// Get installed SWORD modules. vector <string> sword_logic_get_installed () { vector <string> modules; string out_err; string sword_path = sword_logic_get_path (); filter_shell_run ("cd " + sword_path + "; installmgr -l", out_err); vector <string> lines = filter_string_explode (out_err, '\n'); for (auto line : lines) { line = filter_string_trim (line); if (line.empty ()) continue; if (line.find ("[") == string::npos) continue; modules.push_back (line); } return modules; }
void export_quickbible (string bible, bool log) { string directory = filter_url_create_path (Export_Logic::bibleDirectory (bible), "quickbible"); if (!file_or_dir_exists (directory)) filter_url_mkdir (directory); Database_Bibles database_bibles; string stylesheet = Database_Config_Bible::getExportStylesheet (bible); string yet_contents; yet_contents.append (export_quickbible_tabify ("info", "shortName", bible)); yet_contents.append (export_quickbible_tabify ("info", "longName", bible)); yet_contents.append (export_quickbible_tabify ("info", "description", bible)); yet_contents.append (export_quickbible_tabify ("info", "locale", "en")); vector <int> books = database_bibles.getBooks (bible); for (auto book : books) { string bookname = Database_Books::getEnglishFromId (book); yet_contents.append (export_quickbible_tabify ("book_name", convert_to_string (book), bookname, "")); } for (auto book : books) { // The .yet to .yes converter only handles books > 0. if (book) { vector <int> chapters = database_bibles.getChapters (bible, book); for (auto chapter : chapters) { // The .yet to .yes converter only handles chapters > 0. if (chapter) { Filter_Text filter_text = Filter_Text (bible); filter_text.initializeHeadingsAndTextPerVerse (true); string usfm = database_bibles.getChapter (bible, book, chapter); filter_text.addUsfmCode (usfm); filter_text.run (stylesheet); map <int, string> text = filter_text.getVersesText (); for (auto & element : text) { int verse = element.first; // The .yet to .yes converter only handles verses > 0. if (verse) { string bk = convert_to_string (book); string ch = convert_to_string (chapter); string vs = convert_to_string (element.first); string tx = element.second; if (tx.empty ()) tx = "empty"; yet_contents.append (export_quickbible_tabify ("verse", bk, ch, vs, tx)); } } } } } } string bible_yet = filter_url_create_path (directory, "bible.yet"); filter_url_file_put_contents (bible_yet, yet_contents); string yet2yes_jar = filter_url_create_root_path ("export", "YetToYes2.jar"); string bible_yes = filter_url_create_path (directory, "bible.yes"); filter_shell_run ("", "java", { "-jar", yet2yes_jar, bible_yet, bible_yes }, NULL, NULL); string quickbible_html_source = filter_url_create_root_path ("export", "quickbible.html"); string quickbible_html_destination = filter_url_create_path (directory, "quickbible.html"); filter_url_file_cp (quickbible_html_source, quickbible_html_destination); Database_State::clearExport (bible, 0, Export_Logic::export_quick_bible); if (log) Database_Logs::log (translate("Exported to Quick Bible") + " " + bible, Filter_Roles::translator ()); }
void sword_logic_refresh_module_list () { Database_Logs::log ("Refreshing list of SWORD modules"); string out_err; // Initialize SWORD directory structure and configuration. string sword_path = sword_logic_get_path (); filter_url_mkdir (sword_path); string swordconf = "[Install]\n" "DataPath=" + sword_path + "/\n"; filter_url_file_put_contents (filter_url_create_path (sword_path, "sword.conf"), swordconf); string config_files_path = filter_url_create_root_path ("sword"); filter_shell_run ("cp -r " + config_files_path + "/locales.d " + sword_path, out_err); sword_logic_log (out_err); filter_shell_run ("cp -r " + config_files_path + "/mods.d " + sword_path, out_err); sword_logic_log (out_err); // Initialize basic user configuration. #ifdef HAVE_SWORD sword_logic_installmgr_initialize (); #else filter_shell_run ("echo yes | installmgr -init", out_err); sword_logic_log (out_err); #endif // Sync the configuration with the online known remote repository list. #ifdef HAVE_SWORD if (!sword_logic_installmgr_synchronize_configuration_with_master ()) { Database_Logs::log ("Failed to synchronize SWORD configuration with the master remote source list"); // Since this could be a network failure, exit from the entire update routine. // The advantage of existing already at this stage is that the list of known SWORD resources // will be left untouched in case of a network error. return; } #else filter_shell_run ("echo yes | installmgr -sc", out_err); filter_string_replace_between (out_err, "WARNING", "enable? [no]", ""); sword_logic_log (out_err); #endif // List the remote sources. vector <string> remote_sources; #ifdef HAVE_SWORD sword_logic_installmgr_list_remote_sources (remote_sources); #else filter_shell_run ("installmgr -s", out_err); sword_logic_log (out_err); vector <string> lines = filter_string_explode (out_err, '\n'); for (auto line : lines) { line = filter_string_trim (line); if (line.find ("[") != string::npos) { line.erase (0, 1); if (line.find ("]") != string::npos) { line.erase (line.length () - 1, 1); remote_sources.push_back (line); Database_Logs::log (line); } } } #endif vector <string> sword_modules; for (auto remote_source : remote_sources) { #ifdef HAVE_SWORD if (!sword_logic_installmgr_refresh_remote_source (remote_source)) { Database_Logs::log ("Error refreshing remote source " + remote_source); } #else filter_shell_run ("echo yes | installmgr -r \"" + remote_source + "\"", out_err); filter_string_replace_between (out_err, "WARNING", "type yes at the prompt", ""); sword_logic_log (out_err); #endif vector <string> modules; #ifdef HAVE_SWORD sword_logic_installmgr_list_remote_modules (remote_source, modules); for (auto & module : modules) { sword_modules.push_back ("[" + remote_source + "]" + " " + module); } #else filter_shell_run ("installmgr -rl \"" + remote_source + "\"", out_err); lines = filter_string_explode (out_err, '\n'); for (auto line : lines) { line = filter_string_trim (line); if (line.empty ()) continue; if (line.find ("[") == string::npos) continue; if (line.find ("]") == string::npos) continue; modules.push_back ("[" + remote_source + "]" + " " + line); } for (auto module : modules) { sword_modules.push_back (module); } #endif Database_Logs::log (remote_source + ": " + convert_to_string (modules.size ()) + " modules"); } // Store the list of remote sources and their modules. // It is stored in the client files area. // Clients can access it from there too. string path = sword_logic_module_list_path (); filter_url_file_put_contents (path, filter_string_implode (sword_modules, "\n")); Database_Logs::log ("Ready refreshing SWORD module list"); }