File indexing completed on 2024-04-21 15:38:14
0001 /** 0002 * Copyright (C) 2006 by Koos Vriezen <koos.vriezen@gmail.com> 0003 * 0004 * This library is free software; you can redistribute it and/or 0005 * modify it under the terms of the GNU Library General Public 0006 * License version 2 as published by the Free Software Foundation. 0007 * 0008 * This library is distributed in the hope that it will be useful, 0009 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0011 * Library General Public License for more details. 0012 * 0013 * You should have received a copy of the GNU Library General Public License 0014 * along with this library; see the file COPYING.LIB. If not, write to 0015 * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor, 0016 * Boston, MA 02110-1301, USA. 0017 **/ 0018 0019 #include "config-kmplayer.h" 0020 #include <kdebug.h> 0021 0022 #include "kmplayer_xspf.h" 0023 0024 using namespace KMPlayer; 0025 0026 0027 KDE_NO_EXPORT Node *XSPF::Playlist::childFromTag (const QString & tag) { 0028 QByteArray ba = tag.toLatin1(); 0029 const char * name = ba.constData (); 0030 if (!strcasecmp (name, "tracklist")) 0031 return new Tracklist (m_doc); 0032 else if (!strcasecmp (name, "creator")) 0033 return new DarkNode (m_doc, name, id_node_creator); 0034 else if (!strcasecmp (name, "title")) 0035 return new DarkNode (m_doc, name, id_node_title); 0036 else if (!strcasecmp (name, "annotation")) 0037 return new DarkNode (m_doc, name, id_node_annotation); 0038 else if (!strcasecmp (name, "info")) 0039 return new DarkNode (m_doc, name, id_node_info); 0040 else if (!strcasecmp (name, "location")) 0041 return new DarkNode (m_doc, name, id_node_location); 0042 else if (!strcasecmp (name, "identifier")) 0043 return new DarkNode (m_doc, name, id_node_identifier); 0044 else if (!strcasecmp (name, "image")) 0045 return new DarkNode (m_doc, name, id_node_image); 0046 else if (!strcasecmp (name, "date")) 0047 return new DarkNode (m_doc, name, id_node_date); 0048 else if (!strcasecmp (name, "license")) 0049 return new DarkNode (m_doc, name, id_node_license); 0050 else if (!strcasecmp (name, "attribution")) 0051 return new DarkNode (m_doc, name, id_node_attribution); 0052 else if (!strcasecmp (name, "link")) 0053 return new DarkNode (m_doc, name, id_node_link); 0054 else if (!strcasecmp (name, "meta")) 0055 return new DarkNode (m_doc, name, id_node_meta); 0056 else if (!strcasecmp (name, "extension")) 0057 return new DarkNode (m_doc, name, id_node_extension); 0058 return 0L; 0059 } 0060 0061 KDE_NO_EXPORT void XSPF::Playlist::closed () { 0062 for (Node *e = firstChild (); e; e = e->nextSibling ()) { 0063 if (e->id == id_node_title) 0064 title = e->innerText ().simplified (); 0065 else if (e->id == id_node_location) 0066 src = e->innerText ().trimmed (); 0067 } 0068 Mrl::closed (); 0069 } 0070 0071 void *XSPF::Playlist::role (RoleType msg, void *content) 0072 { 0073 if (RolePlaylist == msg) 0074 return !title.isEmpty () ? (PlaylistRole *) this : NULL; 0075 return Mrl::role (msg, content); 0076 } 0077 0078 //----------------------------------------------------------------------------- 0079 0080 KDE_NO_EXPORT Node *XSPF::Tracklist::childFromTag (const QString & tag) { 0081 QByteArray ba = tag.toLatin1 (); 0082 const char *name = ba.constData (); 0083 if (!strcasecmp (name, "track")) 0084 return new XSPF::Track (m_doc); 0085 return 0L; 0086 } 0087 0088 //----------------------------------------------------------------------------- 0089 0090 KDE_NO_EXPORT Node *XSPF::Track::childFromTag (const QString & tag) { 0091 QByteArray ba = tag.toLatin1 (); 0092 const char *name = ba.constData (); 0093 if (!strcasecmp (name, "location")) 0094 return new Location (m_doc); 0095 else if (!strcasecmp (name, "creator")) 0096 return new DarkNode (m_doc, name, id_node_creator); 0097 else if (!strcasecmp (name, "title")) 0098 return new DarkNode (m_doc, name, id_node_title); 0099 else if (!strcasecmp (name, "annotation")) 0100 return new DarkNode (m_doc, name, id_node_annotation); 0101 else if (!strcasecmp (name, "info")) 0102 return new DarkNode (m_doc, name, id_node_info); 0103 else if (!strcasecmp (name, "identifier")) 0104 return new DarkNode (m_doc, name, id_node_identifier); 0105 else if (!strcasecmp (name, "album")) 0106 return new DarkNode (m_doc, name, id_node_album); 0107 else if (!strcasecmp (name, "image")) 0108 return new DarkNode (m_doc, name, id_node_image); 0109 else if (!strcasecmp (name, "trackNum")) 0110 return new DarkNode (m_doc, name, id_node_tracknum); 0111 else if (!strcasecmp (name, "duration")) 0112 return new DarkNode (m_doc, name, id_node_duration); 0113 else if (!strcasecmp (name, "link")) 0114 return new DarkNode (m_doc, name, id_node_link); 0115 else if (!strcasecmp (name, "meta")) 0116 return new DarkNode (m_doc, name, id_node_meta); 0117 else if (!strcasecmp (name, "extension")) 0118 return new DarkNode (m_doc, name, id_node_extension); 0119 return 0L; 0120 } 0121 0122 KDE_NO_EXPORT void XSPF::Track::closed () { 0123 Location *location = NULL; 0124 QString title; 0125 for (Node *e = firstChild (); e; e = e->nextSibling ()) { 0126 switch (e->id) { 0127 case id_node_title: 0128 title = e->innerText (); 0129 break; 0130 case id_node_location: 0131 location = static_cast <Location *> (e); 0132 break; 0133 } 0134 } 0135 if (location && !title.isEmpty ()) 0136 location->setCaption (title); 0137 Element::closed (); 0138 } 0139 0140 KDE_NO_EXPORT void XSPF::Track::activate () { 0141 for (Node *e = firstChild (); e; e = e->nextSibling ()) 0142 if (e->id == id_node_annotation) { 0143 QString inf = e->innerText ().trimmed (); 0144 document ()->message (MsgInfoString, &inf); 0145 break; 0146 } 0147 Element::activate (); 0148 } 0149 0150 void XSPF::Location::closed () { 0151 src = innerText ().trimmed (); 0152 Mrl::closed (); 0153 }