File indexing completed on 2024-05-19 08:41:41
0001 /* 0002 SPDX-FileCopyrightText: 2017 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr> 0003 0004 SPDX-License-Identifier: LGPL-3.0-or-later 0005 */ 0006 0007 #include "elisaconfigurationdialog.h" 0008 0009 #include "elisa-version.h" 0010 0011 #include "elisa_settings.h" 0012 0013 0014 #include <QStandardPaths> 0015 #include <QFileInfo> 0016 #include <QTimer> 0017 0018 ElisaConfigurationDialog::ElisaConfigurationDialog(QObject* parent) 0019 : QObject(parent) 0020 { 0021 connect(Elisa::ElisaConfiguration::self(), &Elisa::ElisaConfiguration::configChanged, 0022 this, &ElisaConfigurationDialog::configChanged); 0023 connect(&mConfigFileWatcher, &QFileSystemWatcher::fileChanged, 0024 this, &ElisaConfigurationDialog::configChanged); 0025 0026 configChanged(); 0027 0028 mConfigFileWatcher.addPath(Elisa::ElisaConfiguration::self()->config()->name()); 0029 } 0030 0031 ElisaConfigurationDialog::~ElisaConfigurationDialog() 0032 = default; 0033 0034 QStringList ElisaConfigurationDialog::rootPath() const 0035 { 0036 return mRootPath; 0037 } 0038 0039 void ElisaConfigurationDialog::setRootPath(const QStringList &rootPath) 0040 { 0041 if (mRootPath == rootPath && !mRootPath.isEmpty()) { 0042 return; 0043 } 0044 0045 mRootPath.clear(); 0046 for (const auto &onePath : rootPath) { 0047 auto workPath = onePath; 0048 if (workPath.startsWith(QLatin1String("file:/"))) { 0049 auto urlPath = QUrl{workPath}; 0050 workPath = urlPath.toLocalFile(); 0051 } 0052 0053 QFileInfo pathFileInfo(workPath); 0054 auto directoryPath = pathFileInfo.canonicalFilePath(); 0055 if (!directoryPath.isEmpty()) { 0056 mRootPath.push_back(directoryPath); 0057 } 0058 } 0059 0060 if (mRootPath.isEmpty()) { 0061 auto systemMusicPaths = QStandardPaths::standardLocations(QStandardPaths::MusicLocation); 0062 for (const auto &musicPath : std::as_const(systemMusicPaths)) { 0063 mRootPath.push_back(musicPath); 0064 } 0065 } 0066 0067 Q_EMIT rootPathChanged(mRootPath); 0068 0069 setDirty(); 0070 } 0071 0072 void ElisaConfigurationDialog::save() 0073 { 0074 Elisa::ElisaConfiguration::setRootPath(mRootPath); 0075 Elisa::ElisaConfiguration::setShowNowPlayingBackground(mShowNowPlayingBackground); 0076 Elisa::ElisaConfiguration::setShowProgressOnTaskBar(mShowProgressInTaskBar); 0077 Elisa::ElisaConfiguration::setShowSystemTrayIcon(mShowSystemTrayIcon); 0078 Elisa::ElisaConfiguration::setAlwaysUseAbsolutePlaylistPaths(mAlwaysUseAbsolutePlaylistPaths); 0079 Elisa::ElisaConfiguration::setPlayAtStartup(mPlayAtStartup); 0080 Elisa::ElisaConfiguration::setScanAtStartup(mScanAtStartup); 0081 Elisa::ElisaConfiguration::setColorScheme(mColorScheme); 0082 Elisa::ElisaConfiguration::setUseFavoriteStyleRatings(mUseFavoriteStyleRatings); 0083 0084 Elisa::ElisaConfiguration::setEmbeddedView(Elisa::ElisaConfiguration::EnumEmbeddedView::NoView); 0085 switch (mEmbeddedView) 0086 { 0087 case ElisaUtils::Unknown: 0088 Elisa::ElisaConfiguration::setEmbeddedView(Elisa::ElisaConfiguration::EnumEmbeddedView::NoView); 0089 break; 0090 case ElisaUtils::Album: 0091 Elisa::ElisaConfiguration::setEmbeddedView(Elisa::ElisaConfiguration::EnumEmbeddedView::AllAlbums); 0092 break; 0093 case ElisaUtils::Artist: 0094 Elisa::ElisaConfiguration::setEmbeddedView(Elisa::ElisaConfiguration::EnumEmbeddedView::AllArtists); 0095 break; 0096 case ElisaUtils::Genre: 0097 Elisa::ElisaConfiguration::setEmbeddedView(Elisa::ElisaConfiguration::EnumEmbeddedView::AllGenres); 0098 break; 0099 case ElisaUtils::Radio: 0100 case ElisaUtils::Track: 0101 case ElisaUtils::Composer: 0102 case ElisaUtils::FileName: 0103 case ElisaUtils::Lyricist: 0104 case ElisaUtils::Container: 0105 case ElisaUtils::PlayList: 0106 break; 0107 } 0108 0109 Elisa::ElisaConfiguration::setInitialView(mInitialViewIndex); 0110 Elisa::ElisaConfiguration::setInitialFilesViewPath(mInitialFilesViewPath); 0111 0112 Elisa::ElisaConfiguration::self()->save(); 0113 0114 mIsDirty = false; 0115 Q_EMIT isDirtyChanged(); 0116 } 0117 0118 void ElisaConfigurationDialog::cancel() 0119 { 0120 if (mIsDirty) { 0121 configChanged(); 0122 0123 mIsDirty = false; 0124 Q_EMIT isDirtyChanged(); 0125 } 0126 } 0127 0128 void ElisaConfigurationDialog::setShowNowPlayingBackground(bool showNowPlayingBackground) 0129 { 0130 if (mShowNowPlayingBackground == showNowPlayingBackground) { 0131 return; 0132 } 0133 0134 mShowNowPlayingBackground = showNowPlayingBackground; 0135 Q_EMIT showNowPlayingBackgroundChanged(); 0136 0137 setDirty(); 0138 } 0139 0140 void ElisaConfigurationDialog::setShowProgressInTaskBar(bool showProgressInTaskBar) 0141 { 0142 if (mShowProgressInTaskBar == showProgressInTaskBar) { 0143 return; 0144 } 0145 0146 mShowProgressInTaskBar = showProgressInTaskBar; 0147 Q_EMIT showProgressInTaskBarChanged(); 0148 0149 setDirty(); 0150 } 0151 0152 void ElisaConfigurationDialog::setShowSystemTrayIcon(bool showSystemTrayIcon) 0153 { 0154 if (mShowSystemTrayIcon == showSystemTrayIcon) { 0155 return; 0156 } 0157 0158 mShowSystemTrayIcon = showSystemTrayIcon; 0159 Q_EMIT showSystemTrayIconChanged(); 0160 0161 setDirty(); 0162 } 0163 0164 void ElisaConfigurationDialog::setAlwaysUseAbsolutePlaylistPaths(bool alwaysUseAbsolutePlaylistPaths) 0165 { 0166 if (mAlwaysUseAbsolutePlaylistPaths == alwaysUseAbsolutePlaylistPaths) { 0167 return; 0168 } 0169 0170 mAlwaysUseAbsolutePlaylistPaths = alwaysUseAbsolutePlaylistPaths; 0171 Q_EMIT alwaysUseAbsolutePlaylistPathsChanged(); 0172 0173 setDirty(); 0174 } 0175 0176 void ElisaConfigurationDialog::setEmbeddedView(ElisaUtils::PlayListEntryType embeddedView) 0177 { 0178 if (mEmbeddedView == embeddedView) { 0179 return; 0180 } 0181 0182 mEmbeddedView = embeddedView; 0183 QTimer::singleShot(0, this, &ElisaConfigurationDialog::embeddedViewChanged); 0184 0185 setDirty(); 0186 } 0187 0188 void ElisaConfigurationDialog::setInitialViewIndex(int initialViewIndex) 0189 { 0190 if (mInitialViewIndex == initialViewIndex) { 0191 return; 0192 } 0193 0194 mInitialViewIndex = initialViewIndex; 0195 QTimer::singleShot(0, this, &ElisaConfigurationDialog::initialViewIndexChanged); 0196 0197 setDirty(); 0198 } 0199 0200 void ElisaConfigurationDialog::setInitialFilesViewPath(const QString &path) 0201 { 0202 if (mInitialFilesViewPath == path) { 0203 return; 0204 } 0205 0206 mInitialFilesViewPath = path; 0207 Q_EMIT initialFilesViewPathChanged(); 0208 0209 setDirty(); 0210 } 0211 0212 void ElisaConfigurationDialog::setPlayAtStartup(bool playAtStartup) 0213 { 0214 if (mPlayAtStartup == playAtStartup) { 0215 return; 0216 } 0217 mPlayAtStartup = playAtStartup; 0218 Q_EMIT playAtStartupChanged(); 0219 0220 setDirty(); 0221 } 0222 0223 void ElisaConfigurationDialog::setScanAtStartup(bool scanAtStartup) 0224 { 0225 if (mScanAtStartup == scanAtStartup) { 0226 return; 0227 } 0228 mScanAtStartup = scanAtStartup; 0229 Q_EMIT scanAtStartupChanged(); 0230 0231 setDirty(); 0232 } 0233 0234 void ElisaConfigurationDialog::setColorScheme(const QString &scheme) 0235 { 0236 if (mColorScheme == scheme) { 0237 return; 0238 } 0239 mColorScheme = scheme; 0240 Q_EMIT colorSchemeChanged(); 0241 0242 setDirty(); 0243 } 0244 0245 void ElisaConfigurationDialog::setUseFavoriteStyleRatings(bool useFavoriteStyleRatings) 0246 { 0247 if (mUseFavoriteStyleRatings == useFavoriteStyleRatings) { 0248 return; 0249 } 0250 mUseFavoriteStyleRatings = useFavoriteStyleRatings; 0251 Q_EMIT useFavoriteStyleRatingsChanged(); 0252 0253 setDirty(); 0254 } 0255 0256 void ElisaConfigurationDialog::removeMusicLocation(QString location) 0257 { 0258 mRootPath.removeAll(location); 0259 Q_EMIT rootPathChanged(mRootPath); 0260 } 0261 0262 void ElisaConfigurationDialog::configChanged() 0263 { 0264 mRootPath = Elisa::ElisaConfiguration::rootPath(); 0265 Q_EMIT rootPathChanged(mRootPath); 0266 0267 mShowNowPlayingBackground = Elisa::ElisaConfiguration::showNowPlayingBackground(); 0268 Q_EMIT showNowPlayingBackgroundChanged(); 0269 0270 mShowProgressInTaskBar = Elisa::ElisaConfiguration::showProgressOnTaskBar(); 0271 Q_EMIT showProgressInTaskBarChanged(); 0272 0273 mShowSystemTrayIcon = Elisa::ElisaConfiguration::showSystemTrayIcon(); 0274 Q_EMIT showSystemTrayIconChanged(); 0275 0276 mPlayAtStartup = Elisa::ElisaConfiguration::playAtStartup(); 0277 Q_EMIT playAtStartupChanged(); 0278 0279 mScanAtStartup = Elisa::ElisaConfiguration::scanAtStartup(); 0280 Q_EMIT scanAtStartupChanged(); 0281 0282 mColorScheme = Elisa::ElisaConfiguration::colorScheme(); 0283 Q_EMIT colorSchemeChanged(); 0284 0285 mUseFavoriteStyleRatings = Elisa::ElisaConfiguration::useFavoriteStyleRatings(); 0286 Q_EMIT useFavoriteStyleRatingsChanged(); 0287 0288 mAlwaysUseAbsolutePlaylistPaths = Elisa::ElisaConfiguration::alwaysUseAbsolutePlaylistPaths(); 0289 Q_EMIT alwaysUseAbsolutePlaylistPathsChanged(); 0290 0291 switch (Elisa::ElisaConfiguration::embeddedView()) 0292 { 0293 case Elisa::ElisaConfiguration::EnumEmbeddedView::NoView: 0294 mEmbeddedView = ElisaUtils::Unknown; 0295 break; 0296 case Elisa::ElisaConfiguration::EnumEmbeddedView::AllAlbums: 0297 mEmbeddedView = ElisaUtils::Album; 0298 break; 0299 case Elisa::ElisaConfiguration::EnumEmbeddedView::AllArtists: 0300 mEmbeddedView = ElisaUtils::Artist; 0301 break; 0302 case Elisa::ElisaConfiguration::EnumEmbeddedView::AllGenres: 0303 mEmbeddedView = ElisaUtils::Genre; 0304 break; 0305 } 0306 Q_EMIT embeddedViewChanged(); 0307 0308 mInitialViewIndex = Elisa::ElisaConfiguration::initialView(); 0309 Q_EMIT initialViewIndexChanged(); 0310 0311 mInitialFilesViewPath = Elisa::ElisaConfiguration::initialFilesViewPath(); 0312 Q_EMIT initialFilesViewPathChanged(); 0313 } 0314 0315 void ElisaConfigurationDialog::setDirty() 0316 { 0317 mIsDirty = true; 0318 Q_EMIT isDirtyChanged(); 0319 } 0320 0321 0322 #include "moc_elisaconfigurationdialog.cpp"