File indexing completed on 2024-05-05 04:50:32

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"