Added default configuration handling
[mdictionary] / trunk / src / base / backbone / backbone.cpp
index 0988523..f5f535f 100644 (file)
 void Backbone::init() {
    _interval = 250; //msec
 
-   if(!_configPath.size())
-       _configPath = QDir::homePath() + "/.mdictionary";
-
-   loadPrefs();
-
-
-   if(!_pluginPath.size())
-       _pluginPath = "/usr/lib/mdictionary/";
+   _configPath = QDir::homePath() + "/.mdictionary/mdictionary.config";
+   _defaultConfigPath = QDir::homePath() + "/.mdictionary/mdictionary.defaults";
+   _pluginPath = "/usr/lib/mdictionary";
+   _historyLen = 10;
+   _searchLimit = 15;
+
+   loadPrefs(_defaultConfigPath);
+   _defaultPluginPath = _pluginPath;
+   _defaultHistoryLen = _historyLen;
+   _defaultSearchLimit = _searchLimit;
+   loadPrefs(_configPath);
 
    loadPlugins();
-   loadDicts();
+
+   loadDicts(_defaultConfigPath, true);
+   loadDicts(_configPath);
 
    connect(&_timerSearch, SIGNAL(timeout()), this, SLOT(translationReady()));
    connect(&_timerHtmlSearch, SIGNAL(timeout()), this,
@@ -231,6 +236,7 @@ void Backbone::loadPlugins() {
     QStringList nameFilter;
     nameFilter << "*.so";
     QStringList files = getFilesFromDir(_pluginPath, nameFilter);
+    qDebug() << files;
 
     foreach(QString file, files) {
         QPluginLoader loader(file);
@@ -256,12 +262,15 @@ CommonDictInterface* Backbone::plugin(QString type) {
 
 
 
-void Backbone::loadPrefs() {
-    QDir confDir(_configPath);
-    if(!confDir.exists())
-        qDebug() << "Configuration file dosn't exists (" << _configPath << ")";
+void Backbone::loadPrefs(QString fileName) {
+    QFileInfo file(QDir::toNativeSeparators(fileName));
+    QDir confDir(file.dir());
+    if(!confDir.exists()){
+        qDebug() << "Configuration file dosn't exists ("
+                << file.filePath() << ")";
         return;
-    QSettings set(_configPath + "/mdictionary.config", QSettings::IniFormat);
+    }
+    QSettings set(file.filePath(), QSettings::IniFormat);
     _pluginPath = set.value("general/plugin_path", _pluginPath).toString();
     _historyLen = set.value("general/history_length", 10).toInt();
     _searchLimit = set.value("general/search_limit", 15).toInt();
@@ -269,12 +278,33 @@ void Backbone::loadPrefs() {
 
 
 
-void Backbone::loadDicts() {
-    QDir confDir(_configPath);
-    if(!confDir.exists())
-        qDebug() << confDir.mkpath(_configPath);
+void Backbone::savePrefs(QSettings *set) {
+    set->setValue("general/plugin_path", _pluginPath);
+    set->setValue("general/history_length", _historyLen);
+    set->setValue("general/search_limit", _searchLimit);
+}
+
+
+
+void Backbone::saveDefaultPrefs(QSettings *set) {
+    set->setValue("general/plugin_path", _defaultPluginPath);
+    set->setValue("general/history_length", _defaultHistoryLen);
+    set->setValue("general/search_limit", _defaultSearchLimit);
+}
+
+
+
+void Backbone::loadDicts(QString fileName, bool _default) {
+    QFileInfo file(QDir::toNativeSeparators(fileName));
+    qDebug() << file.filePath();
+    QDir confDir(file.dir());
+    if(!confDir.exists()){
+        qDebug() << "Configuration file dosn't exists ("
+                << file.filePath() << ")";
+        return;
+    }
 
-    QSettings set(_configPath + "/mdictionary.config", QSettings::IniFormat);
+    QSettings set(file.filePath(), QSettings::IniFormat);
     QStringList dicts = set.childGroups();
     foreach(QString dict, dicts) {
         if(!dict.contains("dictionary_"))
@@ -290,9 +320,14 @@ void Backbone::loadDicts() {
         Settings* plugSet = new Settings();
         set.beginGroup(dict);
         QStringList items = set.childKeys();
-        foreach(QString item, items)
+        foreach(QString item, items) {
             plugSet->setValue(item, set.value(item, "").toString());
+        }
         bool active = set.value("active",1).toBool();
+
+        if(_default)
+            plugSet->setValue("_default_", "true");
+
         set.endGroup();
         addInternalDictionary(plug->getNew(plugSet), active);
     }
@@ -301,12 +336,27 @@ void Backbone::loadDicts() {
 
 
 void Backbone::dictUpdated() {
-    QDir confDir(_configPath);
+    QFileInfo file(QDir::toNativeSeparators(_configPath));
+    QDir confDir(file.dir());
     if(!confDir.exists())
-        qDebug() << confDir.mkpath(_configPath);
-    QSettings set(_configPath + "/mdictionary.config", QSettings::IniFormat);
+        confDir.mkpath(file.dir().path());
+    QSettings set(file.filePath(), QSettings::IniFormat);
+    set.clear();
+
+    QFileInfo defFile(QDir::toNativeSeparators(_defaultConfigPath));
+    QDir defConfDir(defFile.dir());
+    if(!defConfDir.exists())
+        defConfDir.mkpath(defFile.dir().path());
+    QSettings defSet(defFile.filePath(), QSettings::IniFormat);
+    defSet.clear();
+    savePrefs(&set);
+    saveDefaultPrefs(&defSet);
+
     foreach(CommonDictInterface* dict, _dicts.keys())
-        saveState(&set, dict->settings(), _dicts[dict], dict->hash());
+        if(!dict->settings()->keys().contains("_default_"))
+            saveState(&set, dict->settings(), _dicts[dict], dict->hash());
+        else
+            saveState(&defSet, dict->settings(), _dicts[dict], dict->hash());
 }