TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musictkplconfigmanager.cpp
Go to the documentation of this file.
2 
6 {
7 
8 }
9 
10 bool MusicTKPLConfigManager::readBuffer(MusicSongItemList &items)
11 {
12  const QDomNodeList &nodes = m_document->elementsByTagName("musicList");
13  for(int i = 0; i < nodes.count(); ++i)
14  {
15  const QDomNode &node = nodes.item(i);
16  MusicSongItem item;
17  item.m_songs = readMusicFilePath(node);
18 
19  const QDomElement &element = node.toElement();
20  item.m_itemIndex = element.attribute("index").toInt();
21  item.m_itemName = element.attribute("name");
22 
23  const QString &string = element.attribute("sortIndex");
24  item.m_sort.m_type = string.isEmpty() ? -1 : string.toInt();
25  item.m_sort.m_order = TTKStaticCast(Qt::SortOrder, element.attribute("sortType").toInt());
26  items << item;
27  }
28  return true;
29 }
30 
31 bool MusicTKPLConfigManager::writeBuffer(const MusicSongItemList &items)
32 {
33  if(items.isEmpty())
34  {
35  return false;
36  }
37 
39  QDomElement rootDom = createRoot(TTK_APP_NAME);
40 
41  for(int i = 0; i < items.count(); ++i)
42  {
43  const MusicSongItem &item = items[i];
44  QDomElement pathDom = writeDomMultiElement(rootDom, "musicList", {{"name", item.m_itemName},
45  {"index", i},
46  {"count", item.m_songs.count()},
47  {"sortIndex", item.m_sort.m_type},
48  {"sortType", item.m_sort.m_order}});
49  for(const MusicSong &song : qAsConst(item.m_songs))
50  {
51  QString duration = song.duration();
52  if(item.m_itemIndex == MUSIC_NETWORK_LIST && duration == TTK_DEFAULT_STR)
53  {
54  duration = TTK::generateNetworkSongTime(song.path());
55  }
56 
57  writeDomMultiElement(pathDom, "value", {{"name", song.name()},
58  {"playCount", song.playCount()},
59  {"time", duration}}, song.path());
60  }
61  }
62 
63  save();
64  return true;
65 }
66 
67 MusicSongList MusicTKPLConfigManager::readMusicFilePath(const QDomNode &node) const
68 {
69  const QDomNodeList &nodes = node.childNodes();
70 
71  MusicSongList songs;
72  for(int i = 0; i < nodes.count(); ++i)
73  {
74  const QDomElement &element = nodes.item(i).toElement();
75  MusicSong song(element.text(), element.attribute("time"), element.attribute("name"), true);
76  song.setPlayCount(element.attribute("playCount").toInt());
77  songs << song;
78  }
79  return songs;
80 }
#define TTKStaticCast(x, y)
Definition: ttkglobal.h:159
The class of the ttk xml interface.
QDomDocument * m_document
#define TTK_DEFAULT_STR
Definition: ttkglobal.h:200
#define TTK_APP_NAME
Definition: ttkobject.h:25
QDomElement writeDomMultiElement(QDomElement &element, const QString &node, const TTKXmlNode &attrs) const
virtual bool readBuffer(MusicSongItemList &items) overridefinal
void createProcessingInstruction() const
QDomElement createRoot(const QString &node) const
#define qAsConst
Definition: ttkqtglobal.h:53
TTK_MODULE_EXPORT QString generateNetworkSongTime(const QString &path)
Definition: musicsong.cpp:176
The class of the read write interface.
The class of the music song item.
Definition: musicsong.h:161
MusicSongList m_songs
Definition: musicsong.h:166
#define MUSIC_NETWORK_LIST
void save() const
void setPlayCount(const int c) noexcept
Definition: musicsong.h:114
QString m_itemName
Definition: musicsong.h:164
The class of the music song info.
Definition: musicsong.h:28
Qt::SortOrder m_order
Definition: musicsong.h:145
MusicSongSort m_sort
Definition: musicsong.h:165
MusicSongList readMusicFilePath(const QDomNode &node) const
virtual bool writeBuffer(const MusicSongItemList &items) overridefinal