[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kmplayer/0.11] src: Fix SMIL intro for RSS media:group if title/image/descr only in item
From:       Koos Vriezen <koos.vriezen () gmail ! com>
Date:       2016-07-02 18:59:33
Message-ID: E1bJQ8b-00089Z-T2 () code ! kde ! org
[Download RAW message or body]

Git commit 0e91b341d277d91c659512d212f521363f04613d by Koos Vriezen.
Committed on 02/07/2016 at 18:57.
Pushed by vriezen into branch '0.11'.

Fix SMIL intro for RSS media:group if title/image/descr only in item

Also noted that instead of fileSize, bitrate could be given. Link I
tried was
http://www.arte.tv/papi/tvguide-flow/feeds/videos/de.xml?type=ARTE_PLUS_SEVEN

M  +31   -10   src/kmplayer_atom.cpp
M  +2    -1    src/kmplayer_atom.h
M  +10   -1    src/kmplayer_rss.cpp
M  +2    -1    src/kmplayer_rss.h

http://commits.kde.org/kmplayer/0e91b341d277d91c659512d212f521363f04613d

diff --git a/src/kmplayer_atom.cpp b/src/kmplayer_atom.cpp
index 7d62240..1e398fc 100644
--- a/src/kmplayer_atom.cpp
+++ b/src/kmplayer_atom.cpp
@@ -90,7 +90,7 @@ void ATOM::Entry::closed () {
             group = static_cast <MediaGroup *> (c);
         }
     if (group)
-        group->addSummary (this, rating);
+        group->addSummary (this, rating, QString(), QString(), QString(), 0, 0);
     Element::closed ();
 }
 
@@ -194,8 +194,18 @@ static QString makeStar (int x, bool fill) {
     return path;
 }
 
+static QString makeImage(const QString& url, int width, int height) {
+    QString str = QString ("<img region=\"image\" src=\"") + url + QChar ('"');
+    if (width && height) {
+        str += QString(" width=\"%1\" height=\"%2\"").arg(width).arg(height);
+    }
+    str += QString (" dur=\"20\" transIn=\"fade\" fill=\"transition\" \
fit=\"meet\"/>"); +    return str;
+}
+
 //http://code.google.com/apis/youtube/2.0/developers_guide_protocol.html
-void ATOM::MediaGroup::addSummary (Node *p, Node *rating_node) {
+void ATOM::MediaGroup::addSummary(Node *p, Node *rating_node,
+        const QString& alt_title, const QString& alt_desc, const QString& alt_img, \
int width, int height) {  QString images;
     QString desc;
     QString title;
@@ -230,20 +240,22 @@ void ATOM::MediaGroup::addSummary (Node *p, Node *rating_node) \
{  Element *e = static_cast <Element *> (c);
             QString url = e->getAttribute (Ids::attr_url);
             if (!url.isEmpty ()) {
-                images += QString ("<img region=\"image\" src=\"") + url + QChar \
                ('"');
-                QString w = e->getAttribute (Ids::attr_width);
-                if (!w.isEmpty ())
-                    images += QString (" width=\"") + w + QChar ('"');
-                QString h = e->getAttribute (Ids::attr_height);
-                if (!h.isEmpty ())
-                    images += QString (" height=\"") + h + QChar ('"');
-                images += QString (" dur=\"20\" transIn=\"fade\" fill=\"transition\" \
fit=\"meet\"/>"); +                images += makeImage(url, e->getAttribute \
(Ids::attr_width).toInt(), +                                         e->getAttribute \
(Ids::attr_height).toInt());  img_count++;
             }
             break;
         }
         }
     }
