TTKMusicPlayer  3.7.0.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()));
87  d->startToSearch(m_ui->sharedName->text().trimmed());
88  loop.exec();
89 
90  if(d->isEmpty())
91  {
93  break;
94  }
95 
96  const TTK::MusicSongInformation info(d->items().front());
97  m_data.m_id = info.m_songId;
98  m_data.m_cover = info.m_coverUrl;
100 
102  break;
103  }
104  case Module::Movie:
105  {
107  break;
108  }
109  case Module::Artist:
110  {
112  break;
113  }
114  case Module::Album:
115  {
117  break;
118  }
119  case Module::Playlist:
120  {
122  break;
123  }
124  default: break;
125  }
126 }
127 
129 {
130  MusicToastLabel::popup(tr("Song does not support sharing"));
131 }
132 
133 void MusicSongSharingWidget::sendToShare(const QString &playUrl, const QString &imageUrl)
134 {
135  QString url;
136  if(m_ui->qqButton->isChecked())
137  {
138  url = QString(TTK::Algorithm::mdII(QQ_SHARE, ALG_SHR_KEY, false)).arg(playUrl, m_ui->textEdit->toPlainText(), imageUrl, m_ui->sharedName->text(), tr("TTKMusicPlayer"));
139  }
140  else if(m_ui->qqspaceButton->isChecked())
141  {
142  url = QString(TTK::Algorithm::mdII(QZONE_SHARE, ALG_SHR_KEY, false)).arg(playUrl, tr("TTKMusicPlayer"), imageUrl, m_ui->textEdit->toPlainText());
143  }
144  else if(m_ui->sinaButton->isChecked())
145  {
146  url = QString(TTK::Algorithm::mdII(SINA_SHARE, ALG_SHR_KEY, false)).arg(playUrl, imageUrl, m_ui->textEdit->toPlainText());
147  }
148  else if(m_ui->weixingButton->isChecked())
149  {
150  m_qrCodeWidget->setText(playUrl.toUtf8());
151  m_qrCodeWidget->update();
152  return;
153  }
154 
155  url.replace("?name=", "%3Fname%3D");
156  url.replace("?id=", "%3Fid%3D");
157  url.replace("?pid=", "%3Fpid%3D");
158  url.replace("#hash=", "%23hash%3D");
159  url.replace('#', "%23");
160 
161  TTK::Url::openUrl(url, false);
162  TTK_SIGNLE_SHOT(TTK_DN_S2MS, this, close, TTK_SLOT);
163 }
164 
165 void MusicSongSharingWidget::sendToShare(const QString &a, const QString &b, const QString &c)
166 {
167  QString url;
169  {
170  url = TTK::Algorithm::mdII(a, ALG_SHR_KEY, false).arg(m_data.m_id);
171  }
173  {
174  url = TTK::Algorithm::mdII(b, ALG_SHR_KEY, false).arg(m_data.m_id);
175  }
177  {
178  url = TTK::Algorithm::mdII(c, ALG_SHR_KEY, false).arg(m_data.m_id);
179  }
180  else
181  {
183  return;
184  }
185 
186  sendToShare(url, m_data.m_cover);
187 }
188 
190 {
191  constexpr int max = 150;
192  QString text = m_ui->textEdit->toPlainText();
193  const int length = text.length();
194 
195  if(length > max)
196  {
197  QTextCursor textCursor = m_ui->textEdit->textCursor();
198  const int position = textCursor.position();
199  text.remove(position - (length - max), length - max);
200  m_ui->textEdit->setText(text);
201  textCursor.setPosition(position - (length - max));
202  m_ui->textEdit->setTextCursor(textCursor);
203  }
204  else
205  {
206  m_ui->textEditArea->setText(tr("You can enter %1 characters").arg(max - length));
207  }
208 }
209 
210 void MusicSongSharingWidget::downLoadFinished(const QByteArray &bytes)
211 {
212  if(bytes.isEmpty())
213  {
214  TTK_ERROR_STREAM("Input byte data is empty");
215  return;
216  }
217 
218  QPixmap pix;
219  pix.loadFromData(bytes);
220  m_ui->sharedNameIcon->setPixmap(pix.scaled(m_ui->sharedNameIcon->size()));
221 }
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:128
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:128
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:177
The class of the qr code widget.
Definition: qrcodewidget.h:31
static constexpr const char * SINA_SHARE
static constexpr const char * ALG_SHR_KEY
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:165
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:276
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:61
const TTK::MusicSongInformationList & items() const
#define TTK_ERROR_STREAM(msg)
Definition: ttklogger.h:69
static constexpr const char * WY_AR_SHARE
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:281