TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicydtranslationrequest.cpp
Go to the documentation of this file.
2 
3 static constexpr const char *QUERY_URL = "alNydEx6cDhBTklzNFBuUmJiOVk0RVZJZEZOUXRvVHVCcWxxeW4vTnFmbU1QTjBHT2ZuWUxxQU1SMlVPMklJeERSS2xJZTl2Sm1KWVNtUGxCb2JneGUrVTZxQXY2cjhmUmdHNk81QkYrdjVUYVJwZlFPa0NlQ05melF4MXJLUXMrWk5vcmtCWTRFb0pBSE9aeVhUR3FvcnI4SnV0REVwaWRKZk1QZz09";
4 static constexpr const char *TRANSLATION_URL = "MERYdllhU0NxcW1KS1BNQjFwYnQ2UXBDQmlkSUJ3S05tNUdSSUJxcnZjZlBpY0hRWGVVTkh0TjhFOFhlMnlDOExpY2VnVmlmWE1XMlhrK2l2YXl0T3RVbk5CdWo1R0I5UFFla1NBZ0tUK3hvaVA4SUsyNFRoRVlIQXJSbU5xaHlsUGU1N0svb1NNNjVvUWRLV2VvR2NKY2g4Zms9";
5 
8 {
9 
10 }
11 
13 {
14  TTK_INFO_STREAM(className() << "startToRequest");
15 
17 
18  QString sid;
19  {
20  QNetworkRequest request;
21  request.setUrl(TTK::Algorithm::mdII(QUERY_URL, false));
22  TTK::setSslConfiguration(&request);
24 
25  const QString &bytes = QString(TTK::syncNetworkQueryForGet(&request));
26  if(!bytes.isEmpty())
27  {
28  const QRegExp regx("sid\\:\\s\\'([0-9a-f\\.]+)");
29  sid = (regx.indexIn(bytes) != -1) ? regx.cap(1) : bytes;
30  }
31  }
32 
33  if(sid.isEmpty())
34  {
35  TTK_INFO_STREAM(className() << "downLoadFinished");
36  Q_EMIT downLoadDataChanged({});
37  deleteAll();
38  return;
39  }
40 
41  QNetworkRequest request;
42  request.setUrl(TTK::Algorithm::mdII(TRANSLATION_URL, false).arg(sid, mapToString(Language::Chinese), data));
43  TTK::setSslConfiguration(&request);
45 
46  m_reply = m_manager.get(request);
47  connect(m_reply, SIGNAL(finished()), SLOT(downLoadFinished()));
49 }
50 
52 {
53  TTK_INFO_STREAM(className() << "downLoadFinished");
54 
56  if(m_reply && m_reply->error() == QNetworkReply::NoError)
57  {
58  QJson::Parser json;
59  bool ok = false;
60  const QVariant &data = json.parse(m_reply->readAll(), &ok);
61  if(ok)
62  {
63  QVariantMap value = data.toMap();
64  if(value["code"].toInt() == 200)
65  {
66  const QVariantList &datas = value["text"].toList();
67  for(const QVariant &var : qAsConst(datas))
68  {
69  if(var.isNull())
70  {
71  continue;
72  }
73 
74  Q_EMIT downLoadDataChanged(var.toString());
75  deleteAll();
76  return;
77  }
78  }
79  }
80  }
81 
82  TTK_ERROR_STREAM("Translation source data error");
83  Q_EMIT downLoadDataChanged({});
84  deleteAll();
85 }
86 
88 {
89  switch(type)
90  {
91  case Language::Auto: return "auto";
92  case Language::Chinese: return "zh";
93  default: return {};
94  }
95 }
virtual void startToRequest(const QString &data) overridefinal
virtual void deleteAll()
void downLoadDataChanged(const QString &bytes)
QNetworkReply * m_reply
TTK_MODULE_EXPORT void setSslConfiguration(QNetworkRequest *request, QSslSocket::PeerVerifyMode mode=QSslSocket::VerifyNone)
The class of the translation words request.
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForGet(QNetworkRequest *request)
virtual void downLoadFinished()
static constexpr const char * TRANSLATION_URL
virtual void downLoadFinished() overridefinal
#define qAsConst
Definition: ttkqtglobal.h:53
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:67
QNetworkAccessManager m_manager
QString mapToString(Language type) const
virtual void replyError(QNetworkReply::NetworkError error) override
QVariant parse(QIODevice *io, bool *ok=0)
Read JSON string from the I/O Device and converts it to a QVariant object.
Definition: parser.cpp:69
#define TTK_SLOT
Definition: ttkqtglobal.h:165
static constexpr const char * QUERY_URL
MusicYDTranslationRequest(QObject *parent=nullptr)
TTK_MODULE_EXPORT void makeContentTypeHeader(QNetworkRequest *request, const QByteArray &data={})
Main class used to convert JSON data to QVariant objects.
Definition: parser.h:40
#define TTK_ERROR_STREAM(msg)
Definition: ttklogger.h:69
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59