[SCM] bangarang packaging branch, master, updated. debian/1.0.1-1-10-g2bd7358

Ryan Kavanagh ryanakca-guest at alioth.debian.org
Fri Feb 4 02:41:07 UTC 2011


The following commit has been merged in the master branch:
commit 970bd7710c18572861f936f90c4ad7c9caead90c
Merge: fdf550e06027ead5bbd958a3b988e1a9f05c38b6 1d9bce4c2b6ce5b5d10876807b94b79da0dddc78
Author: Ryan Kavanagh <ryanakca at kubuntu.org>
Date:   Thu Feb 3 12:50:58 2011 -0500

    Merge branch 'upstream'
    
    Conflicts:
    	src/platform/dvdlistengine.cpp
    	src/platform/filelistengine.cpp
    	src/platform/listengine.cpp
    	src/platform/listenginefactory.cpp
    	src/platform/medialistsengine.cpp
    	src/platform/musiclistengine.cpp
    	src/platform/semanticslistengine.cpp
    	src/platform/utilities.cpp
    	translations/CMakeLists.txt
    	translations/bangarang.pot
    	translations/de/bangarang.po
    	translations/fr/bangarang.po
    	translations/merge.sh
    	translations/nl/bangarang.po
    	translations/zh_CN/bangarang.po

 CMakeLists.txt                                     |   44 +-
 convenience/dialog-close.png                       |  Bin 0 -> 813 bytes
 convenience/help-about.png                         |  Bin 0 -> 734 bytes
 data/bangarang.desktop                             |    4 +-
 data/bangarang.svg                                 | 1311 ++++-
 data/bangarang_play_cd.desktop                     |    2 +
 data/bangarang_play_dvd.desktop                    |    2 +
 doxyfile                                           | 1514 +++++
 icons/hi128-app-bangarang-tmdb.png                 |  Bin 0 -> 65909 bytes
 icons/hi128-app-bangarang.png                      |  Bin 24790 -> 5507 bytes
 icons/hi16-app-bangarang-lastfm.png                |  Bin 0 -> 1179 bytes
 icons/hi16-app-bangarang-tvdb.png                  |  Bin 0 -> 578 bytes
 icons/hi16-app-bangarang.png                       |  Bin 788 -> 722 bytes
 icons/hi22-actions-bangarang-clearplaylist.png     |  Bin 1297 -> 919 bytes
 icons/hi22-actions-bangarang-preview.png           |  Bin 1326 -> 959 bytes
 icons/hi22-actions-bangarang-repeat.png            |  Bin 1171 -> 771 bytes
 icons/hi22-actions-bangarang-shuffle.png           |  Bin 1393 -> 1046 bytes
 icons/hi22-app-bangarang-notifier-active-pause.png |  Bin 0 -> 734 bytes
 icons/hi22-app-bangarang-notifier-active.png       |  Bin 0 -> 758 bytes
 icons/hi22-app-bangarang-notifier.png              |  Bin 0 -> 695 bytes
 icons/hi22-app-bangarang.png                       |  Bin 1316 -> 1025 bytes
 icons/hi32-app-bangarang-notifier-active-pause.png |  Bin 0 -> 1036 bytes
 icons/hi32-app-bangarang-notifier-active.png       |  Bin 0 -> 1062 bytes
 icons/hi32-app-bangarang-notifier.png              |  Bin 0 -> 996 bytes
 icons/hi32-app-bangarang.png                       |  Bin 2093 -> 1497 bytes
 icons/hi48-app-bangarang.png                       |  Bin 4366 -> 2057 bytes
 icons/hi64-app-bangarang-dbpedia.png               |  Bin 0 -> 3904 bytes
 icons/hi64-app-bangarang.png                       |  Bin 7594 -> 2853 bytes
 icons/hi8-app-bangarang.png                        |  Bin 385 -> 362 bytes
 po/CMakeLists.txt                                  |   13 +
 po/bangarang.pot                                   | 2050 ++++++
 {translations/cz => po/cs}/CMakeLists.txt          |    0
 po/cs/bangarang.po                                 | 2461 +++++++
 po/da/CMakeLists.txt                               |    2 +
 po/da/bangarang.po                                 | 2442 +++++++
 {translations => po}/de/CMakeLists.txt             |    0
 po/de/bangarang.po                                 | 2442 +++++++
 po/es/CMakeLists.txt                               |    2 +
 po/es/bangarang.po                                 | 2411 +++++++
 po/fi/CMakeLists.txt                               |    2 +
 po/fi/bangarang.po                                 | 2383 +++++++
 {translations => po}/fr/CMakeLists.txt             |    0
 po/fr/bangarang.po                                 | 2432 +++++++
 {translations => po}/it/CMakeLists.txt             |    0
 po/it/bangarang.po                                 | 2361 +++++++
 po/lt/CMakeLists.txt                               |    2 +
 po/lt/bangarang.po                                 | 2144 ++++++
 po/merge.sh                                        |   16 +
 {translations => po}/nl/CMakeLists.txt             |    0
 po/nl/bangarang.po                                 | 2409 +++++++
 {translations => po}/pl/CMakeLists.txt             |    0
 po/pl/bangarang.po                                 | 2502 +++++++
 {translations => po}/pt_BR/CMakeLists.txt          |    0
 po/pt_BR/bangarang.po                              | 2299 +++++++
 po/uk/CMakeLists.txt                               |    2 +
 po/uk/bangarang.po                                 | 2146 ++++++
 {translations => po}/zh_CN/CMakeLists.txt          |    0
 po/zh_CN/bangarang.po                              | 2032 ++++++
 reference/README                                   |    1 +
 reference/imdbqueryengine.cpp                      |  564 ++
 reference/imdbqueryengine.h                        |  256 +
 reference/scriptconsole.cpp                        |  153 +
 reference/scriptconsole.h                          |   65 +
 src/CMakeLists.txt                                 |  138 +-
 src/Messages.sh                                    |    2 +-
 src/actionsmanager.cpp                             | 1169 +++-
 src/actionsmanager.h                               |  112 +-
 src/audiosettings.cpp                              |  320 +
 src/audiosettings.h                                |   86 +
 src/bangarangapplication.cpp                       |  424 ++
 src/bangarangapplication.h                         |   97 +
 src/bangarangnotifieritem.cpp                      |   62 +
 src/bangarangnotifieritem.h                        |   74 +
 src/bookmarksmanager.cpp                           |  232 +
 src/bookmarksmanager.h                             |   65 +
 src/config-bangarang.h.cmake                       |    1 +
 src/dbusobjects.cpp                                |  341 +
 src/dbusobjects.h                                  |  133 +
 src/infobox.cpp                                    |  159 +
 src/{mediaview.h => infobox.h}                     |   45 +-
 src/infoitemdelegate.cpp                           | 1041 +++
 src/infoitemdelegate.h                             |   82 +
 src/infoitemview.cpp                               |   67 +
 src/{platform/cachelistengine.h => infoitemview.h} |   45 +-
 src/infomanager.cpp                                | 1235 ++--
 src/infomanager.h                                  |  107 +-
 src/main.cpp                                       |   34 +-
 src/mainwindow.cpp                                 | 1477 +++--
 src/mainwindow.h                                   |  170 +-
 src/mainwindow.ui                                  | 7097 ++++++++++++++------
 src/mediaitemdelegate.cpp                          |  678 ++-
 src/mediaitemdelegate.h                            |   57 +-
 src/medialistsettings.cpp                          |  384 ++
 src/medialistsettings.h                            |   63 +
 src/mediaview.cpp                                  |  120 +-
 src/mediaview.h                                    |   23 +-
 src/nowplayingdelegate.cpp                         |  535 ++-
 src/nowplayingdelegate.h                           |   28 +-
 src/nowplayingview.cpp                             |   82 +
 src/{mediaview.h => nowplayingview.h}              |   38 +-
 src/platform/bangarangvideowidget.cpp              |  107 +
 src/platform/bangarangvideowidget.h                |   93 +
 src/platform/dbpediaquery.cpp                      |  269 +
 src/platform/dbpediaquery.h                        |   58 +
 src/platform/downloader.cpp                        |   77 +
 src/platform/downloader.h                          |   52 +
 src/platform/dvdlistengine.cpp                     |  109 -
 src/platform/filelistengine.cpp                    |  406 --
 src/platform/infofetchers/dbpediainfofetcher.cpp   |  475 ++
 src/platform/infofetchers/dbpediainfofetcher.h     |   69 +
 src/platform/infofetchers/feedinfofetcher.cpp      |  207 +
 src/platform/infofetchers/feedinfofetcher.h        |   52 +
 src/platform/infofetchers/filenameinfofetcher.cpp  |  112 +
 .../filenameinfofetcher.h}                         |   33 +-
 src/platform/infofetchers/infofetcher.cpp          |  173 +
 src/platform/infofetchers/infofetcher.h            |   99 +
 src/platform/infofetchers/lastfminfofetcher.cpp    |  524 ++
 src/platform/infofetchers/lastfminfofetcher.h      |   67 +
 src/platform/infofetchers/tmdbinfofetcher.cpp      |  540 ++
 src/platform/infofetchers/tmdbinfofetcher.h        |   65 +
 src/platform/infofetchers/tvdbinfofetcher.cpp      |  490 ++
 src/platform/infofetchers/tvdbinfofetcher.h        |   67 +
 src/platform/infoitemmodel.cpp                     | 1112 +++
 src/platform/infoitemmodel.h                       |  224 +
 src/platform/listengine.cpp                        |   75 -
 src/platform/listenginefactory.cpp                 |  316 -
 src/platform/listenginefactory.h                   |   99 -
 .../{ => listengines}/audioclipslistengine.cpp     |   27 +-
 .../{ => listengines}/audioclipslistengine.h       |    0
 .../{ => listengines}/audiostreamlistengine.cpp    |   55 +-
 .../{ => listengines}/audiostreamlistengine.h      |    0
 src/platform/{ => listengines}/cachelistengine.cpp |    9 +-
 src/platform/{ => listengines}/cachelistengine.h   |    0
 src/platform/{ => listengines}/cdlistengine.cpp    |   71 +-
 src/platform/{ => listengines}/cdlistengine.h      |    2 -
 src/platform/listengines/dvdlistengine.cpp         |   97 +
 src/platform/{ => listengines}/dvdlistengine.h     |    4 +-
 src/platform/listengines/feedlistengine.cpp        |  354 +
 .../feedlistengine.h}                              |   35 +-
 src/platform/listengines/filelistengine.cpp        |  361 +
 src/platform/{ => listengines}/filelistengine.h    |   32 +-
 src/platform/listengines/listengine.cpp            |  129 +
 src/platform/{ => listengines}/listengine.h        |   47 +-
 src/platform/listengines/listenginefactory.cpp     |  210 +
 src/platform/listengines/listenginefactory.h       |  141 +
 src/platform/listengines/medialistsengine.cpp      |  513 ++
 src/platform/{ => listengines}/medialistsengine.h  |    3 +
 src/platform/listengines/musiclistengine.cpp       |  545 ++
 src/platform/{ => listengines}/musiclistengine.h   |    1 +
 .../{ => listengines}/nepomuklistengine.cpp        |   34 +-
 src/platform/{ => listengines}/nepomuklistengine.h |    9 +-
 .../{ => listengines}/savedlistsengine.cpp         |  110 +-
 src/platform/{ => listengines}/savedlistsengine.h  |    0
 src/platform/listengines/semanticslistengine.cpp   |  368 +
 .../{ => listengines}/semanticslistengine.h        |    0
 src/platform/listengines/taglistengine.cpp         |  159 +
 .../taglistengine.h}                               |   25 +-
 src/platform/{ => listengines}/videolistengine.cpp |  737 ++-
 src/platform/{ => listengines}/videolistengine.h   |    2 +-
 src/platform/mediaindexer.cpp                      |  204 +-
 src/platform/mediaindexer.h                        |   25 +-
 src/platform/mediaitemmodel.cpp                    |  593 ++-
 src/platform/mediaitemmodel.h                      |  348 +-
 src/platform/medialistsengine.cpp                  |  242 -
 src/platform/mediaquery.cpp                        |  246 +-
 src/platform/mediaquery.h                          |  105 +-
 src/platform/mediavocabulary.cpp                   |  928 +++-
 src/platform/mediavocabulary.h                     |   99 +-
 src/platform/musiclistengine.cpp                   |  410 --
 src/platform/nepomukwriter/CMakeLists.txt          |   35 +-
 src/platform/nepomukwriter/main.cpp                |  632 +--
 src/platform/nepomukwriter/nepomukwriter.cpp       |  877 +++
 src/platform/nepomukwriter/nepomukwriter.h         |   44 +
 src/platform/ontologyupdater.cpp                   |  440 ++
 src/platform/ontologyupdater.h                     |   61 +
 src/platform/playlist.cpp                          |  696 ++-
 src/platform/playlist.h                            |  114 +-
 src/platform/semanticslistengine.cpp               |  196 -
 src/platform/utilities.cpp                         |  882 ---
 src/platform/utilities/artwork.cpp                 |  691 ++
 src/platform/utilities/artwork.h                   |   64 +
 src/platform/utilities/filetags.cpp                |  844 +++
 src/platform/{utilities.h => utilities/filetags.h} |   52 +-
 src/platform/utilities/general.cpp                 |  446 ++
 src/platform/utilities/general.h                   |   75 +
 src/platform/utilities/mediaitems.cpp              | 1485 ++++
 src/platform/utilities/mediaitems.h                |   55 +
 src/platform/utilities/thread.cpp                  |   77 +
 src/platform/utilities/thread.h                    |   48 +
 src/platform/utilities/typechecks.cpp              |  241 +
 src/platform/utilities/typechecks.h                |   55 +
 .../{cachelistengine.h => utilities/utilities.h}   |   32 +-
 src/playlistview.cpp                               |  135 +
 src/playlistview.h                                 |   58 +
 src/ratingdelegate.cpp                             |   66 +
 .../cachelistengine.h => ratingdelegate.h}         |   34 +-
 src/savedlistsmanager.cpp                          |  137 +-
 src/savedlistsmanager.h                            |   10 +-
 src/sensiblewidgets.cpp                            |   79 +-
 src/sensiblewidgets.h                              |   36 +-
 src/starrating.cpp                                 |   94 +
 src/starrating.h                                   |   86 +
 src/videosettings.cpp                              |  582 ++-
 src/videosettings.h                                |  112 +-
 translations/CMakeLists.txt                        |    8 -
 translations/bangarang.pot                         | 1106 ---
 translations/de/bangarang.po                       | 1152 ----
 translations/fr/bangarang.po                       | 1139 ----
 translations/merge.sh                              |   11 -
 translations/nl/bangarang.po                       | 1127 ----
 translations/zh_CN/bangarang.po                    | 1113 ---
 211 files changed, 66581 insertions(+), 15188 deletions(-)

