]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/viewproperties.cpp
Merge remote-tracking branch 'fork/work/zakharafoniam/useful-groups'
[dolphin.git] / src / views / viewproperties.cpp
index 0536e028dae764cb4fb54d81d56941046d5d510a..9c03cf598087b203d3882dbc3fea305b301c365c 100644 (file)
@@ -42,19 +42,18 @@ ViewPropertySettings *ViewProperties::loadProperties(const QString &folderPath)
         return new ViewPropertySettings(KSharedConfig::openConfig(settingsFile, KConfig::SimpleConfig));
     }
 
-    QTemporaryFile tempFile;
-    tempFile.setAutoRemove(false);
-    if (!tempFile.open()) {
+    std::unique_ptr<QTemporaryFile> tempFile(new QTemporaryFile());
+    tempFile->setAutoRemove(false);
+    if (!tempFile->open()) {
         qCWarning(DolphinDebug) << "Could not open temp file";
         return nullptr;
     }
-
     if (QFile::exists(settingsFile)) {
         // copy settings to tempfile to load them separately
-        QFile::remove(tempFile.fileName());
-        QFile::copy(settingsFile, tempFile.fileName());
+        QFile::remove(tempFile->fileName());
+        QFile::copy(settingsFile, tempFile->fileName());
 
-        auto config = KConfig(tempFile.fileName(), KConfig::SimpleConfig);
+        auto config = KConfig(tempFile->fileName(), KConfig::SimpleConfig);
         // ignore settings that are outside of dolphin scope
         if (config.hasGroup("Dolphin") || config.hasGroup("Settings")) {
             const auto groupList = config.groupList();
@@ -63,25 +62,25 @@ ViewPropertySettings *ViewProperties::loadProperties(const QString &folderPath)
                     config.deleteGroup(group);
                 }
             }
-            return new ViewPropertySettings(KSharedConfig::openConfig(tempFile.fileName(), KConfig::SimpleConfig));
+            return new ViewPropertySettings(KSharedConfig::openConfig(tempFile->fileName(), KConfig::SimpleConfig));
 
         } else if (!config.groupList().isEmpty()) {
             // clear temp file content
-            QFile::remove(tempFile.fileName());
+            QFile::remove(tempFile->fileName());
         }
     }
 
     // load from metadata
     const QString viewPropertiesString = metadata.attribute(QStringLiteral("kde.fm.viewproperties#1"));
-    if (!viewPropertiesString.isEmpty()) {
-        // load view properties from xattr to temp file then loads into ViewPropertySettings
-        // clear the temp file
-        QFile outputFile(tempFile.fileName());
-        outputFile.open(QIODevice::WriteOnly);
-        outputFile.write(viewPropertiesString.toUtf8());
-        outputFile.close();
+    if (viewPropertiesString.isEmpty()) {
+        return nullptr;
     }
-    return new ViewPropertySettings(KSharedConfig::openConfig(tempFile.fileName(), KConfig::SimpleConfig));
+    // load view properties from xattr to temp file then loads into ViewPropertySettings
+    QFile outputFile(tempFile->fileName());
+    outputFile.open(QIODevice::WriteOnly);
+    outputFile.write(viewPropertiesString.toUtf8());
+    outputFile.close();
+    return new ViewPropertySettings(KSharedConfig::openConfig(tempFile->fileName(), KConfig::SimpleConfig));
 }
 
 ViewPropertySettings *ViewProperties::defaultProperties() const
@@ -89,7 +88,14 @@ ViewPropertySettings *ViewProperties::defaultProperties() const
     auto props = loadProperties(destinationDir(QStringLiteral("global")));
     if (props == nullptr) {
         qCWarning(DolphinDebug) << "Could not load default global viewproperties";
-        props = new ViewPropertySettings;
+        QTemporaryFile tempFile;
+        tempFile.setAutoRemove(false);
+        if (!tempFile.open()) {
+            qCWarning(DolphinDebug) << "Could not open temp file";
+            props = new ViewPropertySettings;
+        } else {
+            props = new ViewPropertySettings(KSharedConfig::openConfig(tempFile.fileName(), KConfig::SimpleConfig));
+        }
     }
 
     return props;
@@ -324,6 +330,32 @@ Qt::SortOrder ViewProperties::sortOrder() const
     return static_cast<Qt::SortOrder>(m_node->sortOrder());
 }
 
+void ViewProperties::setGroupRole(const QByteArray &role)
+{
+    if (m_node->groupRole() != role) {
+        m_node->setGroupRole(role);
+        update();
+    }
+}
+
+QByteArray ViewProperties::groupRole() const
+{
+    return m_node->groupRole().toLatin1();
+}
+
+void ViewProperties::setGroupOrder(Qt::SortOrder groupOrder)
+{
+    if (m_node->groupOrder() != groupOrder) {
+        m_node->setGroupOrder(groupOrder);
+        update();
+    }
+}
+
+Qt::SortOrder ViewProperties::groupOrder() const
+{
+    return static_cast<Qt::SortOrder>(m_node->groupOrder());
+}
+
 void ViewProperties::setSortFoldersFirst(bool foldersFirst)
 {
     if (m_node->sortFoldersFirst() != foldersFirst) {
@@ -350,6 +382,19 @@ bool ViewProperties::sortHiddenLast() const
     return m_node->sortHiddenLast();
 }
 
+void ViewProperties::setDynamicViewPassed(bool dynamicViewPassed)
+{
+    if (m_node->dynamicViewPassed() != dynamicViewPassed) {
+        m_node->setDynamicViewPassed(dynamicViewPassed);
+        update();
+    }
+}
+
+bool ViewProperties::dynamicViewPassed() const
+{
+    return m_node->dynamicViewPassed();
+}
+
 void ViewProperties::setVisibleRoles(const QList<QByteArray> &roles)
 {
     if (roles == visibleRoles()) {
@@ -455,6 +500,8 @@ void ViewProperties::setDirProperties(const ViewProperties &props)
     setGroupedSorting(props.groupedSorting());
     setSortRole(props.sortRole());
     setSortOrder(props.sortOrder());
+    setGroupRole(props.groupRole());
+    setGroupOrder(props.groupOrder());
     setSortFoldersFirst(props.sortFoldersFirst());
     setSortHiddenLast(props.sortHiddenLast());
     setVisibleRoles(props.visibleRoles());
@@ -512,9 +559,27 @@ void ViewProperties::save()
         const auto metaDataKey = QStringLiteral("kde.fm.viewproperties#1");
 
         const auto items = m_node->items();
-        const bool allDefault = std::all_of(items.cbegin(), items.cend(), [this](const KConfigSkeletonItem *item) {
-            return item->name() == "Timestamp" || (item->name() == "Version" && m_node->version() == CurrentViewPropertiesVersion) || item->isDefault();
-        });
+        const auto defaultConfig = defaultProperties();
+        bool allDefault = true;
+        for (const auto item : items) {
+            if (item->name() == "Timestamp") {
+                continue;
+            }
+            if (item->name() == "Version") {
+                if (m_node->version() != CurrentViewPropertiesVersion) {
+                    allDefault = false;
+                    break;
+                } else {
+                    continue;
+                }
+            }
+            auto defaultItem = defaultConfig->findItem(item->name());
+            if (!defaultItem || defaultItem->property() != item->property()) {
+                allDefault = false;
+                break;
+            }
+        }
+
         if (allDefault) {
             if (metaData.hasAttribute(metaDataKey)) {
                 qCDebug(DolphinDebug) << "clearing extended attributes for " << m_filePath;