File indexing completed on 2024-04-14 04:48:59
0001 /* 0002 SPDX-FileCopyrightText: 2006 Koos Vriezen <koos.vriezen@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-only 0005 */ 0006 0007 #include "config-kmplayer.h" 0008 0009 #include "kmplayercommon_log.h" 0010 #include "kmplayer_xspf.h" 0011 0012 using namespace KMPlayer; 0013 0014 0015 Node *XSPF::Playlist::childFromTag (const QString & tag) { 0016 QByteArray ba = tag.toLatin1(); 0017 const char * name = ba.constData (); 0018 if (!strcasecmp (name, "tracklist")) 0019 return new Tracklist (m_doc); 0020 else if (!strcasecmp (name, "creator")) 0021 return new DarkNode (m_doc, name, id_node_creator); 0022 else if (!strcasecmp (name, "title")) 0023 return new DarkNode (m_doc, name, id_node_title); 0024 else if (!strcasecmp (name, "annotation")) 0025 return new DarkNode (m_doc, name, id_node_annotation); 0026 else if (!strcasecmp (name, "info")) 0027 return new DarkNode (m_doc, name, id_node_info); 0028 else if (!strcasecmp (name, "location")) 0029 return new DarkNode (m_doc, name, id_node_location); 0030 else if (!strcasecmp (name, "identifier")) 0031 return new DarkNode (m_doc, name, id_node_identifier); 0032 else if (!strcasecmp (name, "image")) 0033 return new DarkNode (m_doc, name, id_node_image); 0034 else if (!strcasecmp (name, "date")) 0035 return new DarkNode (m_doc, name, id_node_date); 0036 else if (!strcasecmp (name, "license")) 0037 return new DarkNode (m_doc, name, id_node_license); 0038 else if (!strcasecmp (name, "attribution")) 0039 return new DarkNode (m_doc, name, id_node_attribution); 0040 else if (!strcasecmp (name, "link")) 0041 return new DarkNode (m_doc, name, id_node_link); 0042 else if (!strcasecmp (name, "meta")) 0043 return new DarkNode (m_doc, name, id_node_meta); 0044 else if (!strcasecmp (name, "extension")) 0045 return new DarkNode (m_doc, name, id_node_extension); 0046 return nullptr; 0047 } 0048 0049 void XSPF::Playlist::closed () { 0050 for (Node *e = firstChild (); e; e = e->nextSibling ()) { 0051 if (e->id == id_node_title) 0052 title = e->innerText ().simplified (); 0053 else if (e->id == id_node_location) 0054 src = e->innerText ().trimmed (); 0055 } 0056 Mrl::closed (); 0057 } 0058 0059 void *XSPF::Playlist::role (RoleType msg, void *content) 0060 { 0061 if (RolePlaylist == msg) 0062 return !title.isEmpty () ? (PlaylistRole *) this : nullptr; 0063 return Mrl::role (msg, content); 0064 } 0065 0066 //----------------------------------------------------------------------------- 0067 0068 Node *XSPF::Tracklist::childFromTag (const QString & tag) { 0069 QByteArray ba = tag.toLatin1 (); 0070 const char *name = ba.constData (); 0071 if (!strcasecmp (name, "track")) 0072 return new XSPF::Track (m_doc); 0073 return nullptr; 0074 } 0075 0076 //----------------------------------------------------------------------------- 0077 0078 Node *XSPF::Track::childFromTag (const QString & tag) { 0079 QByteArray ba = tag.toLatin1 (); 0080 const char *name = ba.constData (); 0081 if (!strcasecmp (name, "location")) 0082 return new Location (m_doc); 0083 else if (!strcasecmp (name, "creator")) 0084 return new DarkNode (m_doc, name, id_node_creator); 0085 else if (!strcasecmp (name, "title")) 0086 return new DarkNode (m_doc, name, id_node_title); 0087 else if (!strcasecmp (name, "annotation")) 0088 return new DarkNode (m_doc, name, id_node_annotation); 0089 else if (!strcasecmp (name, "info")) 0090 return new DarkNode (m_doc, name, id_node_info); 0091 else if (!strcasecmp (name, "identifier")) 0092 return new DarkNode (m_doc, name, id_node_identifier); 0093 else if (!strcasecmp (name, "album")) 0094 return new DarkNode (m_doc, name, id_node_album); 0095 else if (!strcasecmp (name, "image")) 0096 return new DarkNode (m_doc, name, id_node_image); 0097 else if (!strcasecmp (name, "trackNum")) 0098 return new DarkNode (m_doc, name, id_node_tracknum); 0099 else if (!strcasecmp (name, "duration")) 0100 return new DarkNode (m_doc, name, id_node_duration); 0101 else if (!strcasecmp (name, "link")) 0102 return new DarkNode (m_doc, name, id_node_link); 0103 else if (!strcasecmp (name, "meta")) 0104 return new DarkNode (m_doc, name, id_node_meta); 0105 else if (!strcasecmp (name, "extension")) 0106 return new DarkNode (m_doc, name, id_node_extension); 0107 return nullptr; 0108 } 0109 0110 void XSPF::Track::closed () { 0111 Location *location = nullptr; 0112 QString title; 0113 for (Node *e = firstChild (); e; e = e->nextSibling ()) { 0114 switch (e->id) { 0115 case id_node_title: 0116 title = e->innerText (); 0117 break; 0118 case id_node_location: 0119 location = static_cast <Location *> (e); 0120 break; 0121 } 0122 } 0123 if (location && !title.isEmpty ()) 0124 location->setCaption (title); 0125 Element::closed (); 0126 } 0127 0128 void XSPF::Track::activate () { 0129 for (Node *e = firstChild (); e; e = e->nextSibling ()) 0130 if (e->id == id_node_annotation) { 0131 QString inf = e->innerText ().trimmed (); 0132 document ()->message (MsgInfoString, &inf); 0133 break; 0134 } 0135 Element::activate (); 0136 } 0137 0138 void XSPF::Location::closed () { 0139 src = innerText ().trimmed (); 0140 Mrl::closed (); 0141 }