public LibraryDB(WebLibraryDetail web_library_detail) { base_path = web_library_detail.LIBRARY_BASE_PATH; library_path = LibraryDB.GetLibraryDBPath(base_path); string db_syncref_path = IntranetLibraryTools.GetLibraryMetadataPath(base_path); // Copy a library into place... // but only if this is not a Internet sync directory/DB! if (File.Exists(db_syncref_path)) { throw new Exception(String.Format("MUST NOT attempt to create a regular Qiqqa library in the Qiqqa Internet/Intranet Sync directory: '{0}'", base_path)); } if (!File.Exists(library_path)) { Logging.Warn($"Library db for '{web_library_detail.Id}' does not exist so copying the template to '{library_path}'"); string library_template_path = LibraryDB.GetLibraryDBTemplatePath(); File.Copy(library_template_path, library_path); } }
public LibraryDB(string base_path) { this.base_path = base_path; library_path = LibraryDB.GetLibraryDBPath(base_path); string db_syncref_path = IntranetLibraryTools.GetLibraryMetadataPath(base_path); // Copy a library into place... // but only if this is not a Internet sync directory/DB! if (File.Exists(db_syncref_path)) { throw new Exception(String.Format("MUST NOT attempt to create a regular Qiqqa library in the Qiqqa Internet/Intranet Sync directory: '{0}'", base_path)); } if (!File.Exists(library_path)) { Logging.Warn("Library db does not exist so copying the template to {0}", library_path); string library_template_path = LibraryDB.GetLibraryDBTemplatePath(); File.Copy(library_template_path, library_path); } }
internal static void RunUpgrade() { Logging.Info("Upgrading from 037 to 038"); string base_directory_path = BaseDirectoryForQiqqa; if (Directory.Exists(base_directory_path)) { int info_library_count, info_item_count; string[] library_directories = Directory.GetDirectories(base_directory_path); info_library_count = 0; foreach (string library_directory in library_directories) { ++info_library_count; Logging.Info("Inspecting directory {0}", library_directory); string documents_directory = Path.GetFullPath(Path.Combine(library_directory, @"documents")); string database_file = LibraryDB.GetLibraryDBPath(library_directory); string database_syncref_file = IntranetLibraryTools.GetLibraryMetadataPath(library_directory); // make sure we skip S3DB internet DB sync directories and only 'go through the upgrade process // when this looks like a viable (local) Qiqqa library: if (!File.Exists(database_file) && Directory.Exists(documents_directory) && !File.Exists(database_syncref_file)) { Logging.Warn("We have to upgrade {0}", library_directory); SQLiteUpgrade_LibraryDB library_db = new SQLiteUpgrade_LibraryDB(library_directory); using (var connection = library_db.GetConnection()) { connection.Open(); using (var transaction = connection.BeginTransaction()) { // Get a list of ALL the files in the documents directory... string[] full_filenames = Directory.GetFiles(documents_directory, "*.*", SearchOption.AllDirectories); info_item_count = 0; foreach (string full_filename in full_filenames) { ++info_item_count; StatusManager.Instance.UpdateStatus("DBUpgrade", String.Format("Upgrading library {0}/{1}", info_library_count, library_directories.Length), info_item_count, full_filenames.Length); string fingerprint = Path.GetFileNameWithoutExtension(full_filename); string extension = Path.GetExtension(full_filename).Trim('.'); if (EXTENSIONS.Contains(extension)) { Logging.Info("Upgrading {0}--{1}", fingerprint, extension); byte[] data = File.ReadAllBytes(full_filename); library_db.PutBlob(connection, transaction, fingerprint, extension, data); } else { Logging.Info("NOT upgrading {0}--{1}", fingerprint, extension); } } transaction.Commit(); } } } } } StatusManager.Instance.UpdateStatus("DBUpgrade", "Finished migrating libraries."); }
// ************************************************************************************************************* // *** MIGRATION TO OPEN SOURCE CODE *************************************************************************** // ************************************************************************************************************* private void AddLegacyWebLibrariesThatCanBeFoundOnDisk() { WPFDoEvents.AssertThisCodeIs_NOT_RunningInTheUIThread(); try { ConfigurationManager.ThrowWhenActionIsNotEnabled(nameof(AddLegacyWebLibrariesThatCanBeFoundOnDisk)); /** * Plan: * - Iterate through all the folders in the Qiqqa data directory. * - If a folder contains a valid Library record and it is a WEB library, * then add it to our list with the word '[LEGACY]' in front of it. */ string base_directory_path = UpgradePaths.V037To038.SQLiteUpgrade.BaseDirectoryForQiqqa; Logging.Info("Going to scan for web libraries at: {0}", base_directory_path); if (Directory.Exists(base_directory_path)) { string[] library_directories = Directory.GetDirectories(base_directory_path); foreach (string library_directory in library_directories) { Logging.Info("Inspecting directory {0} - Phase 1 : Web & Known Libraries", library_directory); string databaselist_file = Path.GetFullPath(Path.Combine(library_directory, @"Qiqqa.known_web_libraries")); if (File.Exists(databaselist_file)) { LoadKnownWebLibraries(databaselist_file, only_load_those_libraries_which_are_actually_present: true); } } foreach (string library_directory in library_directories) { Logging.Info("Inspecting directory {0} - Phase 2 : Intranet Libraries", library_directory); string databaselist_file = IntranetLibraryTools.GetLibraryDetailPath(library_directory); if (File.Exists(databaselist_file)) { IntranetLibraryDetail intranet_library_detail = IntranetLibraryDetail.Read(databaselist_file); UpdateKnownWebLibraryFromIntranet(library_directory, extra_info_message_on_skip: String.Format(" as obtained from file {0}", databaselist_file)); } } foreach (string library_directory in library_directories) { Logging.Info("Inspecting directory {0} - Phase 3 : Bundles", library_directory); // must be a qiqqa_bundle and/or qiqqa_bundle_manifest file set Logging.Warn("Auto bundle import at startup is not yet supported."); } foreach (string library_directory in library_directories) { Logging.Info("Inspecting directory {0} - Phase 4 : Local and Legacy Libraries", library_directory); string database_file = LibraryDB.GetLibraryDBPath(library_directory); string db_syncref_path = IntranetLibraryTools.GetLibraryMetadataPath(library_directory); // add/update only if this is not a Internet sync directory/DB! if (File.Exists(db_syncref_path)) { Logging.Info("Skip the Qiqqa Internet/Intranet Sync directory and the sync DB contained therein: '{0}'", db_syncref_path); // https://github.com/jimmejardine/qiqqa-open-source/issues/145 :: delete lib file when it is very small and was illegally // constructed by a previous v82beta Qiqqa release: if (File.Exists(database_file)) { long s3length = File.GetSize(database_file); if (6 * 1024 > s3length) { Logging.Warn("DELETE the wrongfully created DB file '{0}' in the Qiqqa Internet/Intranet Sync directory and the sync DB contained therein: '{1}', which has precedence!", database_file, db_syncref_path); FileTools.DeleteToRecycleBin(database_file); } else { Logging.Error("Inspect the Library DB file '{0}' in the Qiqqa Internet/Intranet Sync directory and the sync DB contained therein: '{1}', which MAY have precedence. Delete one of these manually to clean up your system as Qiqqa heuristics cannot tell which is the prevalent metadata database here!", database_file, db_syncref_path); } } continue; } if (File.Exists(database_file)) { var library_id = Path.GetFileName(library_directory); WebLibraryDetail new_web_library_detail = new WebLibraryDetail(); new_web_library_detail.Id = library_id; new_web_library_detail.Title = "Legacy Web Library - " + new_web_library_detail.Id; new_web_library_detail.IsReadOnly = false; // library: UNKNOWN type UpdateKnownWebLibrary(new_web_library_detail); } } } } catch (Exception ex) { Logging.Error(ex, "There was a problem while scanning for (legacy) libraries."); } }