setting.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. /*****************************************************************
  2. * Copyright (C) 2012 Marco Bavagnoli - lil.deimos@gmail.com *
  3. ******************************************************************/
  4. #include "setting.h"
  5. #include <QDesktopServices>
  6. #include <QCoreApplication>
  7. //#include <QDebug>
  8. Settings::Settings(QString appName, QString fileName, QObject *parent) : QObject(parent)
  9. {
  10. // Initialize the settings path
  11. m_confFile = QDesktopServices::storageLocation( QDesktopServices::DataLocation ) + "/" + appName + "/" + fileName;
  12. }
  13. QString Settings::filePath() const
  14. {
  15. return m_confFile;
  16. }
  17. void Settings::setFilePath(const QString &data)
  18. {
  19. m_confFile.clear();
  20. m_confFile.append(data);
  21. }
  22. void Settings::setValue(const QString & key, const QVariant & value)
  23. {
  24. QSettings settings(m_confFile, QSettings::IniFormat);
  25. settings.setValue(key, value);
  26. }
  27. QVariant Settings::getValue( const QString & key, const QVariant & defaultValue) const
  28. {
  29. QSettings settings(m_confFile, QSettings::IniFormat);
  30. return settings.value(key, defaultValue);
  31. }
  32. // first index=0
  33. void Settings::removeArrayEntry( const QString & key , int index)
  34. {
  35. QList< QVariantMap > array;
  36. array = getArray(key);
  37. array.removeAt(index);
  38. removeArray(key);
  39. foreach (QVariantMap entry, array)
  40. appendToArray(key, entry);
  41. bool b;
  42. b=true;
  43. }
  44. void Settings::removeArray( const QString & key )
  45. {
  46. QSettings settings(m_confFile, QSettings::IniFormat);
  47. settings.remove(key);
  48. }
  49. void Settings::appendToArray( const QString & key, QMap<QString, QVariant> values)
  50. {
  51. QSettings settings(m_confFile, QSettings::IniFormat);
  52. QMapIterator<QString, QVariant> i(values);
  53. // get the current size of this array
  54. int size = settings.beginReadArray(key);
  55. settings.endArray();
  56. settings.beginWriteArray(key);
  57. settings.setArrayIndex(size);
  58. while (i.hasNext()) {
  59. i.next();
  60. settings.setValue(i.key(), i.value() );
  61. }
  62. settings.endArray();
  63. }
  64. QString Settings::getArrayJson( const QString & key)
  65. {
  66. QSettings settings(m_confFile, QSettings::IniFormat);
  67. QString list;
  68. list = "[ { ";
  69. int size = settings.beginReadArray(key);
  70. for (int i = 0; i < size; ++i) {
  71. settings.setArrayIndex(i);
  72. QVariantMap entry;
  73. QStringList keys;
  74. keys = settings.allKeys();
  75. foreach (QString key, keys) {
  76. entry.insert( key, settings.value(key) );
  77. list += "\""+key+"\" : \""+settings.value(key).toString()+"\", ";
  78. }
  79. list.remove( list.length()-2, 2 );
  80. list += "},{";
  81. }
  82. list.remove( list.length()-2, 2 );
  83. list += " ]";
  84. list = list.replace("\n","<br>").replace("\r","").replace("\t"," ");
  85. // qDebug() << "LIST: " << list;
  86. settings.endArray();
  87. return list;
  88. }
  89. QString Settings::getArrayXml( const QString & key)
  90. {
  91. QSettings settings(m_confFile, QSettings::IniFormat);
  92. QString list;
  93. int size = settings.beginReadArray(key);
  94. list = "<xml>";
  95. for (int i = 0; i < size; ++i) {
  96. list += "<item>";
  97. settings.setArrayIndex(i);
  98. QVariantMap entry;
  99. QStringList keys;
  100. keys = settings.allKeys();
  101. foreach (QString key, keys) {
  102. entry.insert( key, settings.value(key) );
  103. list += "<"+key+">"+settings.value(key).toString()+"</"+key+">";
  104. }
  105. list += "</item>";
  106. }
  107. list = list.replace("\n"," ").replace("\r"," ").replace("\t"," ").replace("<br>"," ");
  108. list += "</xml>";
  109. // qDebug() << "LIST: " << list;
  110. settings.endArray();
  111. return list;
  112. }
  113. bool Settings::checkValueArray( const QString & key, const QString & arrayKey , const QString & value )
  114. {
  115. QSettings settings(m_confFile, QSettings::IniFormat);
  116. int size = settings.beginReadArray(key);
  117. for (int i = 0; i < size; ++i) {
  118. settings.setArrayIndex(i);
  119. if ( settings.value(arrayKey).toString().compare(value) == 0 ) return true;
  120. }
  121. return false;
  122. }
  123. int Settings::getIndexOfValueInArray( const QString & key, const QString & arrayKey , const QString & value )
  124. {
  125. QSettings settings(m_confFile, QSettings::IniFormat);
  126. int size = settings.beginReadArray(key);
  127. for (int i = 0; i < size; ++i) {
  128. settings.setArrayIndex(i);
  129. if ( settings.value(arrayKey).toString().compare(value) == 0 ) return i;
  130. }
  131. return -1;
  132. }
  133. QList< QVariantMap > Settings::getArray( const QString & key)
  134. {
  135. QSettings settings(m_confFile, QSettings::IniFormat);
  136. QList< QVariantMap > list;
  137. int size = settings.beginReadArray(key);
  138. for (int i = 0; i < size; ++i) {
  139. settings.setArrayIndex(i);
  140. QVariantMap entry;
  141. QStringList keys;
  142. keys = settings.allKeys();
  143. foreach (QString key, keys) {
  144. entry.insert( key, settings.value(key) );
  145. }
  146. list.append(entry);
  147. }
  148. settings.endArray();
  149. return list;
  150. }
  151. // https://bugreports.qt-project.org/browse/QTBUG-71
  152. int Settings::getTimeZone()
  153. {
  154. // determine how far off of UTC we are
  155. QDateTime now = QDateTime::currentDateTime();
  156. // check if we need to account for UTC being tomorrow relative to us
  157. int dayOffset = 0;
  158. if( now.date() < now.toUTC().date() )
  159. {
  160. dayOffset = 24;
  161. }
  162. int timezone = now.time().hour() - ( now.toUTC().time().hour() + dayOffset );
  163. // qDebug() << "TIMEZONE" << timezone;
  164. return timezone;
  165. }
  166. // convert a string with format "2012-02-06T06:00:00" ( the java Date() )to QDateTime
  167. QDateTime Settings::stringToDate(QString s)
  168. {
  169. QDateTime t;
  170. t = QDateTime::fromString(s, "yyyy-MM-ddThh:mm:ss");
  171. return t;
  172. }