TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicnumberutils.cpp
Go to the documentation of this file.
1 #include "musicnumberutils.h"
2 #include "ttktime.h"
3 
4 #include <QColor>
5 #include <QStringList>
6 
7 static QString size2Number(qint64 size)
8 {
9  if(size < TTK_SN_KB2B)
10  {
11  return QString::number(size * 1.0, 'f', 1);
12  }
13  else if(TTK_SN_KB2B <= size && size < TTK_SN_MB2B)
14  {
15  return QString::number(size * 1.0 / TTK_SN_KB2B, 'f', 1);
16  }
17  else if(TTK_SN_MB2B <= size && size < TTK_SN_GB2B)
18  {
19  return QString::number(size * 1.0 / TTK_SN_MB2B, 'f', 1);
20  }
21  else if(TTK_SN_GB2B <= size && size < TTK_SN_TB2B)
22  {
23  return QString::number(size * 1.0 / TTK_SN_GB2B, 'f', 1);
24  }
25  else
26  {
27  return QString::number(size * 1.0 / TTK_SN_TB2B, 'f', 1);
28  }
29 }
30 
32 {
33  if(size < 0)
34  {
35  return "0.0B";
36  }
37 
38  const QString &label = size2Number(size);
39  if(size < TTK_SN_KB2B)
40  {
41  return QString("%1B").arg(label);
42  }
43  else if(TTK_SN_KB2B <= size && size < TTK_SN_MB2B)
44  {
45  return QString("%1K").arg(label);
46  }
47  else if(TTK_SN_MB2B <= size && size < TTK_SN_GB2B)
48  {
49  return QString("%1M").arg(label);
50  }
51  else if(TTK_SN_GB2B <= size && size < TTK_SN_TB2B)
52  {
53  return QString("%1G").arg(label);
54  }
55  else
56  {
57  return QString("%1T").arg(label);
58  }
59 }
60 
61 QString TTK::Number::sizeByteToLabel(const QString &duration, int bitrate)
62 {
63  if(duration.isEmpty() || duration == TTK_DEFAULT_STR)
64  {
65  return "0.0B";
66  }
67  return TTK::Number::sizeByteToLabel(TTKTime::formatDuration(duration) * bitrate / 8.0);
68 }
69 
71 {
72  if(size < 0)
73  {
74  return "0.0B/s";
75  }
76 
77  const QString &label = size2Number(size);
78  if(size < TTK_SN_KB2B)
79  {
80  return QString("%1B/s").arg(label);
81  }
82  else if(TTK_SN_KB2B <= size && size < TTK_SN_MB2B)
83  {
84  return QString("%1K/s").arg(label);
85  }
86  else if(TTK_SN_MB2B <= size && size < TTK_SN_GB2B)
87  {
88  return QString("%1M/s").arg(label);
89  }
90  else if(TTK_SN_GB2B <= size && size < TTK_SN_TB2B)
91  {
92  return QString("%1G/s").arg(label);
93  }
94  else
95  {
96  return QString("%1T/s").arg(label);
97  }
98 }
99 
101 {
102  if(bitrate > TTK_BN_0 && bitrate <= TTK_BN_64)
103  {
104  return TTK_BN_32;
105  }
106  else if(bitrate > TTK_BN_64 && bitrate < TTK_BN_128)
107  {
108  return TTK_BN_128;
109  }
110  else if(bitrate > TTK_BN_128 && bitrate < TTK_BN_192)
111  {
112  return TTK_BN_192;
113  }
114  else if(bitrate > TTK_BN_192 && bitrate < TTK_BN_320)
115  {
116  return TTK_BN_320;
117  }
118  else if(bitrate > TTK_BN_320)
119  {
120  return TTK_BN_500;
121  }
122  else
123  {
124  return bitrate;
125  }
126 }
127 
129 {
130  if(bitrate <= 0)
131  {
132  return QueryQuality::None;
133  }
134  else if(bitrate > 0 && bitrate <= TTK_BN_128)
135  {
136  return QueryQuality::Standard;
137  }
138  else if(bitrate > TTK_BN_128 && bitrate <= TTK_BN_192)
139  {
140  return QueryQuality::High;
141  }
142  else if(bitrate > TTK_BN_192 && bitrate <= TTK_BN_320)
143  {
144  return QueryQuality::Super;
145  }
146  else
147  {
148  return QueryQuality::Lossless;
149  }
150 }
151 
153 {
154  if(bitrate.isEmpty())
155  {
156  return QueryQuality::None;
157  }
158 
159  const QStringList &data(bitrate.split(" "));
160  if(data.count() >= 2)
161  {
162  const int rate = data.front().trimmed().toInt();
163  return TTK::Number::bitrateToLevel(rate);
164  }
165  return QueryQuality::None;
166 }
167 
168 void TTK::Number::bitrateToQuality(TTK::QueryQuality level, QString &bitrate, QColor &color)
169 {
170  bitrate = QObject::tr("UnKnow");
171  color = QColor(131, 131, 131);
172 
173  switch(level)
174  {
175  case QueryQuality::Standard:
176  {
177  bitrate = QObject::tr("SD");
178  color = QColor(211, 0, 70);
179  break;
180  }
181  case QueryQuality::High:
182  {
183  bitrate = QObject::tr("HQ");
184  color = QColor(0, 134, 211);
185  break;
186  }
187  case QueryQuality::Super:
188  {
189  bitrate = QObject::tr("SQ");
190  color = QColor(236, 138, 48);
191  break;
192  }
193  case QueryQuality::Lossless:
194  {
195  bitrate = QObject::tr("CD");
196  color = QColor(117, 0, 206);
197  break;
198  }
199  default: break;
200  }
201 }
static QString size2Number(qint64 size)
#define TTK_DEFAULT_STR
Definition: ttkglobal.h:200
#define TTK_BN_64
Definition: ttkglobal.h:346
#define TTK_BN_32
Definition: ttkglobal.h:345
voidpf void uLong size
Definition: ioapi.h:136
TTK_MODULE_EXPORT QString sizeByteToLabel(qint64 size)
#define TTK_SN_GB2B
Definition: ttkglobal.h:320
#define TTK_BN_500
Definition: ttkglobal.h:352
TTK_MODULE_EXPORT QString speedByteToLabel(qint64 size)
TTK_MODULE_EXPORT TTK::QueryQuality bitrateToLevel(int bitrate)
#define TTK_SN_KB2B
Definition: ttkglobal.h:309
QueryQuality
Definition: musicobject.h:191
#define TTK_BN_0
Definition: ttkglobal.h:344
#define TTK_BN_320
Definition: ttkglobal.h:351
#define TTK_SN_MB2B
Definition: ttkglobal.h:314
#define TTK_SN_TB2B
Definition: ttkglobal.h:327
TTK_MODULE_EXPORT int bitrateToNormal(int bitrate)
#define TTK_BN_192
Definition: ttkglobal.h:349
TTK_MODULE_EXPORT void bitrateToQuality(TTK::QueryQuality level, QString &bitrate, QColor &color)
#define TTK_BN_128
Definition: ttkglobal.h:348
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123