TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicstringutils.cpp
Go to the documentation of this file.
1 #include "musicstringutils.h"
2 #include "musicsettingmanager.h"
3 
4 #include <QTextDocument>
5 
6 static QString makeFilePrefix(MusicSettingManager::Config type, const QString &path)
7 {
8  QString dir = G_SETTING_PTR->value(type).toString();
9  if(dir.isEmpty())
10  {
11  dir = QDir(path).canonicalPath();
12  if(!dir.endsWith(TTK_SEPARATOR))
13  {
14  dir.append(TTK_SEPARATOR);
15  }
16  }
17 
18  if(!QDir(dir).exists())
19  {
20  QDir().mkpath(dir);
21  }
22  return dir;
23 }
24 
25 
27 {
29 }
30 
32 {
34 }
35 
36 QString TTK::String::pefix(const QString &name)
37 {
38  return TTK::String::pefix(name, TTK_DOT);
39 }
40 
41 QString TTK::String::pefix(const QString &name, const QString &prefix)
42 {
43  return name.left(name.indexOf(prefix));
44 }
45 
46 QString TTK::String::suffix(const QString &name)
47 {
48  return TTK::String::suffix(name, TTK_DOT);
49 }
50 
51 QString TTK::String::suffix(const QString &name, const QString &suffix)
52 {
53  return name.right(name.length() - name.lastIndexOf(suffix) - suffix.length());
54 }
55 
56 QString TTK::String::splitToken(const QString &name)
57 {
58  return TTK::String::splitToken(name, TTK_DOT, "?");
59 }
60 
61 QString TTK::String::splitToken(const QString &name, const QString &prefix, const QString &suffix, bool revert)
62 {
63  if(revert)
64  {
65  const QString &data = TTK::String::suffix(name, prefix);
66  return TTK::String::pefix(data, suffix);
67  }
68  else
69  {
70  const QString &data = TTK::String::pefix(name, prefix);
71  return TTK::String::suffix(data, suffix);
72  }
73 }
74 
75 QStringList TTK::String::split(const QString &value, const QString &key)
76 {
77  QStringList strings = value.split(QString(" %1 ").arg(key));
78  if(strings.isEmpty() || strings.count() == 1)
79  {
80  strings = value.split(key);
81  }
82  return strings;
83 }
84 
85 QString TTK::String::removeToken(const QString &value, const QString &key)
86 {
87  QString s = value;
88  s.remove(key);
89  if(s.contains(key))
90  {
91  s = TTK::String::removeToken(key);
92  }
93  return s;
94 }
95 
96 bool TTK::String::isChinese(const QChar &c)
97 {
98  const bool v = c.unicode() >= 0x4e00 && c.unicode() <= 0x9fa5;
99 #ifdef Q_CC_MSVC
100  return QChar('\xa9\x96') == c || v;
101 #else
102  return char16_t(L'〇') == c || v;
103 #endif
104 }
105 
106 bool TTK::String::isNetworkUrl(const QString &path) noexcept
107 {
108  return path.startsWith(HTTP_PROTOCOL) || path.startsWith(HTTPS_PROTOCOL);
109 }
110 
111 QString TTK::String::convertHtmlToPlain(const QString &value)
112 {
113  QTextDocument text;
114  text.setHtml(value);
115  return text.toPlainText();
116 }
117 
119 {
120  static QStringList acs{"\\", "/", "?", "*", "\"", ":", "<", ">", "|"};
121  return acs;
122 }
123 
124 bool TTK::String::isCharValid(const QString &value)
125 {
126  for(const QString &ac : TTK::String::characters())
127  {
128  if(value.contains(ac))
129  {
130  return true;
131  }
132  }
133  return false;
134 }
135 
136 QString TTK::String::charactersReplace(const QString &value)
137 {
138  QString s(TTK::String::convertHtmlToPlain(value));
139  // convert to html is failed, use origin value
140  if(!value.isEmpty() && s.isEmpty())
141  {
142  s = value;
143  }
144 
145  for(const QString &ac : TTK::String::characters())
146  {
147  if(s.contains(ac))
148  {
149  s.replace(ac, TTK_SPACE);
150  }
151  }
152  return s;
153 }
TTK_MODULE_EXPORT QString charactersReplace(const QString &value)
TTK_MODULE_EXPORT QString convertHtmlToPlain(const QString &value)
#define HTTP_PROTOCOL
Definition: ttkglobal.h:285
TTK_MODULE_EXPORT bool isChinese(const QChar &c)
TTK_MODULE_EXPORT bool isCharValid(const QString &value)
TTK_MODULE_EXPORT QStringList characters()
#define TTK_DOT
Definition: ttkglobal.h:266
static QString makeFilePrefix(MusicSettingManager::Config type, const QString &path)
TTK_MODULE_EXPORT QString pefix(const QString &name)
#define HTTPS_PROTOCOL
Definition: ttkglobal.h:286
const char * name
Definition: http_parser.c:458
TTK_MODULE_EXPORT bool isNetworkUrl(const QString &path) noexcept
TTK_MODULE_EXPORT QString suffix(const QString &name)
static constexpr wchar_t key[]
#define TTK_SEPARATOR
Definition: ttkglobal.h:269
TTK_MODULE_EXPORT QString lrcDirPrefix()
#define MUSIC_DIR_FULL
Definition: musicobject.h:144
TTK_MODULE_EXPORT QStringList split(const QString &value, const QString &key=TTK_DEFAULT_STR)
TTK_MODULE_EXPORT QString splitToken(const QString &name)
#define LRC_DIR_FULL
Definition: musicobject.h:143
TTK_MODULE_EXPORT QString musicDirPrefix()
TTK_MODULE_EXPORT QString removeToken(const QString &value, const QString &key=TTK_SPACE)
#define TTK_SPACE
Definition: ttkglobal.h:268
#define G_SETTING_PTR