TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicwebfmradioplaywidget.cpp
Go to the documentation of this file.
2 #include "ui_musicwebfmradioplaywidget.h"
3 #include "musiccoremplayer.h"
6 #include "musiclrcanalysis.h"
7 #include "musicimageutils.h"
9 #include "musicdownloadwidget.h"
10 #include "musicsong.h"
11 
13  : MusicAbstractMoveWidget(parent),
14  m_ui(new Ui::MusicWebFMRadioPlayWidget),
15  m_isPlaying(false),
16  m_networkRequest(nullptr)
17 {
18  m_ui->setupUi(this);
19  setFixedSize(size());
20  setBackgroundLabel(m_ui->background);
21 
22  m_ui->topTitleCloseButton->setIcon(QIcon(":/functions/btn_close_hover"));
23  m_ui->topTitleCloseButton->setStyleSheet(TTK::UI::ToolButtonStyle04);
24  m_ui->topTitleCloseButton->setCursor(QCursor(Qt::PointingHandCursor));
25  m_ui->topTitleCloseButton->setToolTip(tr("Close"));
26  connect(m_ui->topTitleCloseButton, SIGNAL(clicked()), SLOT(close()));
27 
28  m_ui->playButton->setIcon(QIcon(":/functions/btn_pause_hover"));
29  m_ui->previousButton->setIcon(QIcon(":/functions/btn_previous_hover"));
30  m_ui->nextButton->setIcon(QIcon(":/functions/btn_next_hover"));
31  m_ui->downloadButton->setStyleSheet(TTK::UI::BtnUnDownload);
32 
33  m_ui->playButton->setStyleSheet(TTK::UI::BackgroundStyle01);
34  m_ui->previousButton->setStyleSheet(TTK::UI::BackgroundStyle01);
35  m_ui->nextButton->setStyleSheet(TTK::UI::BackgroundStyle01);
36 
37 #ifdef Q_OS_UNIX
38  m_ui->playButton->setFocusPolicy(Qt::NoFocus);
39  m_ui->previousButton->setFocusPolicy(Qt::NoFocus);
40  m_ui->nextButton->setFocusPolicy(Qt::NoFocus);
41 #endif
42 
43  m_ui->playButton->setIconSize(QSize(31, 31));
44  m_ui->previousButton->setIconSize(QSize(31, 31));
45  m_ui->nextButton->setIconSize(QSize(31, 31));
46 
47  m_ui->playButton->setCursor(QCursor(Qt::PointingHandCursor));
48  m_ui->previousButton->setCursor(QCursor(Qt::PointingHandCursor));
49  m_ui->nextButton->setCursor(QCursor(Qt::PointingHandCursor));
50  m_ui->downloadButton->setCursor(QCursor(Qt::PointingHandCursor));
51 
52  m_ui->volumeSlider->setStyleSheet(TTK::UI::SliderStyle10);
53  m_ui->volumeSlider->setRange(0, 100);
54  m_ui->volumeSlider->setValue(100);
55 
56  initialize();
58 
59  m_analysis = new MusicLrcAnalysis(this);
61 
62  connect(m_ui->playButton, SIGNAL(clicked()), SLOT(radioPlay()));
63  connect(m_ui->previousButton, SIGNAL(clicked()), SLOT(radioPrevious()));
64  connect(m_ui->nextButton, SIGNAL(clicked()), SLOT(radioNext()));
65  connect(m_ui->downloadButton, SIGNAL(clicked()), SLOT(radioResourceDownload()));
66  connect(m_ui->volumeSlider, SIGNAL(valueChanged(int)), SLOT(radioVolume(int)));
67 }
68 
70 {
71  delete m_analysis;
72  delete m_player;
73  delete m_networkRequest;
74  delete m_ui;
75 }
76 
78 {
81 }
82 
84 {
86  m_ui->playButton->setIcon(QIcon(m_isPlaying ? ":/functions/btn_pause_hover" : ":/functions/btn_play_hover"));
87  m_player->play();
88 }
89 
91 {
93 
94  if(!m_isPlaying)
95  {
96  m_ui->playButton->setIcon(QIcon(":/functions/btn_pause_hover"));
97  }
98 }
99 
101 {
103 
104  if(!m_isPlaying)
105  {
106  m_ui->playButton->setIcon(QIcon(":/functions/btn_pause_hover"));
107  }
108 }
109 
111 {
112  m_player->setVolume(num);
113 }
114 
116 {
118  if(m_networkRequest)
119  {
120  info = m_networkRequest->item();
121  }
122 
123  MusicDownloadWidget *widget = new MusicDownloadWidget(this);
125  widget->show();
126 }
127 
129 {
131  if(m_networkRequest)
132  {
133  info = m_networkRequest->item();
134  }
135 
136  m_isPlaying = true;
137  if(info.m_songProps.isEmpty())
138  {
139  return;
140  }
141 
143  m_player->play();
144 
146  const int v = m_ui->volumeSlider->value();
147  m_ui->volumeSlider->setValue(0);
148  m_ui->volumeSlider->setValue(v);
149 
151  if(!QFile::exists(name))
152  {
154  connect(d, SIGNAL(downLoadDataChanged(QString)), SLOT(lrcDownloadStateChanged()));
155  d->startToRequest();
156  }
157  else
158  {
160  }
161 
162  name = ART_DIR_FULL + info.m_artistName + SKN_FILE;
163  if(!QFile::exists(name))
164  {
166  connect(d, SIGNAL(downLoadDataChanged(QString)), SLOT(picDownloadStateChanged()));
167  d->startToRequest();
168  }
169  else
170  {
172  }
173 }
174 
176 {
177  m_player->stop();
178  m_isPlaying = false;
179  QWidget::closeEvent(event);
180 }
181 
183 {
184  m_player = new MusicCoreMPlayer(this);
186 
187  connect(m_player, SIGNAL(positionChanged(qint64)), SLOT(positionChanged(qint64)));
188  connect(m_player, SIGNAL(durationChanged(qint64)), SLOT(durationChanged(qint64)));
189  connect(m_networkRequest, SIGNAL(downLoadDataChanged(QString)), SLOT(querySongInfoFinished()));
190 }
191 
193 {
195  if(m_networkRequest)
196  {
197  info = m_networkRequest->item();
198  }
199 
200  const QString &name = TTK::generateSongName(info.m_songName, info.m_artistName).trimmed();
201  m_ui->titleWidget->setText(name);
203 }
204 
206 {
208  if(m_networkRequest)
209  {
210  info = m_networkRequest->item();
211  }
212 
213  QPixmap pix(ART_DIR_FULL + info.m_artistName + SKN_FILE);
214  if(pix.isNull())
215  {
216  pix.load(":/image/lb_default_art");
217  }
218 
219  pix = TTK::Image::roundedPixmap(pix, QSize(150, 150), 150, 150);
220  m_ui->artistLabel->setPixmap(pix);
221  m_ui->artistLabel->start();
222 }
223 
225 {
226  m_ui->positionLabel->setText(QString("%1").arg(TTKTime::formatDuration(position * TTK_DN_S2MS)));
227 
228  if(m_analysis->isEmpty())
229  {
230  QString lrc = QString("<p style='font-weight:600;' align='center'>%1</p>").arg(tr("No lrc data file found"));
231  m_ui->lrcLabel->setText(lrc);
232  return;
233  }
234 
235  const int index = m_analysis->currentIndex();
236  const qint64 time = m_analysis->findTime(index);
237 
238  if(time < position * TTK_DN_S2MS && time != -1)
239  {
240  QString lrc;
241  for(int i = 0; i < m_analysis->lineMax(); ++i)
242  {
243  if(i == m_analysis->lineMiddle())
244  {
245  lrc += QString("<p style='font-weight:600;' align='center'>");
246  }
247  else
248  {
249  lrc += QString("<p align='center'>");
250  }
251 
252  lrc += m_analysis->text(i);
253  lrc += QString("</p>");
254  }
255  m_ui->lrcLabel->setText(lrc);
256  m_analysis->setCurrentIndex(index + 1);
257  }
258 }
259 
261 {
262  m_ui->durationLabel->setText(QString("/%1").arg(TTKTime::formatDuration(duration * TTK_DN_S2MS)));
263 }
void setBackgroundLabel(QLabel *label)
TTK_MODULE_EXPORT QString generateSongName(const QString &title, const QString &artist)
Definition: musicsong.cpp:112
The class of the download widget.
void initialize(MusicAbstractQueryRequest *request, int row)
void setLineMax(int max)
void setCurrentIndex(int index)
int lineMax() const
static const QString SliderStyle10
virtual void closeEvent(QCloseEvent *event) overridefinal
#define ART_DIR_FULL
Definition: musicobject.h:128
The class of the download the type of data.
voidpf void uLong size
Definition: ioapi.h:136
static constexpr const char * BtnUnDownload
Ui::MusicWebFMRadioPlayWidget * m_ui
MusicSongPropertyList m_songProps
Definition: musicobject.h:295
const TTK::MusicSongInformation & item() const
void setVolume(int value)
virtual void startToRequest() overridefinal
The class of the download the type of wangyi txt.
TTK_MODULE_EXPORT QPixmap roundedPixmap(const QPixmap &input, int ratioX, int ratioY)
int lineMiddle() const
MusicWebFMRadioPlayWidget(QWidget *parent=nullptr)
const char * name
Definition: http_parser.c:458
The class of the core lrc analysis.
bool isEmpty() const
The class of the web music radio widget.
int currentIndex() const
QString text(int index) const
MusicFMRadioSongRequest * m_networkRequest
static const QString BackgroundStyle01
Background.
Definition: musicuiobject.h:77
TTK_MODULE_EXPORT QString lrcDirPrefix()
TTK_MODULE_EXPORT void adjustWidgetPosition(QWidget *widget)
State loadFromLrcFile(const QString &path)
qint64 findTime(int index) const
The class of the mplayer core.
The class of the fm radio request of song info.
#define TTK_DN_S2MS
Definition: ttkglobal.h:276
static const QString ToolButtonStyle04
void setMedia(Module type, const QString &data, int winId=-1)
#define SKN_FILE
Definition: musicobject.h:61
#define LRC_FILE
Definition: musicobject.h:63
virtual void startToRequest() override
The class of the music song information.
Definition: musicobject.h:281
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123
The class of the moving widget base.