Added default configuration handling
authorBartosz Szatkowski <bulislaw@linux.com>
Wed, 11 Aug 2010 09:27:13 +0000 (11:27 +0200)
committerBartosz Szatkowski <bulislaw@linux.com>
Wed, 11 Aug 2010 09:27:13 +0000 (11:27 +0200)
data/mdictionary.defaults [new file with mode: 0644]
trunk/src/base/backbone/backbone.cpp
trunk/src/base/backbone/backbone.h
trunk/src/includes/settings.h
trunk/src/plugins/xdxf/src/xdxfplugin.cpp

diff --git a/data/mdictionary.defaults b/data/mdictionary.defaults
new file mode 100644 (file)
index 0000000..16de5f6
--- /dev/null
@@ -0,0 +1,4 @@
+[%General]
+plugin_path=/usr/lib/mdictiona
+history_length=10
+search_limit=15
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());
 }
 
 
index 61db1bc..ff57196 100644 (file)
@@ -155,22 +155,24 @@ private:
     QStringList _htmlResult;
     QTimer _timerSearch, _timerHtmlSearch;
     QTime _time;
-    QString _pluginPath;
+    QString _pluginPath, _defaultPluginPath;
     QString _configPath;
-    int _searchLimit;
+    QString _defaultConfigPath;
+    int _searchLimit, _defaultSearchLimit;
     int _activeSearchNum;
     int _interval; //Search fetching timer.timeout interval in msec
-    int _historyLen;
+    int _historyLen, _defaultHistoryLen;
 
     void init();
     QStringList getFilesFromDir(QString dir, QStringList nameFilter);
     void loadPlugins(); //< locate and load plugins
-    void loadPrefs();
-    void loadDicts();
+    void loadPrefs(QString fileName);
+    void loadDicts(QString fileName, bool _default=false);
     void saveState(QSettings*, Settings*, bool, uint);
     void addInternalDictionary(CommonDictInterface*, bool);
+    void savePrefs(QSettings*);
+    void saveDefaultPrefs(QSettings*);
     CommonDictInterface* plugin(QString type); //< search for given type plugin
-    //void writeConfig(QString key, QString value);
 
 };
 
index 3487e02..ae529f6 100644 (file)
@@ -34,6 +34,9 @@ class CommonDictInterface;
 class Settings {
   public:
     Settings(){}
+    Settings(const Settings* set) {
+        _settings = QHash<QString, QString>(set->_settings);
+    }
 
     /*! \returns value fo given key
          \param key
@@ -50,7 +53,7 @@ class Settings {
         _settings.insert(key, value);
     }
 
-    QList<QString> keys() {
+    QList<QString> keys() const {
         return _settings.keys();
     }
 
index 2c4da4c..f9c0eb4 100644 (file)
@@ -40,11 +40,9 @@ XdxfPlugin::XdxfPlugin(QObject *parent) : CommonDictInterface(parent),
 
     _wordsCount = 0;
 
-    setPath("/usr/lib/mdictionary/dict.xdxf");
     stopped = false;
 
 
-    qDebug()<<removeAccents(QString::fromUtf8("Słońce"));
 }
 
 QString XdxfPlugin::langFrom() const {   
@@ -181,8 +179,12 @@ void XdxfPlugin::setPath(QString path){
 
 CommonDictInterface* XdxfPlugin::getNew(const Settings *settings) const {
     XdxfPlugin *plugin = new XdxfPlugin();
-    if(settings)
+    if(settings){
         plugin->setPath(settings->value("path"));
+        QStringList list = settings->keys();
+        foreach(QString key, list)
+            plugin->settings()->setValue(key, settings->value(key));
+    }
     return  plugin;
 }