diff --cc data/bangarang_play_cd.desktop
index 0b8e2f3,051d708..2fd139e
--- a/data/bangarang_play_cd.desktop
+++ b/data/bangarang_play_cd.desktop
@@@ -11,4 -11,6 +11,6 @@@ Icon=bangaran
  Name=Play CD with Bangarang
  Name[nl]=CD afspelen met Bangarang
  Name[de]=CD mit Bangarang wiedergeben
+ Name[fr]=Lire le CD avec Bangarang
  Name[zh_CN]=使用 Bangarang 播放 CD
 -Name[lt]=Groti CD su Bangarang
++Name[lt]=Groti CD su Bangarang
diff --cc src/mainwindow.h
index 10c663a,922e15a..43ac125
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@@ -37,8 -40,9 +40,9 @@@
  #include <QAction>
  #include <QDateTime>
  #include <QMainWindow>
+ #include <kross/core/action.h>
  
 -class MediaItem;
 +struct MediaItem;
  class MediaListProperties;
  class MediaItemModel;
  class MediaListCache;
diff --cc src/platform/listengines/listengine.h
index f3f3016,b904b6b..776b2a2
--- a/src/platform/listengines/listengine.h
+++ b/src/platform/listengines/listengine.h
@@@ -130,16 -131,48 +131,52 @@@ class ListEngine : public QThrea
           * @param mediaList list of MediaItems whose information should be
           *                  upated in the source.
           */
