[vlc-commits] Qt: EPG: remove overlapped entries.

Francois Cartegnie git at videolan.org
Wed Mar 23 22:10:57 CET 2011


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Mar 23 18:13:03 2011 +0100| [a145b0c4b33c84ff1948e2e258838c8aef54eb6a] | committer: Francois Cartegnie

Qt: EPG: remove overlapped entries.

EPG entries can have varying start or end time.
More efficient than looking for non-updated items.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a145b0c4b33c84ff1948e2e258838c8aef54eb6a
---

 modules/gui/qt4/components/epg/EPGView.cpp |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/modules/gui/qt4/components/epg/EPGView.cpp b/modules/gui/qt4/components/epg/EPGView.cpp
index 98738c8..10d58c1 100644
--- a/modules/gui/qt4/components/epg/EPGView.cpp
+++ b/modules/gui/qt4/components/epg/EPGView.cpp
@@ -89,6 +89,26 @@ const QDateTime& EPGView::baseTime()
     return m_baseTime;
 }
 
+static void cleanOverlapped( EPGEventByTimeQMap *epgItemByTime, EPGItem *epgItem, QGraphicsScene *scene )
+{
+    /* Clean overlapped programs */
+    foreach(const QDateTime existingTimes, epgItemByTime->keys())
+    {
+        if ( existingTimes != epgItem->start() )
+        {
+            EPGItem *otherEPGItem = epgItemByTime->value( existingTimes );
+            if ( otherEPGItem->playsAt( epgItem->start().addSecs( 1 ) )
+                || /* add/minus one sec because next one can start at prev end min */
+                 otherEPGItem->playsAt( epgItem->end().addSecs( -1 ) ) )
+            {
+                epgItemByTime->remove( otherEPGItem->start() );
+                scene->removeItem( otherEPGItem );
+                delete otherEPGItem;
+            }
+        }
+    }
+}
+
 bool EPGView::addEPGEvent( vlc_epg_event_t *data, QString channelName, bool b_current )
 {
     /* Init our nested map if required */
@@ -120,11 +140,13 @@ bool EPGView::addEPGEvent( vlc_epg_event_t *data, QString channelName, bool b_cu
         epgItem = epgItemByTime->value( eventStart );
         epgItem->setData( data ); /* updates our entry */
         epgItem->setCurrent( b_current );
+        cleanOverlapped( epgItemByTime, epgItem, scene() );
         mutex.unlock();
         return false;
     } else {
         /* Insert a new program entry */
         epgItem = new EPGItem( data, this );
+        cleanOverlapped( epgItemByTime, epgItem, scene() );
         /* Effectively insert our new program */
         epgItem->setCurrent( b_current );
         epgItemByTime->insert( eventStart, epgItem );



More information about the vlc-commits mailing list