Imported version 0.2-1
[mstardict] / src / lib / storage.cpp
1 #include "storage.h"
2 #include <glib.h>
3
4 ResourceStorage::ResourceStorage()
5 {
6         file_storage = NULL;
7         database_storage = NULL;
8 }
9
10 ResourceStorage::~ResourceStorage()
11 {
12         delete file_storage;
13         delete database_storage;
14 }
15
16 bool ResourceStorage::load(const char *dirname)
17 {
18         std::string resdir(dirname);
19         resdir += G_DIR_SEPARATOR_S "res";
20         if (g_file_test(resdir.c_str(), G_FILE_TEST_IS_DIR)) {
21                 file_storage = new File_ResourceStorage(resdir.c_str());
22                 is_file_or_db = 1;
23                 return false;
24         }
25         std::string rifofilename(dirname);
26         rifofilename += G_DIR_SEPARATOR_S "res.rifo";
27         if (g_file_test(rifofilename.c_str(), G_FILE_TEST_EXISTS)) {
28                 database_storage = new Database_ResourceStorage();
29                 bool failed = database_storage->load(rifofilename.c_str());
30                 if (failed) {
31                         delete database_storage;
32                         database_storage = NULL;
33                         return true;
34                 }
35                 is_file_or_db = 0;
36                 return false;
37         }
38         return true;
39 }
40
41 const char *ResourceStorage::get_file_path(const char *key)
42 {
43         if (is_file_or_db)
44                 return file_storage->get_file_path(key);
45         else
46                 return database_storage->get_file_path(key);
47 }
48
49 const char *ResourceStorage::get_file_content(const char *key)
50 {
51         if (is_file_or_db)
52                 return file_storage->get_file_content(key);
53         else
54                 return database_storage->get_file_content(key);
55 }
56
57 File_ResourceStorage::File_ResourceStorage(const char *resdir_)
58 {
59         resdir = resdir_;
60 }
61
62 const char *File_ResourceStorage::get_file_path(const char *key)
63 {
64         filepath = resdir;
65         filepath += G_DIR_SEPARATOR;
66         filepath += key;
67         return filepath.c_str();
68 }
69
70 const char *File_ResourceStorage::get_file_content(const char *key)
71 {
72         return NULL;
73 }
74
75 Database_ResourceStorage::Database_ResourceStorage()
76 {
77 }
78
79 bool Database_ResourceStorage::load(const char *rifofilename)
80 {
81         return false;
82 }
83
84 const char *Database_ResourceStorage::get_file_path(const char *key)
85 {
86         return NULL;
87 }
88
89 const char *Database_ResourceStorage::get_file_content(const char *key)
90 {
91         return NULL;
92 }