-         virtual void updateSourceInfo(QList<MediaItem> mediaList)
+         virtual void updateSourceInfo(QList<MediaItem> mediaList, bool nepomukOnly = false)
          {
              Q_UNUSED(mediaList);
+             Q_UNUSED(nepomukOnly);
          }
+ 
+         /**
+          * Stop execution at as soon as possible. Terminate after waitToTerminate millseconds.
+          */
+         void stop(unsigned long waitToTerminate = 0, bool quitEventLoop = false);
+ 
+         /**
+          * Resume execution if possible.  This only works for ListEngines designed to resume execution
+          * after stop(0, false) was called.
+          */
+         void resume();
+         
+     public Q_SLOTS:
+         virtual void downloadComplete(const KUrl &from, const KUrl &to)
+         {
+             Q_UNUSED(from);
+             Q_UNUSED(to);
+         }
+ 
+         virtual void listingComplete(const KUrl & url)
+         {
+             Q_UNUSED(url);
+         }
+ 
+     Q_SIGNALS:
+         void results(QString m_requestSignature, QList<MediaItem> mediaList, MediaListProperties m_mediaListProperties, bool done, QString m_subRequestSignature);
+         void updateMediaItems(QList<MediaItem> mediaList);
+         void updateMediaItem(MediaItem mediaItem);
+         void updateArtwork(QImage artworkImage, MediaItem mediaItem);
+         void updateMediaListPropertiesCategoryArtwork(QImage artworkImage, MediaItem mediaItem);
+         void download(const KUrl &from, const KUrl &to);
+         void listDir(const KUrl &url);
+         void updateStatus(QHash<QString, QVariant> updatedStatus);
+         void loadOtherEngine(const MediaListProperties &mediaListProperties, const QString &requestSignature, const QString &subRequestSignature);
          
 +    Q_SIGNALS:
 +        void results(QString m_requestSignature, QList<MediaItem> mediaList, MediaListProperties m_mediaListProperties, bool done, QString m_subRequestSignature);
 +        void updateMediaItems(QList<MediaItem> mediaList);
 +        
      protected:
