TTKMusicPlayer  4.1.3.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicsongdlnatransferwidget.cpp
Go to the documentation of this file.
2 #include "ui_musicsongdlnatransferwidget.h"
4 #include "musictoastlabel.h"
5 
6 #include "qdlna/qdlnafinder.h"
7 #include "qdlna/qdlnaclient.h"
9 
11  : MusicAbstractMoveWidget(parent),
13  m_state(TTK::PlayState::Stopped),
14  m_currentPlayIndex(0)
15 {
16  m_ui->setupUi(this);
17  setFixedSize(size());
18  setAttribute(Qt::WA_DeleteOnClose);
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->iconLabel->setPixmap(QPixmap(":/contextMenu/btn_mobile"));
28  m_ui->playButton->setIcon(QIcon(":/functions/btn_play_hover"));
29  m_ui->previousButton->setIcon(QIcon(":/functions/btn_previous_hover"));
30  m_ui->nextButton->setIcon(QIcon(":/functions/btn_next_hover"));
31  m_ui->refreshButton->setIcon(QIcon(":/functions/btn_fresh_fore_hover"));
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  m_ui->refreshButton->setStyleSheet(TTK::UI::BackgroundStyle01);
37 
38 #ifdef Q_OS_UNIX
39  m_ui->playButton->setFocusPolicy(Qt::NoFocus);
40  m_ui->previousButton->setFocusPolicy(Qt::NoFocus);
41  m_ui->nextButton->setFocusPolicy(Qt::NoFocus);
42  m_ui->refreshButton->setFocusPolicy(Qt::NoFocus);
43 #endif
44 
45  m_ui->playButton->setIconSize(QSize(31, 31));
46  m_ui->previousButton->setIconSize(QSize(31, 31));
47  m_ui->nextButton->setIconSize(QSize(31, 31));
48  m_ui->refreshButton->setIconSize(QSize(20, 20));
49 
50  m_ui->playButton->setCursor(QCursor(Qt::PointingHandCursor));
51  m_ui->previousButton->setCursor(QCursor(Qt::PointingHandCursor));
52  m_ui->nextButton->setCursor(QCursor(Qt::PointingHandCursor));
53  m_ui->refreshButton->setCursor(QCursor(Qt::PointingHandCursor));
54 
55  m_ui->deviceComboBox->setStyleSheet(TTK::UI::ComboBoxStyle02);
56 
57  m_ui->deviceComboBox->addItem(tr("No connections"));
58  m_ui->deviceComboBox->setEnabled(false);
59 
60  m_dlnaFinder = new QDlnaFinder(this);
62 
63  startToScan();
65 
66  connect(m_ui->playButton, SIGNAL(clicked()), SLOT(playSongClicked()));
67  connect(m_ui->previousButton, SIGNAL(clicked()), SLOT(playPrevious()));
68  connect(m_ui->nextButton, SIGNAL(clicked()), SLOT(playNext()));
69  connect(m_ui->refreshButton, SIGNAL(clicked()), SLOT(startToScan()));
70  connect(m_dlnaFinder, SIGNAL(finished()), SLOT(scanFinished()));
71 }
72 
74 {
75  TTKRemoveSingleWidget(className());
76 
77  QDlnaClient *client = getClient();
78  if(client)
79  {
80  client->stop();
81  client->remove();
82  TTK_INFO_STREAM("Stop DLNA module");
83  }
84 
85  delete m_dlnaFinder;
86  delete m_ui;
87 }
88 
90 {
91  m_dlnaFinder->find();
92 }
93 
95 {
96  bool init = false;
97  for(const QString &name : m_dlnaFinder->clientNames())
98  {
99  if(!name.isEmpty())
100  {
101  if(!init)
102  {
103  m_ui->deviceComboBox->clear();
104  m_ui->deviceComboBox->setEnabled(true);
105  init = true;
106  }
107  m_ui->deviceComboBox->addItem(name);
108  }
109  }
110 
111  if(m_ui->deviceComboBox->currentText() == tr("No connections"))
112  {
113  MusicToastLabel::popup(tr("Can not find any clients"));
114  }
115 }
116 
118 {
119  if(m_ui->deviceComboBox->currentText() == tr("No connections"))
120  {
121  return;
122  }
123 
124  QDlnaClient *client = getClient();
125  if(!client)
126  {
127  return;
128  }
129 
130  MusicSongItemList items;
132 
133  if(items.empty())
134  {
135  return;
136  }
137 
138  MusicSongList *songs = &items[0].m_songs;
139  if(m_currentPlayIndex < 0 || m_currentPlayIndex >= songs->count())
140  {
141  m_currentPlayIndex = 0;
142  }
143 
144  const MusicSong &song = (*songs)[m_currentPlayIndex];
145  const QFileInfo fin(song.path());
146 
148  {
149  client->pause();
151  m_ui->playButton->setIcon(QIcon(":/functions/btn_play_hover"));
152  }
153  else
154  {
156  {
157  client->play();
159  m_ui->playButton->setIcon(QIcon(":/functions/btn_pause_hover"));
160  return;
161  }
162 
163  m_dlnaFileServer->setPrefixPath(fin.path());
164  client->open(m_dlnaFileServer->localAddress(client->server()) + fin.fileName());
165 
166  if(client->play())
167  {
169  m_ui->playButton->setIcon(QIcon(":/functions/btn_pause_hover"));
170 
171  qint64 position = 0, duration = 0;
172  if(client->position(position, duration))
173  {
174  TTK_INFO_STREAM(position << " " << duration);
175  }
176  }
177  else
178  {
180  m_ui->playButton->setIcon(QIcon(":/functions/btn_play_hover"));
181  }
182  }
183 }
184 
186 {
189 
190  playSongClicked();
191 }
192 
194 {
197 
198  playSongClicked();
199 }
200 
202 {
203  const int index = m_ui->deviceComboBox->currentIndex();
204  if(index < 0)
205  {
206  return nullptr;
207  }
208 
209  return m_dlnaFinder->client(index);
210 }
void setBackgroundLabel(QLabel *label)
QString localAddress(const QString &prefix) const
PlayState
Definition: musicobject.h:166
bool remove(int instance=0) const
QString path() const noexcept
Definition: musicsong.h:90
bool pause(int instance=0) const
voidpf void uLong size
Definition: ioapi.h:136
The class of the dlna client.
Definition: qdlnaclient.h:29
The class of the dlna finder.
Definition: qdlnafinder.h:31
Ui::MusicSongDlnaTransferWidget * m_ui
QStringList clientNames() const
static void popup(const QString &text)
QDlnaClient * client(int index) const
Definition: qdlnafinder.cpp:85
void setPrefixPath(const QString &path)
const char * name
Definition: http_parser.c:458
bool play(int instance=0) const
#define TTKRemoveSingleWidget(name)
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:68
The namespace of the process utils.
Definition: ttkcompat.h:24
The class of the song dlna transfer widget.
static const QString BackgroundStyle01
Background.
Definition: musicuiobject.h:77
bool position(qint64 &position, qint64 &duration, int instance=0) const
The class of the dlna file server.
static MusicSongsContainerWidget * instance()
void querySongItemList(MusicSongItemList &songs)
bool open(const QString &url) const
static const QString ToolButtonStyle04
QString server() const
bool stop(int instance=0) const
MusicSongDlnaTransferWidget(QWidget *parent=nullptr)
The class of the music song info.
Definition: musicsong.h:28
The class of the moving widget base.
static const QString ComboBoxStyle02