TTKMusicPlayer  4.1.3.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicsongsharingwidget.cpp
Go to the documentation of this file.
2 #include "ui_musicsongsharingwidget.h"
5 #include "musictoastlabel.h"
6 #include "musicurlutils.h"
7 #include "musiccoverrequest.h"
8 #include "musicsong.h"
9 
10 #include "qrencode/qrcodewidget.h"
11 
13  : MusicAbstractMoveDialog(parent),
14  m_ui(new Ui::MusicSongSharingWidget),
15  m_type(Module::Null)
16 {
17  m_ui->setupUi(this);
18  setFixedSize(size());
19  setBackgroundLabel(m_ui->background);
20 
21  m_ui->topTitleCloseButton->setIcon(QIcon(":/functions/btn_close_hover"));
22  m_ui->topTitleCloseButton->setStyleSheet(TTK::UI::ToolButtonStyle04);
23  m_ui->topTitleCloseButton->setCursor(QCursor(Qt::PointingHandCursor));
24  m_ui->topTitleCloseButton->setToolTip(tr("Close"));
25  connect(m_ui->topTitleCloseButton, SIGNAL(clicked()), SLOT(close()));
26 
27  m_ui->qqButton->setChecked(true);
28  m_ui->textEdit->setStyleSheet(TTK::UI::TextEditStyle01);
29 
30  m_qrCodeWidget = new QRCodeQWidget({}, QSize(90, 90), this);
32  m_qrCodeWidget->setIcon(":/image/lb_app_logo", 0.23);
33  m_ui->QRCodeIconWidgetLayout->addWidget(m_qrCodeWidget);
34 
35 #ifdef Q_OS_UNIX
36  m_ui->qqButton->setFocusPolicy(Qt::NoFocus);
37  m_ui->qqspaceButton->setFocusPolicy(Qt::NoFocus);
38  m_ui->sinaButton->setFocusPolicy(Qt::NoFocus);
39  m_ui->weixingButton->setFocusPolicy(Qt::NoFocus);
40  m_ui->shareButton->setFocusPolicy(Qt::NoFocus);
41  m_ui->cancelButton->setFocusPolicy(Qt::NoFocus);
42 #endif
43 
44  connect(m_ui->textEdit, SIGNAL(textChanged()), SLOT(textAreaChanged()));
45  connect(m_ui->cancelButton, SIGNAL(clicked()), SLOT(close()));
46  connect(m_ui->shareButton, SIGNAL(clicked()), SLOT(confirmButtonClicked()));
47 }
48 
50 {
51  delete m_qrCodeWidget;
52  delete m_ui;
53 }
54 
56 {
57  m_type = type;
58  m_data = data;
59 
60  if(TTK::isCoverValid(data.m_cover))
61  {
62  MusicCoverRequest *d = G_DOWNLOAD_QUERY_PTR->makeCoverRequest(this);
63  connect(d, SIGNAL(downLoadRawDataChanged(QByteArray)), SLOT(downLoadFinished(QByteArray)));
64  d->startToRequest(data.m_cover);
65  }
66 
67  const QString &name = data.m_name;
68  m_ui->sharedName->setToolTip(name);
69  m_ui->sharedName->setText(TTK::Widget::elidedText(font(), name, Qt::ElideRight, 200));
70 
71  const QString &path = ART_DIR_FULL + TTK::generateSongArtist(name) + SKN_FILE;
72  m_ui->sharedNameIcon->setPixmap(QPixmap(QFile::exists(path) ? path : ":/image/lb_default_art").scaled(50, 50));
73  m_ui->textEdit->setText(tr("I used to listen music #%1# by TTKMusicPlayer,").arg(name) + tr("and recommend it to you! (From #TTKMusicPlayer#)"));
74 }
75 
77 {
78  switch(m_type)
79  {
80  case Module::Song:
81  {
82  TTKSemaphoreLoop loop;
83  MusicAbstractQueryRequest *d = G_DOWNLOAD_QUERY_PTR->makeQueryRequest(this);
84  connect(d, SIGNAL(downLoadDataChanged(QString)), &loop, SLOT(quit()));
86  d->startToSearch(m_ui->sharedName->text().trimmed());
87  loop.exec();
88 
89  if(d->isEmpty())
90  {
92  break;
93  }
94 
95  const TTK::MusicSongInformation &info = d->items().front();
96  m_data.m_id = info.m_songId;
97  m_data.m_cover = info.m_coverUrl;
99 
101  break;
102  }
103  case Module::Movie:
104  {
106  break;
107  }
108  case Module::Artist:
109  {
111  break;
112  }
113  case Module::Album:
114  {
116  break;
117  }
118  case Module::Playlist:
119  {
121  break;
122  }
123  default: break;
124  }
125 }
126 
128 {
129  MusicToastLabel::popup(tr("Song does not support sharing"));
130 }
131 
132 void MusicSongSharingWidget::sendToShare(const QString &playUrl, const QString &imageUrl)
133 {
134  QString url;
135  if(m_ui->qqButton->isChecked())
136  {
137  url = QString(TTK::Algorithm::mdII(QQ_SHARE, MDII_SHR_KEY, false)).arg(playUrl, m_ui->textEdit->toPlainText(), imageUrl, m_ui->sharedName->text(), tr("TTKMusicPlayer"));
138  }
139  else if(m_ui->qqspaceButton->isChecked())
140  {
141  url = QString(TTK::Algorithm::mdII(QZONE_SHARE, MDII_SHR_KEY, false)).arg(playUrl, tr("TTKMusicPlayer"), imageUrl, m_ui->textEdit->toPlainText());
142  }
143  else if(m_ui->sinaButton->isChecked())
144  {
145  url = QString(TTK::Algorithm::mdII(SINA_SHARE, MDII_SHR_KEY, false)).arg(playUrl, imageUrl, m_ui->textEdit->toPlainText());
146  }
147  else if(m_ui->weixingButton->isChecked())
148  {
149  m_qrCodeWidget->setText(playUrl.toUtf8());
150  m_qrCodeWidget->update();
151  return;
152  }
153 
154  url.replace("?name=", "%3Fname%3D");
155  url.replace("?id=", "%3Fid%3D");
156  url.replace("?pid=", "%3Fpid%3D");
157  url.replace("#hash=", "%23hash%3D");
158  url.replace('#', "%23");
159 
160  TTK::Url::openUrl(url, false);
161  TTK_SIGNLE_SHOT(TTK_DN_S2MS, this, close, TTK_SLOT);
162 }
163 
164 void MusicSongSharingWidget::sendToShare(const QString &a, const QString &b, const QString &c)
165 {
166  QString url;
168  {
169  url = TTK::Algorithm::mdII(a, MDII_SHR_KEY, false).arg(m_data.m_id);
170  }
172  {
173  url = TTK::Algorithm::mdII(b, MDII_SHR_KEY, false).arg(m_data.m_id);
174  }
176  {
177  url = TTK::Algorithm::mdII(c, MDII_SHR_KEY, false).arg(m_data.m_id);
178  }
179  else
180  {
182  return;
183  }
184 
185  sendToShare(url, m_data.m_cover);
186 }
187 
189 {
190  constexpr int max = 150;
191  QString text = m_ui->textEdit->toPlainText();
192  const int length = text.length();
193 
194  if(length > max)
195  {
196  QTextCursor textCursor = m_ui->textEdit->textCursor();
197  const int position = textCursor.position();
198  text.remove(position - (length - max), length - max);
199  m_ui->textEdit->setText(text);
200  textCursor.setPosition(position - (length - max));
201  m_ui->textEdit->setTextCursor(textCursor);
202  }
203  else
204  {
205  m_ui->textEditArea->setText(tr("You can enter %1 characters").arg(max - length));
206  }
207 }
208 
209 void MusicSongSharingWidget::downLoadFinished(const QByteArray &bytes)
210 {
211  if(bytes.isEmpty())
212  {
213  TTK_ERROR_STREAM("Input byte data is empty");
214  return;
215  }
216 
217  QPixmap pix;
218  pix.loadFromData(bytes);
219  m_ui->sharedNameIcon->setPixmap(pix.scaled(m_ui->sharedNameIcon->size()));
220 }
static constexpr const char * WY_SG_SHARE
void setBackgroundLabel(QLabel *label)
TTK_MODULE_EXPORT QString generateSongArtist(const QString &name, const QString &key=TTK_DEFAULT_STR)
Definition: musicsong.cpp:121
static constexpr const char * KW_PL_SHARE
static constexpr const char * KG_SG_SHARE
The class of the song share widget.
#define ART_DIR_FULL
Definition: musicobject.h:130
MusicSongSharingWidget(QWidget *parent=nullptr)
void setText(const QByteArray &text)
static constexpr const char * QUERY_KG_INTERFACE
virtual void startToRequest(const QString &url)=0
void initialize(Module type, const MusicSongSharingWidget::Item &data)
voidpf void uLong size
Definition: ioapi.h:136
static constexpr const char * QZONE_SHARE
static constexpr const char * WY_MV_SHARE
int exec(ProcessEventsFlags flags=AllEvents)
static constexpr const char * KW_AR_SHARE
static constexpr const char * KG_AL_SHARE
void setIcon(const QString &path, float percent)
void setMargin(const int margin)
static constexpr const char * QQ_SHARE
static void popup(const QString &text)
void downLoadFinished(const QByteArray &bytes)
static const QString TextEditStyle01
TextEdit.
constexpr const _Tp & max(const _Tp &a, const _Tp &b)
Definition: ttkcompat.h:33
MusicSongSharingWidget::Item m_data
const char * name
Definition: http_parser.c:458
static constexpr const char * QUERY_WY_INTERFACE
#define TTK_SIGNLE_SHOT(...)
Definition: ttkqtglobal.h:193
The class of the qr code widget.
Definition: qrcodewidget.h:31
static constexpr const char * SINA_SHARE
static constexpr const char * KW_SG_SHARE
static constexpr const char * KG_AR_SHARE
static constexpr const char * KW_AL_SHARE
static constexpr const char * KG_MV_SHARE
static constexpr const char * WY_PL_SHARE
TTK_MODULE_EXPORT QString elidedText(const QFont &font, const QString &text, Qt::TextElideMode mode, int width)
static constexpr const char * QUERY_KW_INTERFACE
#define TTK_SLOT
Definition: ttkqtglobal.h:181
TTK_MODULE_EXPORT bool openUrl(const QString &path, bool local=true)
The class of the moving dialog base.
static bool isCoverValid(const QString &url)
void sendToShare(const QString &playUrl, const QString &imageUrl)
#define TTK_DN_S2MS
Definition: ttkglobal.h:281
static const QString ToolButtonStyle04
static constexpr const char * WY_AL_SHARE
Ui::MusicSongSharingWidget * m_ui
#define G_DOWNLOAD_QUERY_PTR
The class of the cover data download request.
virtual void startToSearch(const QString &value)=0
The class of the abstract query download data from net.
static constexpr const char * KW_MV_SHARE
#define SKN_FILE
Definition: musicobject.h:62
const TTK::MusicSongInformationList & items() const
#define TTK_ERROR_STREAM(msg)
Definition: ttklogger.h:70
static constexpr const char * WY_AR_SHARE
static constexpr const char * MDII_SHR_KEY
The class of the semaphore event loop.
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
static constexpr const char * KG_PL_SHARE
The class of the music song information.
Definition: musicobject.h:283