TTKMusicPlayer  4.1.3.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  bool ok = false;
24  item.m_id = element.attribute("id").toInt(&ok);
25  if(!ok)
26  {
27  item.m_id = item.m_itemIndex;
28  }
29 
30  const QString &string = element.attribute("sortIndex");
31  item.m_sort.m_type = string.isEmpty() ? -1 : string.toInt();
32  item.m_sort.m_order = TTKStaticCast(Qt::SortOrder, element.attribute("sortType").toInt());
33  items << item;
34  }
35  return true;
36 }
37 
38 bool MusicTKPLConfigManager::writeBuffer(const MusicSongItemList &items)
39 {
40  if(items.isEmpty())
41  {
42  return false;
43  }
44 
46  QDomElement rootDom = createRoot(TTK_APP_NAME);
47 
48  for(int i = 0; i < items.count(); ++i)
49  {
50  const MusicSongItem &item = items[i];
51  QDomElement pathDom = writeDomMultiElement(rootDom, "musicList", {{"index", i},
52  {"id", item.m_id},
53  {"name", item.m_itemName},
54  {"count", item.m_songs.count()},
55  {"sortIndex", item.m_sort.m_type},
56  {"sortType", item.m_sort.m_order}});
57  for(const MusicSong &song : qAsConst(item.m_songs))
58  {
59  QString duration = song.duration();
60  if(item.m_itemIndex == MUSIC_NETWORK_LIST && duration == TTK_DEFAULT_STR)
61  {
62  duration = TTK::generateNetworkSongTime(song.path());
63  }
64 
65  writeDomMultiElement(pathDom, "value", {{"name", song.name()},
66  {"playCount", song.playCount()},
67  {"time", duration}}, song.path());
68  }
69  }
70 
71  save();
72  return true;
73 }
74 
75 MusicSongList MusicTKPLConfigManager::readMusicFilePath(const QDomNode &node) const
76 {
77  const QDomNodeList &nodes = node.childNodes();
78 
79  MusicSongList songs;
80  for(int i = 0; i < nodes.count(); ++i)
81  {
82  const QDomElement &element = nodes.item(i).toElement();
83  MusicSong song(element.text(), element.attribute("time"), element.attribute("name"), true);
84  song.setPlayCount(element.attribute("playCount").toInt());
85  songs << song;
86  }
87  return songs;
88 }
#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:203
#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:51
TTK_MODULE_EXPORT QString generateNetworkSongTime(const QString &path)
Definition: musicsong.cpp:169
The class of the read write interface.
The class of the music song item.
Definition: musicsong.h:161
MusicSongList m_songs
Definition: musicsong.h:167
#define MUSIC_NETWORK_LIST
void save() const
void setPlayCount(const int c) noexcept
Definition: musicsong.h:114
QString m_itemName
Definition: musicsong.h:165
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:166
MusicSongList readMusicFilePath(const QDomNode &node) const
virtual bool writeBuffer(const MusicSongItemList &items) overridefinal