File indexing completed on 2024-05-12 04:46:01

0001 #include "folderconfig.h"
0002 #include <QSettings>
0003 
0004 #include <QDebug>
0005 
0006 FolderConfig::FolderConfig(QObject *parent) : QObject(parent)
0007   ,m_settings(nullptr)
0008 {      
0009 
0010 }
0011 
0012 FolderConfig::~FolderConfig()
0013 {
0014     if(m_settings)
0015     {
0016         m_settings->deleteLater();
0017     }
0018 }
0019 
0020 void FolderConfig::setSortKey(const FMList::SORTBY &value)
0021 {
0022     if(m_sortKey == value)
0023     {
0024         return;
0025     }
0026 
0027     m_sortKey = value;
0028     Q_EMIT sortKeyChanged();
0029 
0030     if(m_enabled)
0031     {
0032         setDirConf("SortBy", this->m_sortKey);
0033     }
0034 }
0035 
0036 FMList::SORTBY FolderConfig::sortKey() const
0037 {
0038     return m_sortKey;
0039 }
0040 
0041 void FolderConfig::setTerminalVisible(const bool &value)
0042 {
0043     if(m_terminalVisible == value)
0044     {
0045         return;
0046     }
0047 
0048     m_terminalVisible = value;
0049     Q_EMIT terminalVisibleChanged();
0050 
0051     if(m_enabled)
0052     {
0053         setDirConf("ShowTerminal", this->m_terminalVisible);
0054     }
0055 }
0056 
0057 bool FolderConfig::terminalVisible() const
0058 {
0059     return m_terminalVisible;
0060 }
0061 
0062 QUrl FolderConfig::getPath() const
0063 {
0064     return m_path;
0065 }
0066 
0067 void FolderConfig::setPath(QUrl path)
0068 {
0069     if (m_path == path)
0070         return;
0071 
0072     m_path = path;
0073     Q_EMIT pathChanged(m_path);
0074 }
0075 
0076 FMList::VIEW_TYPE FolderConfig::viewType() const
0077 {
0078     return m_viewType;
0079 }
0080 
0081 FMList::SORTBY FolderConfig::fallbackSortKey() const
0082 {
0083     return m_fallbackSortKey;
0084 }
0085 
0086 FMList::VIEW_TYPE FolderConfig::fallbackViewType() const
0087 {
0088     return m_fallbackViewType;
0089 }
0090 
0091 void FolderConfig::setViewType(FMList::VIEW_TYPE viewType)
0092 {
0093     if (m_viewType == viewType)
0094         return;
0095 
0096     m_viewType = viewType;
0097     Q_EMIT viewTypeChanged(m_viewType);
0098 
0099     if(m_enabled)
0100     {
0101         setDirConf( "ViewType", this->m_viewType);
0102     }
0103 }
0104 
0105 void FolderConfig::setFallbackSortKey(FMList::SORTBY fallbackSortKey)
0106 {
0107     if (m_fallbackSortKey == fallbackSortKey)
0108         return;
0109 
0110     m_fallbackSortKey = fallbackSortKey;
0111     Q_EMIT fallbackSortKeyChanged();
0112 }
0113 
0114 void FolderConfig::setFallbackViewType(FMList::VIEW_TYPE fallbackViewType)
0115 {
0116     if (m_fallbackViewType == fallbackViewType)
0117         return;
0118 
0119     m_fallbackViewType = fallbackViewType;
0120     Q_EMIT fallbackViewTypeChanged();
0121 }
0122 
0123 void FolderConfig::setEnabled(bool enabled)
0124 {
0125     if (m_enabled == enabled)
0126         return;
0127 
0128     m_enabled = enabled;
0129     Q_EMIT enabledChanged();
0130 }
0131 
0132 void FolderConfig::setDirConf(const QString &key, const QVariant &value)
0133 {
0134     if(!m_settings)
0135         return;
0136 
0137     if (!m_path.isValid() || !m_path.isLocalFile() || !FMH::fileExists(m_path))
0138     {
0139         qWarning() << "URL recived is not a local file" << m_path;
0140         return;
0141     }
0142 
0143     m_settings->beginGroup("Index");
0144     m_settings->setValue(key, value);
0145     m_settings->endGroup();
0146     m_settings->sync();
0147 }
0148 
0149 void FolderConfig::setValues()
0150 {
0151     if(!m_enabled)
0152         return;
0153 
0154     if (!m_path.isValid() || !m_path.isLocalFile() || !FMH::fileExists(m_path))
0155     {
0156         qWarning() << "URL recived is not a local file" << m_path;
0157         return;
0158     }
0159 
0160     bool showterminal = false;
0161     uint sortby = m_fallbackSortKey;
0162     uint viewType = m_fallbackViewType;
0163 
0164     auto configUrl = QUrl(m_path.toString()+"/.directory");
0165      m_settings = new QSettings(configUrl.toLocalFile(), QSettings::Format::NativeFormat);
0166 
0167     if (FMH::fileExists(configUrl) && configUrl.isLocalFile())
0168     {
0169         m_settings->beginGroup("Index");
0170 
0171         showterminal = m_settings->value("ShowTerminal", false).toBool();
0172         sortby= m_settings->value("SortBy", m_fallbackSortKey).toUInt();
0173         viewType = m_settings->value("ViewType", m_fallbackViewType).toUInt();
0174         m_settings->endGroup();
0175     }
0176 
0177     this->m_terminalVisible = showterminal;
0178     this->m_sortKey = static_cast<FMList::SORTBY>(sortby);
0179     this->m_viewType = static_cast<FMList::VIEW_TYPE>(viewType);
0180 
0181     Q_EMIT terminalVisibleChanged();
0182     Q_EMIT sortKeyChanged();
0183     Q_EMIT viewTypeChanged(m_viewType);
0184 }
0185 
0186 void FolderConfig::resetToFallbackValues()
0187 {
0188     this->m_terminalVisible = false;
0189     this->m_sortKey = m_fallbackSortKey;
0190     this->m_viewType = m_fallbackViewType;
0191 
0192     Q_EMIT terminalVisibleChanged();
0193     Q_EMIT sortKeyChanged();
0194     Q_EMIT viewTypeChanged(m_viewType);
0195 }
0196 
0197 void FolderConfig::classBegin()
0198 {
0199 }
0200 
0201 void FolderConfig::componentComplete()
0202 {
0203     m_sortKey = m_fallbackSortKey;
0204     m_viewType = m_fallbackViewType;
0205 
0206     connect(this, &FolderConfig::pathChanged, [this](QUrl)
0207     {
0208         setValues();
0209     });
0210 
0211     connect(this, &FolderConfig::fallbackViewTypeChanged, [this]()
0212     {
0213         if(!m_enabled)
0214         {
0215             this->m_viewType = m_fallbackViewType;
0216             Q_EMIT viewTypeChanged(m_viewType);
0217         }
0218     });
0219 
0220     connect(this, &FolderConfig::fallbackSortKeyChanged, [this]()
0221     {
0222         if(!m_enabled)
0223         {
0224             this->m_sortKey = m_fallbackSortKey;
0225             Q_EMIT sortKeyChanged();
0226         }
0227     });
0228 
0229     connect(this, &FolderConfig::enabledChanged, [this]()
0230     {
0231         if(!m_enabled)
0232         {
0233             resetToFallbackValues();
0234         }else
0235         {
0236             setValues();
0237         }
0238     });
0239 
0240     setValues();
0241 }
0242 
0243 bool FolderConfig::enabled() const
0244 {
0245     return m_enabled;
0246 }