void Config::handleOption(const QString &option, const QVariant &value) { bool boolValue = false; QStringList booleanFlags; booleanFlags << "debug"; booleanFlags << "disk-cache"; booleanFlags << "ignore-ssl-errors"; booleanFlags << "load-images"; booleanFlags << "local-to-remote-url-access"; booleanFlags << "remote-debugger-autorun"; booleanFlags << "web-security"; if (booleanFlags.contains(option)) { if ((value != "true") && (value != "yes") && (value != "false") && (value != "no")) { setUnknownOption(QString("Invalid values for '%1' option.").arg(option)); return; } boolValue = (value == "true") || (value == "yes"); } if (option == "cookies-file") { setCookiesFile(value.toString()); } if (option == "config") { loadJsonFile(value.toString()); } if (option == "debug") { setPrintDebugMessages(boolValue); } if (option == "disk-cache") { setDiskCacheEnabled(boolValue); } if (option == "ignore-ssl-errors") { setIgnoreSslErrors(boolValue); } if (option == "load-images") { setAutoLoadImages(boolValue); } if (option == "local-storage-path") { setOfflineStoragePath(value.toString()); } if (option == "local-storage-quota") { setOfflineStorageDefaultQuota(value.toInt()); } if (option == "local-to-remote-url-access") { setLocalToRemoteUrlAccessEnabled(boolValue); } if (option == "max-disk-cache") { setMaxDiskCacheSize(value.toInt()); } if (option == "output-encoding") { setOutputEncoding(value.toString()); } if (option == "remote-debugger-autorun") { setRemoteDebugAutorun(boolValue); } if (option == "remote-debugger-port") { setDebug(true); setRemoteDebugPort(value.toInt()); } if (option == "proxy") { setProxy(value.toString()); } if (option == "proxy-type") { setProxyType(value.toString()); } if (option == "proxy-auth") { setProxyAuth(value.toString()); } if (option == "script-encoding") { setScriptEncoding(value.toString()); } if (option == "web-security") { setWebSecurityEnabled(boolValue); } if (option == "ssl-protocol") { setSslProtocol(value.toString()); } if (option == "webdriver") { setWebdriver(value.toString()); } if (option == "webdriver-selenium-grid-hub") { setWebdriverSeleniumGridHub(value.toString()); } }
void Config::processArgs(const QStringList &args) { QStringListIterator it(args); while (it.hasNext()) { const QString &arg = it.next(); if (arg == "--help" || arg == "-h") { setHelpFlag(true); return; } if (arg == "--version" || arg == "-v") { setVersionFlag(true); return; } if (arg == "--load-images=yes") { setAutoLoadImages(true); continue; } if (arg == "--load-images=no") { setAutoLoadImages(false); continue; } if (arg == "--disk-cache=yes") { setDiskCacheEnabled(true); continue; } if (arg == "--disk-cache=no") { setDiskCacheEnabled(false); continue; } if (arg.startsWith("--max-disk-cache-size=")) { setMaxDiskCacheSize(arg.mid(arg.indexOf("=") + 1).trimmed().toInt()); continue; } if (arg == "--ignore-ssl-errors=yes") { setIgnoreSslErrors(true); continue; } if (arg == "--ignore-ssl-errors=no") { setIgnoreSslErrors(false); continue; } if (arg == "--local-to-remote-url-access=no") { setLocalToRemoteUrlAccessEnabled(false); continue; } if (arg == "--local-to-remote-url-access=yes") { setLocalToRemoteUrlAccessEnabled(true); continue; } if (arg.startsWith("--proxy-type=")) { setProxyType(arg.mid(13).trimmed()); continue; } if (arg.startsWith("--proxy-auth=")){ setProxyAuth(arg.mid(13).trimmed()); continue; } if (arg.startsWith("--proxy=")) { setProxy(arg.mid(8).trimmed()); continue; } if (arg.startsWith("--cookies-file=")) { setCookiesFile(arg.mid(15).trimmed()); continue; } if (arg.startsWith("--local-storage-path=")) { setOfflineStoragePath(arg.mid(21).trimmed()); continue; } if (arg.startsWith("--local-storage-quota=")) { setOfflineStorageDefaultQuota(arg.mid(arg.indexOf("=") + 1).trimmed().toInt()); continue; } if (arg.startsWith("--output-encoding=")) { setOutputEncoding(arg.mid(18).trimmed()); continue; } if (arg.startsWith("--script-encoding=")) { setScriptEncoding(arg.mid(18).trimmed()); continue; } if (arg.startsWith("--config=")) { QString configPath = arg.mid(9).trimmed(); loadJsonFile(configPath); continue; } if (arg.startsWith("--remote-debugger-port=")) { setDebug(true); setRemoteDebugPort(arg.mid(23).trimmed().toInt()); continue; } if (arg == "--remote-debugger-autorun=yes") { setRemoteDebugAutorun(true); continue; } if (arg == "--remote-debugger-autorun=no") { setRemoteDebugAutorun(false); continue; } if (arg == "--web-security=yes") { setWebSecurityEnabled(true); continue; } if (arg == "--web-security=no") { setWebSecurityEnabled(false); continue; } if (arg == "--debug=yes") { setPrintDebugMessages(true); continue; } if (arg == "--debug=no") { setPrintDebugMessages(false); continue; } if (arg.startsWith("--")) { setUnknownOption(QString("Unknown option '%1'").arg(arg)); return; } // There are no more options at this point. // The remaining arguments are available for the script. m_scriptFile = arg; while (it.hasNext()) { m_scriptArgs += it.next(); } } }
void Settings::loadGlobal() { QMutexLocker locker{&bigLock}; if (loaded) return; createSettingsDir(); if (QFile(qApp->applicationDirPath()+QDir::separator()+globalSettingsFile).exists()) { QSettings ps(qApp->applicationDirPath()+QDir::separator()+globalSettingsFile, QSettings::IniFormat); ps.setIniCodec("UTF-8"); ps.beginGroup("General"); makeToxPortable = ps.value("makeToxPortable", false).toBool(); ps.endGroup(); } else { makeToxPortable = false; } QDir dir(getSettingsDirPath()); QString filePath = dir.filePath(globalSettingsFile); // If no settings file exist -- use the default one if (!QFile(filePath).exists()) { qDebug() << "No settings file found, using defaults"; filePath = ":/conf/" + globalSettingsFile; } qDebug() << "Loading settings from " + filePath; QSettings s(filePath, QSettings::IniFormat); s.setIniCodec("UTF-8"); s.beginGroup("Login"); autoLogin = s.value("autoLogin", false).toBool(); s.endGroup(); s.beginGroup("DHT Server"); if (s.value("useCustomList").toBool()) { useCustomDhtList = true; qDebug() << "Using custom bootstrap nodes list"; int serverListSize = s.beginReadArray("dhtServerList"); for (int i = 0; i < serverListSize; i ++) { s.setArrayIndex(i); DhtServer server; server.name = s.value("name").toString(); server.userId = s.value("userId").toString(); server.address = s.value("address").toString(); server.port = s.value("port").toInt(); dhtServerList << server; } s.endArray(); } else { useCustomDhtList=false; } s.endGroup(); s.beginGroup("General"); enableIPv6 = s.value("enableIPv6", true).toBool(); translation = s.value("translation", "en").toString(); showSystemTray = s.value("showSystemTray", SHOW_SYSTEM_TRAY_DEFAULT).toBool(); makeToxPortable = s.value("makeToxPortable", false).toBool(); autostartInTray = s.value("autostartInTray", false).toBool(); closeToTray = s.value("closeToTray", false).toBool(); forceTCP = s.value("forceTCP", false).toBool(); setProxyType(s.value("proxyType", static_cast<int>(ProxyType::ptNone)).toInt()); proxyAddr = s.value("proxyAddr", "").toString(); proxyPort = s.value("proxyPort", 0).toInt(); if (currentProfile.isEmpty()) { currentProfile = s.value("currentProfile", "").toString(); currentProfileId = makeProfileId(currentProfile); } autoAwayTime = s.value("autoAwayTime", 10).toInt(); checkUpdates = s.value("checkUpdates", true).toBool(); showWindow = s.value("showWindow", true).toBool(); showInFront = s.value("showInFront", false).toBool(); notifySound = s.value("notifySound", true).toBool(); busySound = s.value("busySound", false).toBool(); groupAlwaysNotify = s.value("groupAlwaysNotify", false).toBool(); fauxOfflineMessaging = s.value("fauxOfflineMessaging", true).toBool(); autoSaveEnabled = s.value("autoSaveEnabled", false).toBool(); globalAutoAcceptDir = s.value("globalAutoAcceptDir", QStandardPaths::locate(QStandardPaths::HomeLocation, QString(), QStandardPaths::LocateDirectory) ).toString(); separateWindow = s.value("separateWindow", false).toBool(); dontGroupWindows = s.value("dontGroupWindows", true).toBool(); groupchatPosition = s.value("groupchatPosition", true).toBool(); stylePreference = static_cast<StyleType>(s.value("stylePreference", 1).toInt()); s.endGroup(); s.beginGroup("Advanced"); int sType = s.value("dbSyncType", static_cast<int>(Db::syncType::stFull)).toInt(); setDbSyncType(sType); s.endGroup(); s.beginGroup("Widgets"); QList<QString> objectNames = s.childKeys(); for (const QString& name : objectNames) widgetSettings[name] = s.value(name).toByteArray(); s.endGroup(); s.beginGroup("GUI"); const QString DEFAULT_SMILEYS = ":/smileys/emojione/emoticons.xml"; smileyPack = s.value("smileyPack", DEFAULT_SMILEYS).toString(); if (!SmileyPack::isValid(smileyPack)) { smileyPack = DEFAULT_SMILEYS; } emojiFontPointSize = s.value("emojiFontPointSize", 16).toInt(); firstColumnHandlePos = s.value("firstColumnHandlePos", 50).toInt(); secondColumnHandlePosFromRight = s.value("secondColumnHandlePosFromRight", 50).toInt(); timestampFormat = s.value("timestampFormat", "hh:mm:ss").toString(); dateFormat = s.value("dateFormat", "dddd, MMMM d, yyyy").toString(); minimizeOnClose = s.value("minimizeOnClose", false).toBool(); minimizeToTray = s.value("minimizeToTray", false).toBool(); lightTrayIcon = s.value("lightTrayIcon", false).toBool(); useEmoticons = s.value("useEmoticons", true).toBool(); statusChangeNotificationEnabled = s.value("statusChangeNotificationEnabled", false).toBool(); themeColor = s.value("themeColor", 0).toInt(); style = s.value("style", "").toString(); if (style == "") // Default to Fusion if available, otherwise no style { if (QStyleFactory::keys().contains("Fusion")) style = "Fusion"; else style = "None"; } s.endGroup(); s.beginGroup("Chat"); { chatMessageFont = s.value("chatMessageFont", Style::getFont(Style::Big)).value<QFont>(); } s.endGroup(); s.beginGroup("State"); windowGeometry = s.value("windowGeometry", QByteArray()).toByteArray(); windowState = s.value("windowState", QByteArray()).toByteArray(); splitterState = s.value("splitterState", QByteArray()).toByteArray(); dialogGeometry = s.value("dialogGeometry", QByteArray()).toByteArray(); dialogSplitterState = s.value("dialogSplitterState", QByteArray()).toByteArray(); dialogSettingsGeometry = s.value("dialogSettingsGeometry", QByteArray()).toByteArray(); s.endGroup(); s.beginGroup("Audio"); inDev = s.value("inDev", "").toString(); audioInDevEnabled = s.value("audioInDevEnabled", true).toBool(); outDev = s.value("outDev", "").toString(); audioOutDevEnabled = s.value("audioOutDevEnabled", true).toBool(); audioInGainDecibel = s.value("inGain", 0).toReal(); outVolume = s.value("outVolume", 100).toInt(); s.endGroup(); s.beginGroup("Video"); videoDev = s.value("videoDev", "").toString(); camVideoRes = s.value("camVideoRes", QRect()).toRect(); screenRegion = s.value("screenRegion", QRect()).toRect(); screenGrabbed = s.value("screenGrabbed", false).toBool(); camVideoFPS = s.value("camVideoFPS", 0).toUInt(); s.endGroup(); // Read the embedded DHT bootstrap nodes list if needed if (dhtServerList.isEmpty()) { QSettings rcs(":/conf/settings.ini", QSettings::IniFormat); rcs.setIniCodec("UTF-8"); rcs.beginGroup("DHT Server"); int serverListSize = rcs.beginReadArray("dhtServerList"); for (int i = 0; i < serverListSize; i ++) { rcs.setArrayIndex(i); DhtServer server; server.name = rcs.value("name").toString(); server.userId = rcs.value("userId").toString(); server.address = rcs.value("address").toString(); server.port = rcs.value("port").toInt(); dhtServerList << server; } rcs.endArray(); rcs.endGroup(); } loaded = true; }