TTKMusicPlayer  4.1.3.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);
124  widget->initialize(info);
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 
142  std::sort(info.m_songProps.begin(), info.m_songProps.end()); //to find out the min bitrate
144  m_player->play();
145 
147  const int v = m_ui->volumeSlider->value();
148  m_ui->volumeSlider->setValue(0);
149  m_ui->volumeSlider->setValue(v);
150 
152  if(!QFile::exists(name))
153  {
155  connect(d, SIGNAL(downLoadDataChanged(QString)), SLOT(lrcDownloadStateChanged()));
156  d->startToRequest();
157  }
158  else
159  {
161  }
162 
163  name = ART_DIR_FULL + info.m_artistName + SKN_FILE;
164  if(!QFile::exists(name))
165  {
167  connect(d, SIGNAL(downLoadDataChanged(QString)), SLOT(picDownloadStateChanged()));
168  d->startToRequest();
169  }
170  else
171  {
173  }
174 }
175 
177 {
178  m_player->stop();
179  m_isPlaying = false;
180  QWidget::closeEvent(event);
181 }
182 
184 {
185  m_player = new MusicCoreMPlayer(this);
187 
188  connect(m_player, SIGNAL(positionChanged(qint64)), SLOT(positionChanged(qint64)));
189  connect(m_player, SIGNAL(durationChanged(qint64)), SLOT(durationChanged(qint64)));
190  connect(m_networkRequest, SIGNAL(downLoadDataChanged(QString)), SLOT(querySongInfoFinished()));
191 }
192 
194 {
196  if(m_networkRequest)
197  {
198  info = m_networkRequest->item();
199  }
200 
201  const QString &name = TTK::generateSongName(info.m_songName, info.m_artistName).trimmed();
202  m_ui->titleWidget->setText(name);
204 }
205 
207 {
209  if(m_networkRequest)
210  {
211  info = m_networkRequest->item();
212  }
213 
214  QPixmap pix(ART_DIR_FULL + info.m_artistName + SKN_FILE);
215  if(pix.isNull())
216  {
217  pix.load(":/image/lb_default_art");
218  }
219 
220  pix = TTK::Image::roundedPixmap(pix, QSize(150, 150), 150, 150);
221  m_ui->artistLabel->setPixmap(pix);
222  m_ui->artistLabel->start();
223 }
224 
226 {
227  m_ui->positionLabel->setText(TTKTime::formatDuration(position * TTK_DN_S2MS));
228 
229  if(m_analysis->isEmpty())
230  {
231  QString lrc = QString("<p style='font-weight:600;' align='center'>%1</p>").arg(tr("No lrc data file found"));
232  m_ui->lrcLabel->setText(lrc);
233  return;
234  }
235 
236  const int index = m_analysis->currentIndex();
237  const qint64 time = m_analysis->findTime(index);
238 
239  if(time < position * TTK_DN_S2MS && time != -1)
240  {
241  QString lrc;
242  for(int i = 0; i < m_analysis->lineMax(); ++i)
243  {
244  if(i == m_analysis->lineMiddle())
245  {
246  lrc += QString("<p style='font-weight:600;' align='center'>");
247  }
248  else
249  {
250  lrc += QString("<p align='center'>");
251  }
252 
253  lrc += m_analysis->text(i);
254  lrc += QString("</p>");
255  }
256  m_ui->lrcLabel->setText(lrc);
257  m_analysis->setCurrentIndex(index + 1);
258  }
259 }
260 
262 {
263  m_ui->durationLabel->setText(QString("/%1").arg(TTKTime::formatDuration(duration * TTK_DN_S2MS)));
264 }
void setBackgroundLabel(QLabel *label)
TTK_MODULE_EXPORT QString generateSongName(const QString &title, const QString &artist)
Definition: musicsong.cpp:105
The class of the download widget.
void setMedia(Module type, const QString &url, int winId=-1)
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:130
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:297
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)
void initialize(const QString &name)
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 wangyi fm radio request of song info.
#define TTK_DN_S2MS
Definition: ttkglobal.h:281
static const QString ToolButtonStyle04
#define SKN_FILE
Definition: musicobject.h:62
#define LRC_FILE
Definition: musicobject.h:65
virtual void startToRequest() override
The class of the music song information.
Definition: musicobject.h:283
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123
The class of the moving widget base.