// 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"); }
// Recursively scans a directory for directories and files. void filter_url_recursive_scandir (string folder, vector <string> & paths) { vector <string> files = filter_url_scandir (folder); for (auto & file : files) { string path = filter_url_create_path (folder, file); paths.push_back (path); if (filter_url_is_dir (path)) { filter_url_recursive_scandir (path, paths); } } }
void bible_import_run (string location, string bible, int book, int chapter) { Database_Logs::log ("Importing Bible data from location " + location + " into Bible " + bible); string folder = filter_archive_uncompress (location); if (!folder.empty ()) location = folder; vector <string> files; if (filter_url_is_dir (location)) { filter_url_recursive_scandir (location, files); } else { files.push_back (location); } for (auto & file : files) { if (filter_url_is_dir (file)) continue; Database_Logs::log ("Examining file for import: " + file); string success_message = ""; string error_message = ""; string data = filter_url_file_get_contents (file); if (data != "") { if (unicode_string_is_valid (data)) { // Check whether this is USFM data. bool id = data.find ("\\id ") != string::npos; bool c = data.find ("\\c ") != string::npos; if (id || c) { bible_import_usfm (data, bible, book, chapter); } else { bible_import_text (data, bible, book, chapter); } } else { Database_Logs::log ("The file does not contain valid Unicode UTF-8 text.", true); } } else { Database_Logs::log ("Nothing was imported.", true); } } Database_Logs::log ("Import Bible data has finished"); }