+    if (title.isEmpty())
+        title = alt_title;
+    if (desc.isEmpty())
+        desc = alt_desc;
+    if (!img_count && !alt_img.isEmpty()) {
+        images = makeImage(alt_img, width, height);
+        ++img_count;
+    }
     if (img_count) {
         QString buf;
         QTextStream out (&buf, QIODevice::WriteOnly);
@@ -290,7 +302,9 @@ void ATOM::MediaGroup::addSummary (Node *p, Node *rating_node) {
 
 void ATOM::MediaContent::closed () {
     unsigned fsize = 0;
+    unsigned bitrate = 0;
     TrieString fs ("fileSize");
+    TrieString rate ("bitrate");
     for (Attribute *a = attributes ().first (); a; a = a->nextSibling ()) {
         if (a->name () == Ids::attr_url)
             src = a->value();
@@ -304,6 +318,8 @@ void ATOM::MediaContent::closed () {
             size.width = a->value ().toInt ();
         else if (a->name () == fs)
             fsize = a->value ().toInt ();
+        else if (a->name () == rate)
+            bitrate = a->value ().toInt ();
     }
     if (!mimetype.isEmpty ()) {
         title = mimetype;
@@ -312,6 +328,11 @@ void ATOM::MediaContent::closed () {
                 title += QString (" (%1 Mb)").arg (fsize / (1024 * 1024));
             else
                 title += QString (" (%1 kb)").arg (fsize / 1024);
+        } else if (bitrate > 0) {
+            if (bitrate > 10 * 1024)
+                title += QString(" (%1 Mbit/s)").arg(bitrate / 1024);
+            else
+                title += QString(" (%1 kbit/s)").arg(bitrate);
         }
     }
     Mrl::closed ();
diff --git a/src/kmplayer_atom.h b/src/kmplayer_atom.h
index 2488f2f..6ec41fe 100644
--- a/src/kmplayer_atom.h
+++ b/src/kmplayer_atom.h
@@ -87,7 +87,8 @@ public:
     Node *childFromTag (const QString &tag);
     void message (MessageType msg, void *content=NULL);
     KDE_NO_EXPORT const char *nodeName () const { return "media:group"; }
-    void addSummary (Node *parent, Node *ratings);
+    void addSummary (Node *parent, Node *ratings, const QString& alt_title, const \
QString& alt_desc, +                     const QString& alt_img, int width, int \
height);  };
 
 class KMPLAYER_NO_EXPORT MediaContent : public Mrl {
diff --git a/src/kmplayer_rss.cpp b/src/kmplayer_rss.cpp
index 91b2ef9..bab35f8 100644
--- a/src/kmplayer_rss.cpp
+++ b/src/kmplayer_rss.cpp
@@ -79,6 +79,8 @@ KDE_NO_EXPORT Node *RSS::Item::childFromTag (const QString & tag) {
         return new DarkNode (m_doc, ctag, id_node_category);
     else if (!strcmp (ctag, "media:group"))
         return new ATOM::MediaGroup (m_doc);
+    else if (!strcmp (ctag, "media:thumbnail"))
+        return new DarkNode (m_doc, ctag, id_node_thumbnail);
     else if (!strncmp (ctag, "itunes", 6) ||
             !strncmp (ctag, "feedburner", 10) ||
             !strcmp (ctag, "link") ||
@@ -94,6 +96,8 @@ KDE_NO_EXPORT void RSS::Item::closed () {
         ATOM::MediaGroup *group = NULL;
         Enclosure *enclosure = NULL;
         QString description;
+        QString thumbnail;
+        int width = 0, height = 0;
         for (Node *c = firstChild (); c; c = c->nextSibling ()) {
             switch (c->id) {
                 case id_node_title:
@@ -108,10 +112,15 @@ KDE_NO_EXPORT void RSS::Item::closed () {
                 case ATOM::id_node_media_group:
                     group = static_cast <ATOM::MediaGroup *> (c);
                     break;
+                case id_node_thumbnail:
+                    thumbnail = \
static_cast<Element*>(c)->getAttribute(Ids::attr_url); +                    width = \
static_cast<Element*>(c)->getAttribute(Ids::attr_width).toInt(); +                    \
height = static_cast<Element*>(c)->getAttribute(Ids::attr_height).toInt(); +          \
break;  }
         }
         if (group)
-            group->addSummary (this, NULL);
+            group->addSummary (this, NULL, title, description, thumbnail, width, \
height);  if (enclosure) {
             enclosure->setCaption (title);
             enclosure->description = description;
diff --git a/src/kmplayer_rss.h b/src/kmplayer_rss.h
index cf0da52..4ad2b39 100644
--- a/src/kmplayer_rss.h
+++ b/src/kmplayer_rss.h
@@ -36,7 +36,8 @@ const short id_node_title = 203;
 const short id_node_description = 204;
 const short id_node_enclosure = 205;
 const short id_node_category = 206;
-const short id_node_ignored = 207;
+const short id_node_thumbnail = 207;
+const short id_node_ignored = 208;
 
 /**
  * '<RSS>' tag


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic