TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicxspfconfigmanager.cpp
Go to the documentation of this file.
2 
6 {
7 
8 }
9 
10 bool MusicXSPFConfigManager::readBuffer(MusicSongItemList &items)
11 {
12  TTKXmlHelper helper(m_document->documentElement());
13  helper.load();
14 
15  MusicSongItem item;
16  item.m_itemName = QFileInfo(m_file->fileName()).baseName();
17 
18  const QDomNodeList &nodes = m_document->elementsByTagName(helper.nodeName("trackList"));
19  for(int i = 0; i < nodes.count(); ++i)
20  {
21  const QDomNodeList &trackNodes = nodes.item(i).childNodes();
22  for(int i = 0; i < trackNodes.count(); ++i)
23  {
24  const QDomNodeList &trackChildNodes = trackNodes.item(i).childNodes();
25 
26  QString duration, path;
27  for(int i = 0; i < trackChildNodes.count(); ++i)
28  {
29  const QDomElement &element = trackChildNodes.item(i).toElement();
30  const QString &name = element.nodeName().toLower();
31 
32  if(name == "location")
33  {
34  path = element.text();
35  path.remove("file://");
36  }
37  else if(name == "length" || name == "duration")
38  {
39  duration = element.text();
40  }
41  }
42 
43  if(!path.isEmpty())
44  {
45  item.m_songs << MusicSong(path, duration);
46  }
47  }
48  }
49 
50  if(!item.m_songs.isEmpty())
51  {
52  items << item;
53  }
54  return true;
55 }
56 
57 bool MusicXSPFConfigManager::writeBuffer(const MusicSongItemList &items)
58 {
59  if(items.isEmpty())
60  {
61  return false;
62  }
63 
65  QDomElement rootDom = createRoot("playlist", {{"version", "1"}, {"xmlns", "http://xspf.org/ns/0/"}});
66  writeDomElement(rootDom, "creator", TTK_APP_NAME);
67 
68  for(int i = 0; i < items.count(); ++i)
69  {
70  QDomElement trackListDom = writeDomElement(rootDom, "trackList");
71  for(const MusicSong &song : qAsConst(items[i].m_songs))
72  {
73  QDomElement trackDom = writeDomElement(trackListDom, "track");
74 
75  writeDomElement(trackDom, "location", song.path());
76  writeDomElement(trackDom, "title", song.title());
77  writeDomElement(trackDom, "creator", song.artist());
78  writeDomElement(trackDom, "duration", song.duration());
79  writeDomElement(trackDom, "annotation", QString());
80  writeDomElement(trackDom, "album", QString());
81  writeDomElement(trackDom, "trackNum", QString());
82  writeDomElement(trackDom, "meta", {"rel", "year"}, {});
83  }
84  }
85 
86  save();
87  return true;
88 }
The class of the ttk xml interface.
QDomDocument * m_document
#define TTK_APP_NAME
Definition: ttkobject.h:25
QDomElement writeDomElement(QDomElement &element, const QString &node) const
void createProcessingInstruction() const
QDomElement createRoot(const QString &node) const
#define qAsConst
Definition: ttkqtglobal.h:53
const char * name
Definition: http_parser.c:458
The class of the ttk xml hepler.
virtual bool readBuffer(MusicSongItemList &items) overridefinal
The class of the read write interface.
The class of the music song item.
Definition: musicsong.h:161
virtual bool writeBuffer(const MusicSongItemList &items) overridefinal
MusicSongList m_songs
Definition: musicsong.h:166
void save() const
QString m_itemName
Definition: musicsong.h:164
The class of the music song info.
Definition: musicsong.h:28