File indexing completed on 2024-04-21 04:53: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_opml.h"
0011 #include "expression.h"
0012 
0013 using namespace KMPlayer;
0014 
0015 
0016 Node *OPML::Opml::childFromTag (const QString & tag)
0017 {
0018     QByteArray ba = tag.toLatin1 ();
0019     const char *name = ba.constData ();
0020     if (!strcasecmp (name, "head"))
0021         return new Head (m_doc);
0022     else if (!strcasecmp (name, "body"))
0023         return new Body (m_doc);
0024     return nullptr;
0025 }
0026 
0027 void OPML::Opml::closed ()
0028 {
0029     Expression *expr = evaluateExpr ("/head/title");
0030     if (expr) {
0031         expr->setRoot (this);
0032         title = expr->toString ();
0033         delete expr;
0034     }
0035     Element::closed ();
0036 }
0037 
0038 void *OPML::Opml::role (RoleType msg, void *content)
0039 {
0040     if (RolePlaylist == msg)
0041         return !title.isEmpty () ? (PlaylistRole *) this : nullptr;
0042     return Element::role (msg, content);
0043 }
0044 
0045 //--------------------------%<-------------------------------------------------
0046 
0047 Node *OPML::Head::childFromTag (const QString & tag)
0048 {
0049     QByteArray ba = tag.toLatin1 ();
0050     const char *name = ba.constData ();
0051     if (!strcasecmp (name, "title"))
0052         return new DarkNode (m_doc, name, id_node_title);
0053     else if (!strcasecmp (name, "dateCreated"))
0054         return new DarkNode (m_doc, name, id_node_ignore);
0055     return nullptr;
0056 }
0057 
0058 //--------------------------%<-------------------------------------------------
0059 
0060 Node *OPML::Body::childFromTag (const QString & tag)
0061 {
0062     QByteArray ba = tag.toLatin1 ();
0063     const char *name = ba.constData ();
0064     if (!strcasecmp (name, "outline"))
0065         return new Outline (m_doc);
0066     return nullptr;
0067 }
0068 
0069 //--------------------------%<-------------------------------------------------
0070 
0071 void OPML::Outline::closed ()
0072 {
0073     src = getAttribute ("xmlUrl").trimmed ();
0074     title = getAttribute ("title").trimmed ();
0075     Mrl::closed ();
0076 }