Imported version 0.2-1
[mstardict] / src / lib / storage.cpp
diff --git a/src/lib/storage.cpp b/src/lib/storage.cpp
new file mode 100644 (file)
index 0000000..ad1ab96
--- /dev/null
@@ -0,0 +1,92 @@
+#include "storage.h"
+#include <glib.h>
+
+ResourceStorage::ResourceStorage()
+{
+       file_storage = NULL;
+       database_storage = NULL;
+}
+
+ResourceStorage::~ResourceStorage()
+{
+       delete file_storage;
+       delete database_storage;
+}
+
+bool ResourceStorage::load(const char *dirname)
+{
+       std::string resdir(dirname);
+       resdir += G_DIR_SEPARATOR_S "res";
+       if (g_file_test(resdir.c_str(), G_FILE_TEST_IS_DIR)) {
+               file_storage = new File_ResourceStorage(resdir.c_str());
+               is_file_or_db = 1;
+               return false;
+       }
+       std::string rifofilename(dirname);
+       rifofilename += G_DIR_SEPARATOR_S "res.rifo";
+       if (g_file_test(rifofilename.c_str(), G_FILE_TEST_EXISTS)) {
+               database_storage = new Database_ResourceStorage();
+               bool failed = database_storage->load(rifofilename.c_str());
+               if (failed) {
+                       delete database_storage;
+                       database_storage = NULL;
+                       return true;
+               }
+               is_file_or_db = 0;
+               return false;
+       }
+       return true;
+}
+
+const char *ResourceStorage::get_file_path(const char *key)
+{
+       if (is_file_or_db)
+               return file_storage->get_file_path(key);
+       else
+               return database_storage->get_file_path(key);
+}
+
+const char *ResourceStorage::get_file_content(const char *key)
+{
+       if (is_file_or_db)
+               return file_storage->get_file_content(key);
+       else
+               return database_storage->get_file_content(key);
+}
+
+File_ResourceStorage::File_ResourceStorage(const char *resdir_)
+{
+       resdir = resdir_;
+}
+
+const char *File_ResourceStorage::get_file_path(const char *key)
+{
+       filepath = resdir;
+       filepath += G_DIR_SEPARATOR;
+       filepath += key;
+       return filepath.c_str();
+}
+
+const char *File_ResourceStorage::get_file_content(const char *key)
+{
+       return NULL;
+}
+
+Database_ResourceStorage::Database_ResourceStorage()
+{
+}
+
+bool Database_ResourceStorage::load(const char *rifofilename)
+{
+       return false;
+}
+
+const char *Database_ResourceStorage::get_file_path(const char *key)
+{
+       return NULL;
+}
+
+const char *Database_ResourceStorage::get_file_content(const char *key)
+{
+       return NULL;
+}