/* * Cantata * * Copyright (c) 2011-2012 Craig Drummond * * ---- * * 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 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * 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 this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "settings.h" #include "config.h" #include "musiclibraryitemalbum.h" #include "fancytabwidget.h" #include "albumsmodel.h" #include "itemview.h" #include "mpdparseutils.h" #ifdef ENABLE_KDE_SUPPORT #include #include #include "kwallet.h" #include #include #include K_GLOBAL_STATIC(Settings, instance) #endif Settings * Settings::self() { #ifdef ENABLE_KDE_SUPPORT return instance; #else static Settings *instance=0;; if(!instance) { instance=new Settings; } return instance; #endif } Settings::Settings() : timer(0) , ver(-1) #ifdef ENABLE_KDE_SUPPORT , cfg(KGlobal::config(), "General") , wallet(0) #endif { } Settings::~Settings() { #ifdef ENABLE_KDE_SUPPORT delete wallet; #endif } #ifdef ENABLE_KDE_SUPPORT #define GET_STRING(KEY, DEF) (cfg.readEntry(KEY, QString(DEF))) #define GET_STRINGLIST(KEY, DEF) (cfg.readEntry(KEY, DEF)) #define GET_BOOL(KEY, DEF) (cfg.readEntry(KEY, DEF)) #define GET_INT(KEY, DEF) (cfg.readEntry(KEY, DEF)) #define GET_BYTE_ARRAY(KEY) (cfg.readEntry(KEY, QByteArray())) #define GET_SIZE(KEY) (cfg.readEntry(KEY, QSize())) #define SET_VALUE(KEY, V) (cfg.writeEntry(KEY, V)) #else #define GET_STRING(KEY, DEF) (cfg.contains(KEY) ? cfg.value(KEY).toString() : QString(DEF)) #define GET_STRINGLIST(KEY, DEF) (cfg.contains(KEY) ? cfg.value(KEY).toStringList() : DEF) #define GET_BOOL(KEY, DEF) (cfg.contains(KEY) ? cfg.value(KEY).toBool() : DEF) #define GET_INT(KEY, DEF) (cfg.contains(KEY) ? cfg.value(KEY).toInt() : DEF) #define GET_BYTE_ARRAY(KEY) (cfg.value(KEY).toByteArray()) #define GET_SIZE(KEY) (cfg.contains(KEY) ? cfg.value(KEY).toSize() : QSize()) #define SET_VALUE(KEY, V) (cfg.setValue(KEY, V)) #endif QString Settings::connectionHost() { return GET_STRING("connectionHost", "localhost"); } #ifdef ENABLE_KDE_SUPPORT bool Settings::openWallet() { if(wallet) { return true; } wallet=KWallet::Wallet::openWallet(KWallet::Wallet::LocalWallet(), QApplication::activeWindow() ? QApplication::activeWindow()->winId() : 0); if(wallet) { if(!wallet->hasFolder(PACKAGE_NAME)) { wallet->createFolder(PACKAGE_NAME); } wallet->setFolder(PACKAGE_NAME); return true; } return false; } #endif QString Settings::connectionPasswd() { #ifdef ENABLE_KDE_SUPPORT if(passwd.isEmpty() && GET_BOOL("connectionPasswd", false) && openWallet()) { wallet->readPassword("mpd", passwd); } return passwd; #else return GET_STRING("connectionPasswd", ""); #endif } int Settings::connectionPort() { return GET_INT("connectionPort", 6600); } bool Settings::showPlaylist() { return GET_BOOL("showPlaylist", true); } QByteArray Settings::playQueueHeaderState() { return GET_BYTE_ARRAY("playQueueHeaderState"); } QByteArray Settings::splitterState() { return GET_BYTE_ARRAY("splitterState"); } bool Settings::splitterAutoHide() { return GET_BOOL("splitterAutoHide", false); } QSize Settings::mainWindowSize() { return GET_SIZE("mainWindowSize"); } QSize Settings::mainWindowCollapsedSize() { return GET_SIZE("mainWindowCollapsedSize"); } bool Settings::useSystemTray() { return GET_BOOL("useSystemTray", false); } bool Settings::showPopups() { return GET_BOOL("showPopups", false); } bool Settings::stopOnExit() { return GET_BOOL("stopOnExit", false); } bool Settings::smallPlaybackButtons() { return GET_BOOL("smallPlaybackButtons", false); } bool Settings::smallControlButtons() { return GET_BOOL("smallControlButtons", false); } const QString & Settings::mpdDir() { if (mpdDirSetting.isEmpty()) { mpdDirSetting=MPDParseUtils::fixPath(GET_STRING("mpdDir", "/var/lib/mpd/music/")); } return mpdDirSetting; } int Settings::libraryView() { return GET_INT("libraryView", (int)(version()>=CANTATA_MAKE_VERSION(0, 5, 0) ? ItemView::Mode_Tree : ItemView::Mode_List)); } int Settings::albumsView() { return GET_INT("albumsView", (int)ItemView::Mode_IconTop); } int Settings::folderView() { return GET_INT("folderView", (int)ItemView::Mode_Tree); } int Settings::playlistsView() { return GET_INT("playlistsView", (int)(version()>=CANTATA_MAKE_VERSION(0, 5, 0) ? ItemView::Mode_Tree : ItemView::Mode_List)); } int Settings::streamsView() { return GET_INT("streamsView", (int)(version()>=CANTATA_MAKE_VERSION(0, 5, 0) ? ItemView::Mode_Tree : ItemView::Mode_List)); } int Settings::libraryCoverSize() { return GET_INT("libraryCoverSize", (int)(MusicLibraryItemAlbum::CoverMedium)); } int Settings::albumsCoverSize() { return GET_INT("albumsCoverSize", (int)(MusicLibraryItemAlbum::CoverMedium)); } bool Settings::albumFirst() { return GET_BOOL("albumFirst", true); } int Settings::sidebar() { return GET_INT("sidebar", (int)(FancyTabWidget::Mode_LargeSidebar)); } bool Settings::libraryYear() { return GET_BOOL("libraryYear", true); } bool Settings::groupSingle() { return GET_BOOL("groupSingle", false); } QStringList Settings::lyricProviders() { QStringList def; def << "lyrics.wikia.com" << "lyricstime.com" << "lyricsreg.com" << "lyricsmania.com" << "metrolyrics.com" << "azlyrics.com" << "songlyrics.com" << "elyrics.net" << "lyricsdownload.com" << "lyrics.com" << "lyricsbay.com" << "directlyrics.com" << "loudson.gs" << "teksty.org" << "tekstowo.pl (POLISH)" << "vagalume.uol.com.br" << "vagalume.uol.com.br (PORTUGUESE)"; return GET_STRINGLIST("lyricProviders", def); } QString Settings::page() { return GET_STRING("page", QString()); } QStringList Settings::hiddenPages() { QStringList def; def << "FolderPage" << "ServerInfoPage"; return GET_STRINGLIST("hiddenPages", def); } bool Settings::mpris() { return GET_BOOL("mpris", true); } bool Settings::dockManager() { return GET_BOOL("dockManager", false); } #ifdef ENABLE_DEVICES_SUPPORT bool Settings::overwriteSongs() { return GET_BOOL("overwriteSongs", false); } bool Settings::showDeleteAction() { return GET_BOOL("showDeleteAction", false); } int Settings::devicesView() { return GET_INT("devicesView", (int)ItemView::Mode_Tree); } #endif int Settings::version() { if (-1==ver) { QStringList parts=GET_STRING("version", QLatin1String("0.0.0")).split('.'); if (3==parts.size()) { ver=CANTATA_MAKE_VERSION(parts.at(0).toInt(), parts.at(1).toInt(), parts.at(2).toInt()); } else { ver=0; SET_VALUE("version", PACKAGE_VERSION); } } return ver; } int Settings::stopFadeDuration() { int def=version()MaxFade)) { v=DefaultFade; } return v; } int Settings::httpPort() { return GET_INT("httpPort", 9001); } bool Settings::enableHttp() { return GET_BOOL("enableHttp", false); } bool Settings::alwaysUseHttp() { return GET_BOOL("alwaysUseHttp", false); } bool Settings::groupedPlayQueue() { return GET_BOOL("groupedPlayQueue", version()>=CANTATA_MAKE_VERSION(0, 5, 0)); } bool Settings::autoCollapsePlayQueue() { return GET_BOOL("autoCollapsePlayQueue", true); } bool Settings::scrollPlayQueue() { return GET_BOOL("scrollPlayQueue", true); } void Settings::saveConnectionHost(const QString &v) { SET_VALUE("connectionHost", v); } void Settings::saveConnectionPasswd(const QString &v) { #ifdef ENABLE_KDE_SUPPORT if(v!=passwd) { passwd=v; SET_VALUE("connectionPasswd", !passwd.isEmpty()); if(passwd.isEmpty()) { if(wallet) { wallet->removeEntry("mpd"); } } else if(openWallet()) { wallet->writePassword("mpd", passwd); } } #else SET_VALUE("connectionPasswd", v); #endif } void Settings::saveConnectionPort(int v) { SET_VALUE("connectionPort", v); } void Settings::saveShowPlaylist(bool v) { SET_VALUE("showPlaylist", v); } void Settings::savePlayQueueHeaderState(const QByteArray &v) { SET_VALUE("playQueueHeaderState", v); } void Settings::saveSplitterState(const QByteArray &v) { SET_VALUE("splitterState", v); } void Settings::saveSplitterAutoHide(bool v) { SET_VALUE("splitterAutoHide", v); } void Settings::saveMainWindowSize(const QSize &v) { SET_VALUE("mainWindowSize", v); } void Settings::saveMainWindowCollapsedSize(const QSize &v) { SET_VALUE("mainWindowCollapsedSize", v); } void Settings::saveUseSystemTray(bool v) { SET_VALUE("useSystemTray", v); } void Settings::saveShowPopups(bool v) { SET_VALUE("showPopups", v); } void Settings::saveStopOnExit(bool v) { SET_VALUE("stopOnExit", v); } void Settings::saveSmallPlaybackButtons(bool v) { SET_VALUE("smallPlaybackButtons", v); } void Settings::saveSmallControlButtons(bool v) { SET_VALUE("smallControlButtons", v); } void Settings::saveMpdDir(const QString &v) { mpdDirSetting=MPDParseUtils::fixPath(v); SET_VALUE("mpdDir", mpdDirSetting); } void Settings::saveLibraryView(int v) { SET_VALUE("libraryView", v); } void Settings::saveAlbumsView(int v) { SET_VALUE("albumsView", v); } void Settings::saveFolderView(int v) { SET_VALUE("folderView", v); } void Settings::savePlaylistsView(int v) { SET_VALUE("playlistsView", v); } void Settings::saveStreamsView(int v) { SET_VALUE("streamsView", v); } void Settings::saveLibraryCoverSize(int v) { SET_VALUE("libraryCoverSize", v); } void Settings::saveAlbumsCoverSize(int v) { SET_VALUE("albumsCoverSize", v); } void Settings::saveAlbumFirst(bool v) { SET_VALUE("albumFirst", v); } void Settings::saveSidebar(int v) { SET_VALUE("sidebar", v); } void Settings::saveLibraryYear(bool v) { SET_VALUE("libraryYear", v); } void Settings::saveGroupSingle(bool v) { SET_VALUE("groupSingle", v); } void Settings::saveLyricProviders(const QStringList &p) { SET_VALUE("lyricProviders", p); } void Settings::savePage(const QString &v) { SET_VALUE("page", v); } void Settings::saveHiddenPages(const QStringList &p) { SET_VALUE("hiddenPages", p); } void Settings::saveMpris(bool v) { SET_VALUE("mpris", v); } void Settings::saveDockManager(bool v) { SET_VALUE("dockManager", v); } #ifdef ENABLE_DEVICES_SUPPORT void Settings::saveOverwriteSongs(bool v) { SET_VALUE("overwriteSongs", v); } void Settings::saveShowDeleteAction(bool v) { SET_VALUE("showDeleteAction", v); } void Settings::saveDevicesView(int v) { SET_VALUE("devicesView", v); } #endif void Settings::saveStopFadeDuration(int v) { if (v<=MinFade) { v=0; } else if(v>MaxFade) { v=MaxFade; } SET_VALUE("stopFadeDuration", v); } void Settings::saveHttpPort(int v) { SET_VALUE("httpPort", v); } void Settings::saveEnableHttp(bool v) { SET_VALUE("enableHttp", v); } void Settings::saveAlwaysUseHttp(bool v) { SET_VALUE("alwaysUseHttp", v); } void Settings::saveGroupedPlayQueue(bool v) { SET_VALUE("groupedPlayQueue", v); } void Settings::saveAutoCollapsePlayQueue(bool v) { SET_VALUE("autoCollapsePlayQueue", v); } void Settings::saveScrollPlayQueue(bool v) { SET_VALUE("scrollPlayQueue", v); } void Settings::save(bool force) { if (force) { SET_VALUE("version", PACKAGE_VERSION); #ifdef ENABLE_KDE_SUPPORT KGlobal::config()->sync(); #else cfg.sync(); #endif if (timer) { timer->stop(); } } else { if (!timer) { timer=new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(actualSave())); } timer->start(30*1000); } } void Settings::actualSave() { save(true); }