+         ListEngineFactory * m_parent;
          MediaListProperties m_mediaListProperties;
          QString m_requestSignature;
          QString m_subRequestSignature;
diff --cc src/platform/listengines/videolistengine.cpp
index 4709757,25a1bcc..acf716e
--- a/src/platform/listengines/videolistengine.cpp
+++ b/src/platform/listengines/videolistengine.cpp
@@@ -364,75 -465,132 +465,132 @@@ void VideoListEngine::run(
              m_mediaListProperties.summary = i18np("1 episode", "%1 episodes", mediaList.count());
              m_mediaListProperties.type = QString("Sources");
              
-         } else if (engineArg.toLower() == "movies") {
+         } 
+         
+         //Retrieve Genres
+         if (engineArg.toLower() == "genres") {
              MediaQuery query;
              QStringList bindings;
-             bindings.append(mediaVocabulary.mediaResourceBinding());
-             bindings.append(mediaVocabulary.mediaResourceUrlBinding());
-             bindings.append(mediaVocabulary.titleBinding());
-             bindings.append(mediaVocabulary.durationBinding());
-             bindings.append(mediaVocabulary.descriptionBinding());
-             bindings.append(mediaVocabulary.videoSynopsisBinding());
-             bindings.append(mediaVocabulary.ratingBinding());
-             bindings.append(mediaVocabulary.releaseDateBinding());
-             bindings.append(mediaVocabulary.videoAudienceRatingBinding());
              bindings.append(mediaVocabulary.genreBinding());
-             bindings.append(mediaVocabulary.artworkBinding());
-             bindings.append(mediaVocabulary.videoWriterBinding());
-             bindings.append(mediaVocabulary.videoDirectorBinding());
-             bindings.append(mediaVocabulary.videoAssistantDirectorBinding());
-             bindings.append(mediaVocabulary.videoProducerBinding());
-             bindings.append(mediaVocabulary.videoActorBinding());
-             bindings.append(mediaVocabulary.videoCinematographerBinding());
              query.select(bindings, MediaQuery::Distinct);
              query.startWhere();
-             query.addCondition(mediaVocabulary.hasTypeVideoMovie(MediaQuery::Required));
-             query.addCondition(mediaVocabulary.hasTitle(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasDuration(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasDescription(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasVideoSynopsis(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasRating(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasReleaseDate(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasVideoAudienceRating(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasArtwork(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasVideoWriter(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasVideoDirector(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasVideoAssistantDirector(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasVideoProducer(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasVideoActor(MediaQuery::Optional));
-             query.addCondition(mediaVocabulary.hasVideoCinematographer(MediaQuery::Optional));
-             if (!genre.isEmpty()) {
-                 query.addCondition(mediaVocabulary.hasGenre(MediaQuery::Required,
-                                                             genre,
-                                                             MediaQuery::Equal));;
-             } else {
-                 query.addCondition(mediaVocabulary.hasGenre(MediaQuery::Optional));
-             }
+             query.addCondition(mediaVocabulary.hasTypeAnyVideo(MediaQuery::Required));
+             query.addCondition(mediaVocabulary.hasGenre(MediaQuery::Required));
+             query.addLRIFilterConditions(engineFilterList, mediaVocabulary);
              query.endWhere();
-             QStringList orderByBindings;
-             orderByBindings.append(mediaVocabulary.titleBinding());
-             orderByBindings.append(mediaVocabulary.releaseDateBinding());
+             QStringList orderByBindings = bindings;
              query.orderBy(orderByBindings);
 -            
 +
              Soprano::QueryResultIterator it = query.executeSelect(m_mainModel);
- 
+             
              //Build media list from results
              while( it.next() ) {
-                 MediaItem mediaItem = Utilities::mediaItemFromIterator(it, QString("Movie"));
-                 mediaList.append(mediaItem);
+                 if (m_stop) {
+                     return;
+                 }
+                 QString genre = it.binding("genre").literal().toString().trimmed();
+                 if (!genre.isEmpty()) {
+                     MediaItem mediaItem;
+                     mediaItem.url = QString("video://sources?||genre=%1").arg(genre);
+                     mediaItem.title = genre;
+                     mediaItem.type = QString("Category");
+                     mediaItem.fields["categoryType"] = QString("VideoGenre");
+                     mediaItem.fields["title"] = genre;
+                     mediaItem.fields["sourceLri"] = m_mediaListProperties.lri;
+                     mediaItem.nowPlaying = false;
+                     mediaItem.artwork = KIcon("flag-green");
+ 
+                     mediaItem.addContext(i18n("Recently Played"), QString("semantics://recent?video||limit=4||genre=%1").arg(genre));
+                     mediaItem.addContext(i18n("Highest Rated"), QString("semantics://highest?video||limit=4||genre=%1").arg(genre));
+                     mediaItem.addContext(i18n("Frequently Played"), QString("semantics://frequent?video||limit=4||genre=%1").arg(genre));
+ 
+                     mediaList.append(mediaItem);
+                 }
              }
              
-             m_mediaListProperties.name = i18n("Movies");
-             if (!genre.isEmpty()) {
-                 m_mediaListProperties.name = i18nc("%1=Genre of the movie", "Movies - %1", genre);
+             m_mediaListProperties.name = i18n("Genres");
+             m_mediaListProperties.summary = i18np("1 genre", "%1 genres", mediaList.count());
+             m_mediaListProperties.type = QString("Categories");
+         }
+         
+         //Retrieve Actors
+         if (engineArg.toLower() == "actors") {
+             MediaQuery query;
+             QStringList bindings;
+             bindings.append(MediaVocabulary::resourceBindingForCategory("Actor"));
+             bindings.append(mediaVocabulary.videoActorBinding());
+             bindings.append(mediaVocabulary.videoActorDescriptionBinding());
+             bindings.append(mediaVocabulary.videoActorArtworkBinding());
+             bindings.append(mediaVocabulary.relatedToBinding());
+             query.select(bindings, MediaQuery::Distinct);
+             query.startWhere();
+             query.addCondition(mediaVocabulary.hasTypeAnyVideo(MediaQuery::Required));
+             query.addCondition(mediaVocabulary.hasVideoActor(MediaQuery::Required));
+             query.addCondition(mediaVocabulary.hasVideoActorDescription(MediaQuery::Optional));
+             query.addCondition(mediaVocabulary.hasVideoActorArtwork(MediaQuery::Optional));
+             query.addCondition(mediaVocabulary.hasRelatedTo(MediaVocabulary::resourceBindingForCategory("Actor"), MediaQuery::Optional));
+             query.addLRIFilterConditions(engineFilterList, mediaVocabulary);
+             query.endWhere();
+             QStringList orderByBindings(mediaVocabulary.videoActorBinding());
+             query.orderBy(orderByBindings);
+             
+             Soprano::QueryResultIterator it = query.executeSelect(m_mainModel);
+             
+             //Build media list from results
+             QStringList urls;
+             QHash<QString, QStringList> relatedTos;
+             while( it.next() ) {
+                 if (m_stop) {
+                     return;
+                 }
+                 QString actor = it.binding(mediaVocabulary.videoActorBinding()).literal().toString().trimmed();
+                 if (!actor.isEmpty()) {
+                     QString lri = QString("video://sources?||actor=%1").arg(actor);;
+                     if (urls.indexOf(lri) == -1) {
+                         MediaItem mediaItem;
+                         mediaItem.url = lri;
+                         mediaItem.title = actor;
+                         mediaItem.type = QString("Category");
+                         mediaItem.fields["categoryType"] = QString("Actor");
+                         mediaItem.fields["title"] = actor;
+                         mediaItem.fields["sourceLri"] = m_mediaListProperties.lri;
+                         mediaItem.fields["description"] = it.binding(mediaVocabulary.videoActorDescriptionBinding()).literal().toString().trimmed();
+                         mediaItem.fields["artworkUrl"] = it.binding(mediaVocabulary.videoActorArtworkBinding()).uri().toString();
+                         relatedTos = Utilities::multiValueAppend(relatedTos, mediaItem.url, it.binding(mediaVocabulary.relatedToBinding()).uri().toString());
+                         mediaItem.fields["relatedTo"] = relatedTos.value(mediaItem.url);
+                         mediaItem.nowPlaying = false;
+                         mediaItem.artwork = KIcon("view-media-artist");
+ 
+                         mediaItem.addContext(i18n("Recently Played"), QString("semantics://recent?video||limit=4||actor=%1").arg(actor));
+                         mediaItem.addContext(i18n("Highest Rated"), QString("semantics://highest?video||limit=4||actor=%1").arg(actor));
+                         mediaItem.addContext(i18n("Frequently Played"), QString("semantics://frequent?video||limit=4||actor=%1").arg(actor));
+ 
+                         mediaList.append(mediaItem);
+                         urls.append(lri);
+                     } else {
+                         //Update multivalue fields for existing media item
+                         MediaItem mediaItem = mediaList.at(urls.indexOf(lri));
+                         relatedTos = Utilities::multiValueAppend(relatedTos, mediaItem.url, it.binding(mediaVocabulary.relatedToBinding()).uri().toString());
+                         mediaItem.fields["relatedTo"] = relatedTos.value(mediaItem.url);
+                         mediaList.replace(urls.indexOf(lri), mediaItem);
+                     }
+                 }
              }
-             m_mediaListProperties.summary = i18np("1 movie", "%1 movies", mediaList.count());
-             m_mediaListProperties.type = QString("Sources");
              
-         } else if (engineArg.toLower() == "genres") {
+             m_mediaListProperties.name = i18n("Actors");
+             m_mediaListProperties.summary = i18np("1 actor", "%1 actors", mediaList.count());
+             m_mediaListProperties.type = QString("Categories");
+         }
+         
+         //Retrieve Directors
+         if (engineArg.toLower() == "directors") {
              MediaQuery query;
              QStringList bindings;
-             bindings.append(mediaVocabulary.genreBinding());
+             bindings.append(MediaVocabulary::resourceBindingForCategory("Director"));
+             bindings.append(mediaVocabulary.videoDirectorBinding());
+             bindings.append(mediaVocabulary.videoDirectorDescriptionBinding());
+             bindings.append(mediaVocabulary.videoDirectorArtworkBinding());
+             bindings.append(mediaVocabulary.relatedToBinding());
              query.select(bindings, MediaQuery::Distinct);
              query.startWhere();
              query.addCondition(mediaVocabulary.hasTypeAnyVideo(MediaQuery::Required));
diff --cc src/platform/playlist.cpp
index 0e94654,e5c24ee..24f0aaf
--- a/src/platform/playlist.cpp
+++ b/src/platform/playlist.cpp
@@@ -530,9 -624,38 +624,39 @@@ void Playlist::stateChanged(Phonon::Sta
      }
      if (newstate == Phonon::PlayingState || newstate == Phonon::PausedState) {
          m_hadVideo = m_mediaObject->hasVideo();
+         
+         /*  The commented code below will be used to test phonon external subtitle support
+          *  when phonon is updated to provide this function.
+         QString directoryPath = KUrl(m_nowPlaying->mediaItemAt(0).url).directory();
+         kDebug() << directoryPath;
+         QDir dir(directoryPath);
+         dir.setNameFilters(QStringList("*.srt"));
+         QStringList dirList = dir.entryList(QDir::Files, QDir::Name);;
+         if (dirList.count() > 0) {
+             kDebug() << dirList.at(0);
+             QHash<QByteArray, QVariant> properties;
+             properties.insert("type", "file");
+             properties.insert("name", directoryPath + QString("/") +dirList.at(0));
+             int newSubtitleId = m_mediaController->availableSubtitles().count();
+             Phonon::SubtitleDescription newSubtitle(newSubtitleId, properties);
+             m_mediaController->setCurrentSubtitle(newSubtitle);
+         }    
+         
+         QList<Phonon::SubtitleDescription> subtitles = m_mediaController->availableSubtitles();
+         foreach (Phonon::SubtitleDescription cur, subtitles) {
+             kDebug() << cur.name();
+         }*/
+         
+     }
+     
+     //NOTE: In KDE 4.6, below is not the correct way to disable power saving.
+     //TODO: Update to use new Solid power status api in KDE 4.6 and later.
+     bool isKDE46OrGreater = false;
+     if ((KDE::versionMinor() >= 5) && (KDE::versionRelease() >= 90)) {
+         isKDE46OrGreater = true;
      }
      
 +    
      QDBusInterface iface(
      		"org.kde.kded",
      		"/modules/powerdevil",

-- 
bangarang packaging



More information about the pkg-kde-commits mailing list