1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00
qTox/src/persistence/settings.h

485 lines
13 KiB
C
Raw Normal View History

2014-06-25 04:11:11 +08:00
/*
Copyright (C) 2013 by Maxim Biro <nurupo.contributions@gmail.com>
Copyright © 2014-2015 by The qTox Project
This file is part of qTox, a Qt-based graphical interface for Tox.
2014-06-25 04:11:11 +08:00
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
qTox is distributed in the hope that it will be useful,
2014-06-25 04:11:11 +08:00
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with qTox. If not, see <http://www.gnu.org/licenses/>.
2014-06-25 04:11:11 +08:00
*/
#ifndef SETTINGS_HPP
#define SETTINGS_HPP
#include <QFont>
2014-06-25 04:11:11 +08:00
#include <QHash>
2014-09-11 21:44:34 +08:00
#include <QObject>
2014-09-24 22:51:16 +08:00
#include <QPixmap>
2015-06-05 22:27:15 +08:00
#include <QMutex>
#include <QDate>
#include <QNetworkProxy>
2015-06-05 22:24:47 +08:00
#include "src/core/corestructs.h"
2014-06-25 04:11:11 +08:00
class ToxId;
class Profile;
2014-11-12 20:56:24 +08:00
namespace Db { enum class syncType; }
2014-12-28 20:32:25 +08:00
enum ProxyType {ptNone, ptSOCKS5, ptHTTP};
enum StyleType {NONE, WITH_CHARS, WITHOUT_CHARS};
2014-06-25 04:11:11 +08:00
class Settings : public QObject
{
Q_OBJECT
public:
static Settings& getInstance();
2015-06-06 00:01:50 +08:00
static void destroyInstance();
QString getSettingsDirPath();
QString getAppDataDirPath();
QString getAppCacheDirPath();
2015-06-04 05:20:47 +08:00
void createSettingsDir();
void createPersonal(QString basename);
2014-06-25 04:11:11 +08:00
void savePersonal();
void savePersonal(Profile *profile);
void loadGlobal();
void loadPersonal();
void loadPersonal(Profile *profile);
struct Request
{
QString address;
QString message;
bool read;
};
2015-06-06 00:01:50 +08:00
public slots:
void saveGlobal();
void sync();
2014-06-25 04:11:11 +08:00
2015-06-05 22:24:47 +08:00
signals:
void dhtServerListChanged();
void smileyPackChanged();
void emojiFontChanged();
2014-06-25 04:11:11 +08:00
2015-06-05 22:24:47 +08:00
public:
2014-06-25 04:11:11 +08:00
const QList<DhtServer>& getDhtServerList() const;
void setDhtServerList(const QList<DhtServer>& newDhtServerList);
2014-07-02 06:47:06 +08:00
bool getEnableIPv6() const;
void setEnableIPv6(bool newValue);
2014-07-13 04:58:58 +08:00
bool getMakeToxPortable() const;
void setMakeToxPortable(bool newValue);
2014-12-17 21:44:23 +08:00
bool getAutorun() const;
void setAutorun(bool newValue);
bool getAutostartInTray() const;
void setAutostartInTray(bool newValue);
2014-10-20 03:47:06 +08:00
bool getCloseToTray() const;
void setCloseToTray(bool newValue);
2014-10-20 19:50:12 +08:00
bool getMinimizeToTray() const;
void setMinimizeToTray(bool newValue);
2014-12-12 03:34:12 +08:00
bool getLightTrayIcon() const;
void setLightTrayIcon(bool newValue);
QString getStyle() const;
void setStyle(const QString& newValue);
bool getShowSystemTray() const;
void setShowSystemTray(const bool& newValue);
bool getUseEmoticons() const;
void setUseEmoticons(bool newValue);
QString getCurrentProfile() const;
uint32_t getCurrentProfileId() const;
void setCurrentProfile(QString profile);
QString getTranslation() const;
void setTranslation(QString newValue);
2016-01-24 05:50:57 +08:00
// Toxme
void deleteToxme();
void setToxme(QString name, QString server, QString bio, bool priv, QString pass = "");
QString getToxmeInfo() const;
void setToxmeInfo(QString info);
QString getToxmeBio() const;
void setToxmeBio(QString bio);
bool getToxmePriv() const;
void setToxmePriv(bool priv);
QString getToxmePass() const;
void setToxmePass(const QString &pass);
2016-01-24 05:50:57 +08:00
void setAutoSaveEnabled(bool newValue);
bool getAutoSaveEnabled() const;
2014-07-05 01:22:43 +08:00
2014-10-06 04:49:44 +08:00
bool getForceTCP() const;
void setForceTCP(bool newValue);
QNetworkProxy getProxy() const;
2014-10-06 04:49:44 +08:00
QString getProxyAddr() const;
void setProxyAddr(const QString& newValue);
2014-12-28 20:32:25 +08:00
ProxyType getProxyType() const;
void setProxyType(int newValue);
2014-10-07 10:09:15 +08:00
quint16 getProxyPort() const;
void setProxyPort(quint16 newValue);
2014-10-06 04:49:44 +08:00
2014-06-25 04:11:11 +08:00
bool getEnableLogging() const;
void setEnableLogging(bool newValue);
2014-11-12 20:56:24 +08:00
Db::syncType getDbSyncType() const;
void setDbSyncType(int newValue);
2014-10-16 17:47:58 +08:00
int getAutoAwayTime() const;
void setAutoAwayTime(int newValue);
bool getCheckUpdates() const;
void setCheckUpdates(bool newValue);
bool getShowWindow() const;
void setShowWindow(bool newValue);
bool getShowInFront() const;
void setShowInFront(bool newValue);
bool getNotifySound() const;
void setNotifySound(bool newValue);
bool getBusySound() const;
void setBusySound(bool newValue);
bool getGroupAlwaysNotify() const;
void setGroupAlwaysNotify(bool newValue);
2014-10-29 04:21:37 +08:00
QString getInDev() const;
void setInDev(const QString& deviceSpecifier);
bool getAudioInDevEnabled() const;
void setAudioInDevEnabled(bool enabled);
2014-10-29 04:21:37 +08:00
QString getOutDev() const;
void setOutDev(const QString& deviceSpecifier);
bool getAudioOutDevEnabled() const;
void setAudioOutDevEnabled(bool enabled);
qreal getAudioInGain() const;
void setAudioInGain(qreal dB);
int getOutVolume() const;
void setOutVolume(int volume);
2015-05-14 10:46:28 +08:00
QString getVideoDev() const;
void setVideoDev(const QString& deviceSpecifier);
QRect getScreenRegion() const;
void setScreenRegion(const QRect &value);
bool getScreenGrabbed() const;
void setScreenGrabbed(bool value);
QRect getCamVideoRes() const;
void setCamVideoRes(QRect newValue);
2015-08-19 05:44:34 +08:00
unsigned short getCamVideoFPS() const;
void setCamVideoFPS(unsigned short newValue);
2014-06-25 04:11:11 +08:00
bool isAnimationEnabled() const;
void setAnimationEnabled(bool newValue);
2014-07-25 20:52:14 +08:00
QString getSmileyPack() const;
void setSmileyPack(const QString &value);
2014-06-25 04:11:11 +08:00
2014-11-16 04:30:20 +08:00
int getThemeColor() const;
void setThemeColor(const int& value);
StyleType getStylePreference() const;
void setStylePreference(StyleType newValue);
2014-06-25 04:11:11 +08:00
bool isCurstomEmojiFont() const;
void setCurstomEmojiFont(bool value);
int getEmojiFontPointSize() const;
void setEmojiFontPointSize(int value);
2015-11-10 04:54:28 +08:00
QString getContactNote(const ToxId& id) const;
void setContactNote(const ToxId& id, const QString& note);
QString getAutoAcceptDir(const ToxId& id) const;
2015-11-10 04:54:28 +08:00
void setAutoAcceptDir(const ToxId& id, const QString& dir);
2014-10-18 11:02:13 +08:00
2014-10-20 12:25:52 +08:00
QString getGlobalAutoAcceptDir() const;
void setGlobalAutoAcceptDir(const QString& dir);
2014-06-25 04:11:11 +08:00
// ChatView
const QFont& getChatMessageFont() const;
void setChatMessageFont(const QFont& font);
2014-06-25 04:11:11 +08:00
int getFirstColumnHandlePos() const;
void setFirstColumnHandlePos(const int pos);
int getSecondColumnHandlePosFromRight() const;
void setSecondColumnHandlePosFromRight(const int pos);
const QString& getTimestampFormat() const;
void setTimestampFormat(const QString& format);
const QString& getDateFormat() const;
void setDateFormat(const QString& format);
2014-06-25 04:11:11 +08:00
bool isMinimizeOnCloseEnabled() const;
void setMinimizeOnClose(bool newValue);
bool getStatusChangeNotificationEnabled() const;
void setStatusChangeNotificationEnabled(bool newValue);
2014-06-25 04:11:11 +08:00
// Privacy
bool isTypingNotificationEnabled() const;
void setTypingNotification(bool enabled);
// State
QByteArray getWindowGeometry() const;
void setWindowGeometry(const QByteArray &value);
QByteArray getWindowState() const;
void setWindowState(const QByteArray &value);
2014-08-11 20:07:27 +08:00
QByteArray getSplitterState() const;
void setSplitterState(const QByteArray &value);
2015-06-19 22:58:48 +08:00
QByteArray getDialogGeometry() const;
void setDialogGeometry(const QByteArray& value);
QByteArray getDialogSplitterState() const;
void setDialogSplitterState(const QByteArray &value);
QByteArray getDialogSettingsGeometry() const;
void setDialogSettingsGeometry(const QByteArray& value);
QString getFriendAdress(const QString &publicKey) const;
void updateFriendAdress(const QString &newAddr);
QString getFriendAlias(const ToxId &id) const;
void setFriendAlias(const ToxId &id, const QString &alias);
int getFriendCircleID(const ToxId &id) const;
void setFriendCircleID(const ToxId &id, int circleID);
QDate getFriendActivity(const ToxId &id) const;
void setFriendActivity(const ToxId &id, const QDate &date);
void removeFriendSettings(const ToxId &id);
2014-11-10 21:06:35 +08:00
bool getFauxOfflineMessaging() const;
void setFauxOfflineMessaging(bool value);
bool getCompactLayout() const;
void setCompactLayout(bool compact);
bool getSeparateWindow() const;
void setSeparateWindow(bool value);
2015-06-19 22:58:48 +08:00
bool getDontGroupWindows() const;
void setDontGroupWindows(bool value);
bool getGroupchatPosition() const;
void setGroupchatPosition(bool value);
2015-06-05 21:24:02 +08:00
bool getAutoLogin() const;
void setAutoLogin(bool state);
int getCircleCount() const;
int addCircle(const QString &name = QString());
int removeCircle(int id);
QString getCircleName(int id) const;
void setCircleName(int id, const QString &name);
bool getCircleExpanded(int id) const;
void setCircleExpanded(int id, bool expanded);
bool addFriendRequest(const QString &friendAddress, const QString &message);
unsigned int getUnreadFriendRequests() const;
Request getFriendRequest(int index) const;
int getFriendRequestSize() const;
void clearUnreadFriendRequests();
void removeFriendRequest(int index);
void readFriendRequest(int index);
2015-06-05 22:24:47 +08:00
QByteArray getWidgetData(const QString& uniqueName) const;
void setWidgetData(const QString& uniqueName, const QByteArray& data);
2014-06-25 04:11:11 +08:00
2015-06-05 22:24:47 +08:00
// Wrappers around getWidgetData() and setWidgetData()
// Assume widget has a unique objectName set
template <class T>
void restoreGeometryState(T* widget) const
{
widget->restoreGeometry(getWidgetData(widget->objectName() + "Geometry"));
widget->restoreState(getWidgetData(widget->objectName() + "State"));
}
template <class T>
void saveGeometryState(const T* widget)
{
setWidgetData(widget->objectName() + "Geometry", widget->saveGeometry());
setWidgetData(widget->objectName() + "State", widget->saveState());
}
static uint32_t makeProfileId(const QString& profile);
2015-06-05 22:24:47 +08:00
private:
2014-09-01 04:26:45 +08:00
Settings();
2015-06-06 00:01:50 +08:00
~Settings();
2014-09-01 04:26:45 +08:00
Settings(Settings &settings) = delete;
Settings& operator=(const Settings&) = delete;
private slots:
void savePersonal(QString profileName, const QString &password);
2014-06-25 04:11:11 +08:00
2015-06-05 22:24:47 +08:00
private:
2014-06-25 04:11:11 +08:00
bool loaded;
bool useCustomDhtList;
2014-06-25 04:11:11 +08:00
QList<DhtServer> dhtServerList;
int dhtServerId;
bool dontShowDhtDialog;
2015-06-05 21:24:02 +08:00
bool autoLogin;
2014-11-10 21:06:35 +08:00
bool fauxOfflineMessaging;
bool compactLayout;
bool groupchatPosition;
bool separateWindow;
2015-06-19 22:58:48 +08:00
bool dontGroupWindows;
2014-07-02 06:47:06 +08:00
bool enableIPv6;
QString translation;
2015-06-05 22:24:47 +08:00
bool makeToxPortable;
bool autostartInTray;
2014-10-20 03:47:06 +08:00
bool closeToTray;
2014-10-20 19:50:12 +08:00
bool minimizeToTray;
2014-12-12 03:34:12 +08:00
bool lightTrayIcon;
bool useEmoticons;
bool checkUpdates;
bool showWindow;
bool showInFront;
bool notifySound;
bool busySound;
bool groupAlwaysNotify;
2014-10-06 04:49:44 +08:00
bool forceTCP;
2014-10-07 10:09:15 +08:00
2014-12-28 20:32:25 +08:00
ProxyType proxyType;
2014-10-06 04:49:44 +08:00
QString proxyAddr;
quint16 proxyPort;
2014-07-02 06:47:06 +08:00
QString currentProfile;
uint32_t currentProfileId;
2014-07-02 06:47:06 +08:00
2016-01-24 05:50:57 +08:00
// Toxme Info
QString toxmeInfo;
2016-01-24 05:50:57 +08:00
QString toxmeBio;
bool toxmePriv;
QString toxmePass;
2014-06-25 04:11:11 +08:00
bool enableLogging;
2014-10-16 17:47:58 +08:00
int autoAwayTime;
2014-06-25 04:11:11 +08:00
QHash<QString, QByteArray> widgetSettings;
2014-10-18 11:02:13 +08:00
QHash<QString, QString> autoAccept;
bool autoSaveEnabled;
2014-10-20 12:25:52 +08:00
QString globalAutoAcceptDir;
2014-06-25 04:11:11 +08:00
QList<Request> friendRequests;
2014-06-25 04:11:11 +08:00
// GUI
2014-07-25 20:52:14 +08:00
QString smileyPack;
int emojiFontPointSize;
2014-06-25 04:11:11 +08:00
bool minimizeOnClose;
QByteArray windowGeometry;
QByteArray windowState;
2014-08-11 20:07:27 +08:00
QByteArray splitterState;
2015-06-19 22:58:48 +08:00
QByteArray dialogGeometry;
QByteArray dialogSplitterState;
QByteArray dialogSettingsGeometry;
QString style;
bool showSystemTray;
2014-06-25 04:11:11 +08:00
// ChatView
QFont chatMessageFont;
StyleType stylePreference;
2014-06-25 04:11:11 +08:00
int firstColumnHandlePos;
int secondColumnHandlePosFromRight;
QString timestampFormat;
QString dateFormat;
bool statusChangeNotificationEnabled;
2014-06-25 04:11:11 +08:00
// Privacy
bool typingNotification;
2014-11-12 20:56:24 +08:00
Db::syncType dbSyncType;
2014-06-25 04:11:11 +08:00
2014-10-29 04:21:37 +08:00
// Audio
QString inDev;
bool audioInDevEnabled;
qreal audioInGainDecibel;
QString outDev;
bool audioOutDevEnabled;
int outVolume;
2014-10-29 04:21:37 +08:00
// Video
2015-05-14 10:46:28 +08:00
QString videoDev;
QRect camVideoRes;
QRect screenRegion;
bool screenGrabbed;
2015-08-19 05:44:34 +08:00
unsigned short camVideoFPS;
struct friendProp
{
QString alias;
QString addr;
2014-11-17 18:10:38 +08:00
QString autoAcceptDir;
2015-11-10 04:54:28 +08:00
QString note;
int circleID = -1;
QDate activity = QDate();
};
struct circleProp
{
QString name;
bool expanded;
};
QHash<QString, friendProp> friendLst;
QVector<circleProp> circleLst;
2014-11-16 04:30:20 +08:00
int themeColor;
2014-11-10 21:06:35 +08:00
2015-06-05 22:27:15 +08:00
static QMutex bigLock;
2015-06-05 22:24:47 +08:00
static Settings* settings;
static const QString globalSettingsFile;
2015-06-06 00:01:50 +08:00
static QThread* settingsThread;
2014-06-25 04:11:11 +08:00
};
#endif // SETTINGS_HPP