// ========================================================================== // METHOD ModuleDB::init // // TODO: detect double class registration // ========================================================================== bool ModuleDB::init (const value &reloadmods) { value cache; DBManager db; if (! db.init ()) { log::write (log::critical, "ModuleDB", "Could not init database"); CORE->delayedexiterror ("Error initializing database"); return false; } // Indicate to the database that we're bypassing the authorization layer // for this primary exercise. db.enableGodMode(); // Load the module.cache file, we will use this to track module versions // between opencore runs. string cachepath = PATH_CACHES; cachepath.strcat ("/module.cache"); // Make sure the module cache exists at all, if not, we will create // an empty cache. if (! fs.exists (cachepath)) { log::write (log::info, "ModuleDB", "No module cache found, assuming " "new install"); cache["modules"]; // Initialize cache's tree structure. // If we can't write, consider that a dealbreaker. if (! cache.saveshox (cachepath)) { log::write (log::critical, "ModuleDB", "Can not write to module " "cache at <%s>, bailing." %format (cachepath)); CORE->delayedexiterror ("Error saving module.cache"); sleep (2); exit (1); } } else { cache.loadshox (cachepath); if (! cache.count()) { log::write (log::warning, "ModuleDB", "Loaded module cache " "seems to be empty"); } } foreach (mod, reloadmods) { cache.rmval (mod); }