+ const QString settingsFile = folderPath + QDir::separator() + ViewPropertiesFileName;
+
+ KFileMetaData::UserMetaData metadata(folderPath);
+ if (!metadata.isSupported()) {
+ return new ViewPropertySettings(KSharedConfig::openConfig(settingsFile, KConfig::SimpleConfig));
+ }
+
+ 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());
+
+ 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();
+ for (const auto &group : groupList) {
+ if (group != QStringLiteral("Dolphin") && group != QStringLiteral("Settings")) {
+ config.deleteGroup(group);
+ }
+ }
+ return new ViewPropertySettings(KSharedConfig::openConfig(tempFile->fileName(), KConfig::SimpleConfig));
+
+ } else if (!config.groupList().isEmpty()) {
+ // clear temp file content
+ QFile::remove(tempFile->fileName());
+ }
+ }
+
+ // load from metadata
+ const QString viewPropertiesString = metadata.attribute(QStringLiteral("kde.fm.viewproperties#1"));
+ if (viewPropertiesString.isEmpty()) {
+ return nullptr;
+ }
+ // 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
+{
+ auto props = loadProperties(destinationDir(QStringLiteral("global")));
+ if (props == nullptr) {
+ qCWarning(DolphinDebug) << "Could not load default global viewproperties";
+ 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;
+}
+
+ViewProperties::ViewProperties(const QUrl &url)
+ : m_changedProps(false)
+ , m_autoSave(true)
+ , m_node(nullptr)
+{
+ GeneralSettings *settings = GeneralSettings::self();
+ const bool useGlobalViewProps = settings->globalViewProps() || url.isEmpty();
+ bool useSearchView = false;
+ bool useTrashView = false;
+ bool useRecentDocumentsView = false;
+ bool useDownloadsView = false;