depot/third_party/nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.fix-mime-cache-paths.patch

324 lines
12 KiB
Diff
Raw Normal View History

From 29f4ad88e2294ae70b10180e7361d135c4e5c896 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Romildo=20Malaquias?= <malaquias@gmail.com>
Date: Mon, 13 May 2019 00:09:42 -0300
Subject: [PATCH 2/2] Use XDG to look for mime cache
---
.../shutil/mimesappsmanager.cpp | 230 ++++++++++--------
.../shutil/mimesappsmanager.h | 6 +-
2 files changed, 125 insertions(+), 111 deletions(-)
diff --git a/dde-file-manager-lib/shutil/mimesappsmanager.cpp b/dde-file-manager-lib/shutil/mimesappsmanager.cpp
index c9e53630..7a21df51 100644
--- a/dde-file-manager-lib/shutil/mimesappsmanager.cpp
+++ b/dde-file-manager-lib/shutil/mimesappsmanager.cpp
@@ -552,14 +552,20 @@ QString MimesAppsManager::getMimeAppsCacheFile()
return QString("%1/%2").arg(DFMStandardPaths::location(DFMStandardPaths::CachePath), "MimeApps.json");
}
-QString MimesAppsManager::getMimeInfoCacheFilePath()
+QStringList MimesAppsManager::getMimeInfoCacheFilePath()
{
- return "/usr/share/applications/mimeinfo.cache";
+ QStringList paths;
+ for (const QString dir : getMimeInfoCacheFileRootPath() )
+ paths.append(dir + QDir::separator() + "mimeinfo.cache");
+ qDebug() << "getMimeInfoCacheFilePath: " << paths;
+ return paths;
}
-QString MimesAppsManager::getMimeInfoCacheFileRootPath()
+QStringList MimesAppsManager::getMimeInfoCacheFileRootPath()
{
- return "/usr/share/applications";
+ QStringList paths = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
+ qDebug() << "getMimeInfoCacheFileRootPath: " << paths;
+ return paths;
}
QString MimesAppsManager::getDesktopFilesCacheFile()
@@ -574,23 +580,27 @@ QString MimesAppsManager::getDesktopIconsCacheFile()
QStringList MimesAppsManager::getDesktopFiles()
{
- QStringList desktopFiles;
+ QStringList desktopFiles;
- foreach (QString desktopFolder, getApplicationsFolders()) {
- QDirIterator it(desktopFolder, QStringList("*.desktop"),
- QDir::Files | QDir::NoDotAndDotDot,
- QDirIterator::Subdirectories);
- while (it.hasNext()) {
- it.next();
- desktopFiles.append(it.filePath());
- }
- }
- return desktopFiles;
+ foreach (QString desktopFolder, getApplicationsFolders()) {
+ QDirIterator it(desktopFolder, QStringList("*.desktop"),
+ QDir::Files | QDir::NoDotAndDotDot,
+ QDirIterator::Subdirectories);
+ while (it.hasNext()) {
+ it.next();
+ desktopFiles.append(it.filePath());
+ }
+ }
+ return desktopFiles;
}
-QString MimesAppsManager::getDDEMimeTypeFile()
+QStringList MimesAppsManager::getDDEMimeTypeFile()
{
- return QString("%1/%2/%3").arg(getMimeInfoCacheFileRootPath(), "deepin", "dde-mimetype.list");
+ QStringList paths;
+ for (const QString path : getMimeInfoCacheFileRootPath())
+ paths.append(QString("%1/%2/%3").arg(path, "deepin", "dde-mimetype.list"));
+ qDebug() << "getDDEMimeTypeFile: " << paths;
+ return paths;
}
QMap<QString, DesktopFile> MimesAppsManager::getDesktopObjs()
@@ -663,124 +673,128 @@ void MimesAppsManager::initMimeTypeApps()
MimeApps.insert(key, orderApps);
}
- //check mime apps from cache
- QFile f(getMimeInfoCacheFilePath());
- if(!f.open(QIODevice::ReadOnly)){
- qDebug () << "failed to read mime info cache file:" << f.errorString();
- return;
- }
-
QStringList audioDesktopList;
QStringList imageDeksopList;
QStringList textDekstopList;
QStringList videoDesktopList;
- while (!f.atEnd()) {
- QString data = f.readLine();
- QString _desktops = data.split("=").last();
- QString mimeType = data.split("=").first();
- QStringList desktops = _desktops.split(";");
-
- foreach (const QString desktop, desktops) {
- if(desktop.isEmpty() || audioDesktopList.contains(desktop))
- continue;
+ //check mime apps from cache
+ for (const QString path : getMimeInfoCacheFilePath()) {
+ QFile f(path);
+ if(!f.open(QIODevice::ReadOnly)){
+ qDebug () << "failed to read mime info cache file:" << f.errorString();
+ return;
+ }
- if(mimeType.startsWith("audio")){
- if(!audioDesktopList.contains(desktop))
- audioDesktopList << desktop;
- } else if(mimeType.startsWith("image")){
- if(!imageDeksopList.contains(desktop))
- imageDeksopList << desktop;
- } else if(mimeType.startsWith("text")){
- if(!textDekstopList.contains(desktop))
- textDekstopList << desktop;
- } else if(mimeType.startsWith("video")){
- if(!videoDesktopList.contains(desktop))
- videoDesktopList << desktop;
+ while (!f.atEnd()) {
+ QString data = f.readLine();
+ QString _desktops = data.split("=").last();
+ QString mimeType = data.split("=").first();
+ QStringList desktops = _desktops.split(";");
+
+ foreach (const QString desktop, desktops) {
+ if(desktop.isEmpty() || audioDesktopList.contains(desktop))
+ continue;
+
+ if(mimeType.startsWith("audio")){
+ if(!audioDesktopList.contains(desktop))
+ audioDesktopList << desktop;
+ } else if(mimeType.startsWith("image")){
+ if(!imageDeksopList.contains(desktop))
+ imageDeksopList << desktop;
+ } else if(mimeType.startsWith("text")){
+ if(!textDekstopList.contains(desktop))
+ textDekstopList << desktop;
+ } else if(mimeType.startsWith("video")){
+ if(!videoDesktopList.contains(desktop))
+ videoDesktopList << desktop;
+ }
}
}
+ f.close();
}
- f.close();
- const QString mimeInfoCacheRootPath = getMimeInfoCacheFileRootPath();
- foreach (QString desktop, audioDesktopList) {
- const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
- if(!QFile::exists(path))
- continue;
- DesktopFile df(path);
- AudioMimeApps.insert(path, df);
- }
+ for (const QString mimeInfoCacheRootPath : getMimeInfoCacheFileRootPath()) {
+ foreach (QString desktop, audioDesktopList) {
+ const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
+ if(!QFile::exists(path))
+ continue;
+ DesktopFile df(path);
+ AudioMimeApps.insert(path, df);
+ }
- foreach (QString desktop, imageDeksopList) {
- const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
- if(!QFile::exists(path))
- continue;
- DesktopFile df(path);
- ImageMimeApps.insert(path, df);
- }
+ foreach (QString desktop, imageDeksopList) {
+ const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
+ if(!QFile::exists(path))
+ continue;
+ DesktopFile df(path);
+ ImageMimeApps.insert(path, df);
+ }
- foreach (QString desktop, textDekstopList) {
- const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
- if(!QFile::exists(path))
- continue;
- DesktopFile df(path);
- TextMimeApps.insert(path, df);
- }
+ foreach (QString desktop, textDekstopList) {
+ const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
+ if(!QFile::exists(path))
+ continue;
+ DesktopFile df(path);
+ TextMimeApps.insert(path, df);
+ }
- foreach (QString desktop, videoDesktopList) {
- const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
- if(!QFile::exists(path))
- continue;
- DesktopFile df(path);
- VideoMimeApps.insert(path, df);
+ foreach (QString desktop, videoDesktopList) {
+ const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
+ if(!QFile::exists(path))
+ continue;
+ DesktopFile df(path);
+ VideoMimeApps.insert(path, df);
+ }
}
-
return;
}
void MimesAppsManager::loadDDEMimeTypes()
{
- QSettings settings(getDDEMimeTypeFile(), QSettings::IniFormat);
- qDebug() << settings.childGroups();
+ for (const QString path : getDDEMimeTypeFile()) {
+ QSettings settings(path, QSettings::IniFormat);
+ qDebug() << settings.childGroups();
- QFile file(getDDEMimeTypeFile());
- if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
- return;
- }
+ QFile file(path);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ continue;
+ }
+
+ // Read propeties
+ QTextStream in(&file);
+ QString desktopKey;
+ while (!in.atEnd()) {
- // Read propeties
- QTextStream in(&file);
- QString desktopKey;
- while (!in.atEnd()) {
+ // Read new line
+ QString line = in.readLine();
- // Read new line
- QString line = in.readLine();
+ // Skip empty line or line with invalid format
+ if (line.trimmed().isEmpty()) {
+ continue;
+ }
- // Skip empty line or line with invalid format
- if (line.trimmed().isEmpty()) {
- continue;
- }
+ // Read group
+ // NOTE: symbols '[' and ']' can be found not only in group names, but
+ // only group can start with '['
- // Read group
- // NOTE: symbols '[' and ']' can be found not only in group names, but
- // only group can start with '['
+ if (line.trimmed().startsWith("[") && line.trimmed().endsWith("]")) {
+ QString tmp = line.trimmed().replace("[", "").replace("]", "");
+ desktopKey = tmp;
+ continue;
+ }
- if (line.trimmed().startsWith("[") && line.trimmed().endsWith("]")) {
- QString tmp = line.trimmed().replace("[", "").replace("]", "");
- desktopKey = tmp;
- continue;
- }
-
- // If we are in correct group and line contains assignment then read data
- int first_equal = line.indexOf('=');
- if (!desktopKey.isEmpty() && first_equal >= 0) {
- QString value = line.mid(first_equal + 1);
- QStringList mimetypes = value.split(";");
- DDE_MimeTypes.insert(desktopKey, mimetypes);
- desktopKey.clear();
+ // If we are in correct group and line contains assignment then read data
+ int first_equal = line.indexOf('=');
+ if (!desktopKey.isEmpty() && first_equal >= 0) {
+ QString value = line.mid(first_equal + 1);
+ QStringList mimetypes = value.split(";");
+ DDE_MimeTypes.insert(desktopKey, mimetypes);
+ desktopKey.clear();
+ }
}
+ file.close();
}
- file.close();
}
bool MimesAppsManager::lessByDateTime(const QFileInfo &f1, const QFileInfo &f2)
diff --git a/dde-file-manager-lib/shutil/mimesappsmanager.h b/dde-file-manager-lib/shutil/mimesappsmanager.h
index 223c80aa..00a61302 100644
--- a/dde-file-manager-lib/shutil/mimesappsmanager.h
+++ b/dde-file-manager-lib/shutil/mimesappsmanager.h
@@ -101,12 +101,12 @@ public:
static QStringList getApplicationsFolders();
static QString getMimeAppsCacheFile();
- static QString getMimeInfoCacheFilePath();
- static QString getMimeInfoCacheFileRootPath();
+ static QStringList getMimeInfoCacheFilePath();
+ static QStringList getMimeInfoCacheFileRootPath();
static QString getDesktopFilesCacheFile();
static QString getDesktopIconsCacheFile();
static QStringList getDesktopFiles();
- static QString getDDEMimeTypeFile();
+ static QStringList getDDEMimeTypeFile();
static QMap<QString, DesktopFile> getDesktopObjs();
static void initMimeTypeApps();
static void loadDDEMimeTypes();
--
2.21.0