TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
ttkfileassociation.cpp
Go to the documentation of this file.
1 #include "ttkfileassociation.h"
2 #include "ttkqtobject.h"
3 
4 #ifdef Q_OS_WIN
5 #include <QSettings>
6 
7 void TTKFileAssociation::append(const QString &suffix)
8 {
9  appendClass(suffix);
10  appendSoftware(suffix);
11  appendFileExts(suffix);
12 }
13 
14 void TTKFileAssociation::remove(const QString &suffix)
15 {
16  removeClass(suffix);
17  removeSoftware(suffix);
18  removeFileExts(suffix);
19 }
20 
21 bool TTKFileAssociation::exist(const QString &suffix) const
22 {
23  const QString &key = "." + suffix;
24  const QString &mainName = TTK_APP_NAME + key;
25 
26  QSettings reg1Setting("HKEY_CURRENT_USER\\Software\\Classes\\" + key, QSettings::NativeFormat);
27  return reg1Setting.value("Default").toString() == mainName;
28 }
29 
30 QStringList TTKFileAssociation::keys() const
31 {
32  QStringList keys;
33  QSettings reg1Setting("HKEY_CURRENT_USER\\Software\\Classes\\", QSettings::NativeFormat);
34 
35  for(const QString &key : reg1Setting.childGroups())
36  {
37  if(!key.isEmpty() && key[0] == '.')
38  {
39  keys.push_back(key.toLower().remove(0, 1));
40  }
41  }
42  return keys;
43 }
44 
45 void TTKFileAssociation::appendClass(const QString &suffix)
46 {
47  const QString &key = "." + suffix;
48  const QString &mainName = TTK_APP_NAME + key;
49  const QString &mainString = "HKEY_CURRENT_USER\\Software\\Classes\\" + key;
50 
51  QSettings reg1Setting(mainString, QSettings::NativeFormat);
52  const QString &reg1Value = reg1Setting.value("Default").toString();
53  if(reg1Value != mainName)
54  {
55  if(!reg1Value.isEmpty())
56  {
57  // do backup
58  reg1Setting.setValue("TTKBackup", reg1Value);
59  }
60  reg1Setting.setValue("Default", mainName);
61  }
62 
63  QSettings reg2Setting(mainString + "\\OpenWithProgids", QSettings::NativeFormat);
64  reg2Setting.setValue(mainName, QString());
65 }
66 
67 void TTKFileAssociation::appendSoftware(const QString &suffix)
68 {
69  const QString &key = "." + suffix;
70  const QString &mainName = TTK_APP_NAME + key;
71  const QString &mainString = "HKEY_CURRENT_USER\\Software\\Classes\\" + mainName;
72 
73  QString appPath = TTK_SERVICE_FULL;
74  appPath.replace(TTK_SEPARATOR, TTK_RSEPARATOR);
75 
76  QSettings reg1Setting(mainString, QSettings::NativeFormat);
77  reg1Setting.setValue("Default", suffix.toUpper() + QObject::tr("File"));
78 
79  QSettings reg2Setting(mainString + "\\DefaultIcon", QSettings::NativeFormat);
80  reg2Setting.setValue("Default", QString("%1,%2").arg(appPath).arg(1));
81 
82  QSettings reg3Setting(mainString + "\\Shell\\Open", QSettings::NativeFormat);
83  reg3Setting.setValue("Default", QObject::tr("Use Module Play"));
84 
85  QSettings reg4Setting(mainString + "\\Shell\\Open\\Command", QSettings::NativeFormat);
86  reg4Setting.setValue("Default", QString("\"%1\" -Open ").arg(appPath) + QString("\"%1\""));
87 
88  QSettings reg5Setting(mainString + "\\Shell\\PlayList", QSettings::NativeFormat);
89  reg5Setting.setValue("Default", QObject::tr("Add To Module Playlist"));
90 
91  QSettings reg6Setting(mainString + "\\Shell\\PlayList\\Command", QSettings::NativeFormat);
92  reg6Setting.setValue("Default", QString("\"%1\" -List ").arg(appPath) + QString("\"%1\""));
93 }
94 
95 void TTKFileAssociation::appendFileExts(const QString &suffix)
96 {
97  const QString &key = "." + suffix;
98  const QString &mainName = TTK_APP_NAME + key;
99  const QString &mainString = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\" + key;
100 
101  QSettings reg1Setting(mainString + "\\OpenWithProgids", QSettings::NativeFormat);
102  reg1Setting.setValue(mainName, QString());
103 
104  QSettings reg2Setting(mainString + "\\UserChoice", QSettings::NativeFormat);
105  const QString &reg2Value = reg2Setting.value("Progid").toString();
106  if(reg2Value != mainName)
107  {
108  if(!reg2Value.isEmpty())
109  {
110  // do backup
111  reg2Setting.setValue("TTKBackup", reg2Value);
112  }
113  reg2Setting.setValue("Progid", mainName);
114  }
115 }
116 
117 void TTKFileAssociation::removeClass(const QString &suffix)
118 {
119  const QString &key = "." + suffix;
120  const QString &mainName = TTK_APP_NAME + key;
121  const QString &mainString = "HKEY_CURRENT_USER\\Software\\Classes\\" + key;
122 
123  QSettings reg1Setting(mainString, QSettings::NativeFormat);
124  const QString &reg1Value = reg1Setting.value("Default").toString();
125  if(reg1Value == mainName)
126  {
127  reg1Setting.setValue("Default", reg1Setting.value("TTKBackup", QString()));
128  reg1Setting.remove("TTKBackup");
129  }
130 
131  reg1Setting.remove("OpenWithProgids");
132 }
133 
134 void TTKFileAssociation::removeSoftware(const QString &suffix)
135 {
136  const QString &key = "." + suffix;
137  const QString &mainName = TTK_APP_NAME + key;
138  const QString &mainString = "HKEY_CURRENT_USER\\Software\\Classes\\";
139 
140  QSettings reg1Setting(mainString, QSettings::NativeFormat);
141  reg1Setting.remove(mainName);
142 }
143 
144 void TTKFileAssociation::removeFileExts(const QString &suffix)
145 {
146  const QString &key = "." + suffix;
147  const QString &mainName = TTK_APP_NAME + key;
148  const QString &mainString = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\" + key;
149 
150  QSettings reg1Setting(mainString, QSettings::NativeFormat);
151  reg1Setting.remove("OpenWithProgids");
152 
153  bool empty = true;
154  QSettings reg2Setting(mainString + "\\UserChoice", QSettings::NativeFormat);
155  const QString &reg2Value = reg2Setting.value("Progid").toString();
156  if(reg2Value == mainName)
157  {
158  const QString &backup = reg2Setting.value("TTKBackup").toString();
159  if(!backup.isEmpty())
160  {
161  empty = false;
162  reg2Setting.setValue("Progid", backup);
163  }
164 
165  reg2Setting.remove("TTKBackup");
166  }
167 
168  if(empty)
169  {
170  reg1Setting.remove("UserChoice");
171  }
172 }
173 #endif
static constexpr wchar_t key[]
#define TTK_APP_NAME
Definition: ttkobject.h:25
#define TTK_RSEPARATOR
Definition: ttkglobal.h:196
#define TTK_SERVICE_FULL
Definition: ttkqtobject.h:25
TTK_MODULE_EXPORT QString suffix(const QString &name)
#define TTK_SEPARATOR
Definition: ttkglobal.h:195