[haiku-commits] haiku: hrev50169 - src/apps/mediaplayer/playlist

  • From: b.vitruvio@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 27 Mar 2016 21:34:49 +0200 (CEST)

hrev50169 adds 3 changesets to branch 'master'
old head: 97dfeb96704e5dbc5bec32ad7b21379d0125e031
new head: b7f7c6e0a8f743255da7d31c28608654ef572605
overview: 
http://cgit.haiku-os.org/haiku/log/?qt=range&q=b7f7c6e0a8f7+%5E97dfeb96704e

----------------------------------------------------------------------------

e00ede2b4898: MediaPlayer: Add UrlPlaylistItem

bcf30a5eb583: MediaPlayer: Add support code for url items
  
  * It needs further work to avoid the AudioSupplier being
  recreated every time. It makes the BMediaFile to redo the sniffing
  process various times.

b7f7c6e0a8f7: MediaPlayer: Fix style in Playlist.h

                                [ Dario Casalinuovo <b.vitruvio@xxxxxxxxx> ]

----------------------------------------------------------------------------

6 files changed, 258 insertions(+), 9 deletions(-)
src/apps/mediaplayer/Jamfile                     |   3 +-
.../playlist/ImportPLItemsCommand.cpp            |   3 +-
src/apps/mediaplayer/playlist/Playlist.cpp       |  38 ++++-
src/apps/mediaplayer/playlist/Playlist.h         |  13 +-
.../mediaplayer/playlist/UrlPlaylistItem.cpp     | 154 +++++++++++++++++++
src/apps/mediaplayer/playlist/UrlPlaylistItem.h  |  56 +++++++

############################################################################

Commit:      e00ede2b4898a64a7b265eeebb432c46712632e6
URL:         http://cgit.haiku-os.org/haiku/commit/?id=e00ede2b4898
Author:      Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date:        Mon Mar 14 23:57:25 2016 UTC

MediaPlayer: Add UrlPlaylistItem

----------------------------------------------------------------------------

diff --git a/src/apps/mediaplayer/Jamfile b/src/apps/mediaplayer/Jamfile
index 296a860..63ec26d 100644
--- a/src/apps/mediaplayer/Jamfile
+++ b/src/apps/mediaplayer/Jamfile
@@ -70,6 +70,7 @@ Application MediaPlayer :
        PLItemsCommand.cpp
        RandomizePLItemsCommand.cpp
        RemovePLItemsCommand.cpp
+       UrlPlaylistItem.cpp
 
        # settings
        Settings.cpp
@@ -114,7 +115,7 @@ Application MediaPlayer :
        VideoView.cpp
 
        : be game media tracker translation textencoding [ TargetLibstdc++ ]
-               localestub shared
+               localestub shared bnetapi
        : MediaPlayer.rdef
 ;
 
diff --git a/src/apps/mediaplayer/playlist/UrlPlaylistItem.cpp 
b/src/apps/mediaplayer/playlist/UrlPlaylistItem.cpp
new file mode 100644
index 0000000..44f4232
--- /dev/null
+++ b/src/apps/mediaplayer/playlist/UrlPlaylistItem.cpp
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2016, Dario Casalinuovo
+ * All rights reserved. Distributed under the terms of the MIT license.
+ */
+
+
+#include "UrlPlaylistItem.h"
+
+#include <MediaFile.h>
+
+#include "MediaFileTrackSupplier.h"
+
+
+UrlPlaylistItem::UrlPlaylistItem(BUrl* url)
+       :
+       fUrl(url)
+{
+
+}
+
+
+UrlPlaylistItem::UrlPlaylistItem(const UrlPlaylistItem& item)
+{
+       fUrl = new BUrl(item.Url()->UrlString());
+}
+
+
+UrlPlaylistItem::UrlPlaylistItem(const BMessage* archive)
+{
+}
+
+
+UrlPlaylistItem::~UrlPlaylistItem()
+{
+       delete fUrl;
+}
+
+
+PlaylistItem*
+UrlPlaylistItem::Clone() const
+{
+       return new UrlPlaylistItem(new BUrl(fUrl->UrlString()));
+}
+
+
+BArchivable*
+UrlPlaylistItem::Instantiate(BMessage* archive)
+{
+       return new UrlPlaylistItem(archive);
+}
+
+
+status_t
+UrlPlaylistItem::Archive(BMessage* into, bool deep) const
+{
+       return B_ERROR;
+}
+
+
+status_t
+UrlPlaylistItem::SetAttribute(const Attribute& attribute, const BString& 
string)
+{
+       return B_ERROR;
+}
+
+
+status_t
+UrlPlaylistItem::GetAttribute(const Attribute& attribute, BString& string) 
const
+{
+       return B_ERROR;
+}
+
+
+status_t
+UrlPlaylistItem::SetAttribute(const Attribute& attribute, const int32& value)
+{
+       return B_ERROR;
+}
+
+
+status_t
+UrlPlaylistItem::GetAttribute(const Attribute& attribute, int32& value) const
+{
+       return B_ERROR;
+}
+
+
+status_t
+UrlPlaylistItem::SetAttribute(const Attribute& attribute, const int64& value)
+{
+       return B_ERROR;
+}
+
+
+status_t
+UrlPlaylistItem::GetAttribute(const Attribute& attribute, int64& value) const
+{
+       return B_ERROR;
+}
+
+
+BString
+UrlPlaylistItem::LocationURI() const
+{
+       return fUrl->UrlString();
+}
+
+
+status_t
+UrlPlaylistItem::GetIcon(BBitmap* bitmap, icon_size iconSize) const
+{
+       return B_ERROR;
+}
+
+
+status_t
+UrlPlaylistItem::MoveIntoTrash()
+{
+       return B_ERROR;
+}
+
+
+status_t
+UrlPlaylistItem::RestoreFromTrash()
+{
+       return B_ERROR;
+}
+
+
+TrackSupplier*
+UrlPlaylistItem::CreateTrackSupplier() const
+{
+       MediaFileTrackSupplier* supplier
+               = new(std::nothrow) MediaFileTrackSupplier();
+       if (supplier == NULL)
+               return NULL;
+
+       BMediaFile* mediaFile = new(std::nothrow) BMediaFile(fUrl);
+       if (mediaFile == NULL) {
+               delete supplier;
+               return NULL;
+       }
+       if (supplier->AddMediaFile(mediaFile) != B_OK)
+                       delete mediaFile;
+
+       return supplier;
+}
+
+
+BUrl*
+UrlPlaylistItem::Url() const
+{
+       return fUrl;
+}
diff --git a/src/apps/mediaplayer/playlist/UrlPlaylistItem.h 
b/src/apps/mediaplayer/playlist/UrlPlaylistItem.h
new file mode 100644
index 0000000..93c3511
--- /dev/null
+++ b/src/apps/mediaplayer/playlist/UrlPlaylistItem.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2016, Dario Casalinuovo
+ * All rights reserved. Distributed under the terms of the MIT license.
+ */
+#ifndef URL_PLAYLIST_ITEM_H
+#define URL_PLAYLIST_ITEM_H
+
+#include "PlaylistItem.h"
+
+#include <Url.h>
+
+
+class UrlPlaylistItem : public PlaylistItem {
+public:
+                                                               
UrlPlaylistItem(BUrl* url);
+                                                               
UrlPlaylistItem(const UrlPlaylistItem& item);
+                                                               
UrlPlaylistItem(const BMessage* archive);
+       virtual                                         ~UrlPlaylistItem();
+
+       virtual PlaylistItem*           Clone() const;
+
+       static  BArchivable*            Instantiate(BMessage* archive);
+       virtual status_t                        Archive(BMessage* into,
+                                                                       bool 
deep = true) const;
+
+       virtual status_t                        SetAttribute(const Attribute& 
attribute,
+                                                                       const 
BString& string);
+       virtual status_t                        GetAttribute(const Attribute& 
attribute,
+                                                                       
BString& string) const;
+
+       virtual status_t                        SetAttribute(const Attribute& 
attribute,
+                                                                       const 
int32& value);
+       virtual status_t                        GetAttribute(const Attribute& 
attribute,
+                                                                       int32& 
value) const;
+
+       virtual status_t                        SetAttribute(const Attribute& 
attribute,
+                                                                       const 
int64& value);
+       virtual status_t                        GetAttribute(const Attribute& 
attribute,
+                                                                       int64& 
value) const;
+
+       virtual BString                         LocationURI() const;
+       virtual status_t                        GetIcon(BBitmap* bitmap,
+                                                                       
icon_size iconSize) const;
+
+       virtual status_t                        MoveIntoTrash();
+       virtual status_t                        RestoreFromTrash();
+
+       virtual TrackSupplier*          CreateTrackSupplier() const;
+
+                       BUrl*                           Url() const;
+
+private:
+       BUrl*                                           fUrl;
+};
+
+#endif

############################################################################

Commit:      bcf30a5eb583af7cd84d1fc53c5fac23cbb1eba4
URL:         http://cgit.haiku-os.org/haiku/commit/?id=bcf30a5eb583
Author:      Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date:        Mon Mar 14 23:52:45 2016 UTC

MediaPlayer: Add support code for url items

* It needs further work to avoid the AudioSupplier being
recreated every time. It makes the BMediaFile to redo the sniffing
process various times.

----------------------------------------------------------------------------

diff --git a/src/apps/mediaplayer/playlist/ImportPLItemsCommand.cpp 
b/src/apps/mediaplayer/playlist/ImportPLItemsCommand.cpp
index 236630b..be2f688 100644
--- a/src/apps/mediaplayer/playlist/ImportPLItemsCommand.cpp
+++ b/src/apps/mediaplayer/playlist/ImportPLItemsCommand.cpp
@@ -59,8 +59,7 @@ ImportPLItemsCommand::ImportPLItemsCommand(Playlist* playlist,
        // init new entries
        int32 added = 0;
        for (int32 i = 0; i < fNewCount; i++) {
-               FilePlaylistItem* fileItem = 
dynamic_cast<FilePlaylistItem*>(temp.ItemAtFast(i));
-               if (fileItem && !Playlist::ExtraMediaExists(playlist, 
fileItem->Ref())) {
+               if (!Playlist::ExtraMediaExists(playlist, temp.ItemAtFast(i))) {
                        fNewItems[added] = temp.ItemAtFast(i)->Clone();
                        if (fNewItems[added] == NULL) {
                                // indicate bad object init
diff --git a/src/apps/mediaplayer/playlist/Playlist.cpp 
b/src/apps/mediaplayer/playlist/Playlist.cpp
index 6b96fc8..d89f0c4 100644
--- a/src/apps/mediaplayer/playlist/Playlist.cpp
+++ b/src/apps/mediaplayer/playlist/Playlist.cpp
@@ -464,7 +464,7 @@ Playlist::AppendRefs(const BMessage* refsReceivedMessage, 
int32 appendIndex)
                        if (_IsQuery(type))
                                AppendQueryToPlaylist(ref, &subPlaylist);
                        else {
-                               if (!ExtraMediaExists(this, ref)) {
+                               if (!_ExtraMediaExists(this, ref)) {
                                        AppendToPlaylistRecursive(ref, 
&subPlaylist);
                                }
                        }
@@ -520,7 +520,7 @@ Playlist::AppendToPlaylistRecursive(const entry_ref& ref, 
Playlist* playlist)
                BString mimeString = _MIMEString(&ref);
                if (_IsMediaFile(mimeString)) {
                        PlaylistItem* item = new (std::nothrow) 
FilePlaylistItem(ref);
-                       if (!ExtraMediaExists(playlist, ref)) {
+                       if (!_ExtraMediaExists(playlist, ref)) {
                                _BindExtraMedia(item);
                                if (item != NULL && !playlist->AddItem(item))
                                        delete item;
@@ -601,7 +601,26 @@ Playlist::NotifyImportFailed()
 
 
 /*static*/ bool
-Playlist::ExtraMediaExists(Playlist* playlist, const entry_ref& ref)
+Playlist::ExtraMediaExists(Playlist* playlist, PlaylistItem* item)
+{
+       FilePlaylistItem* fileItem = dynamic_cast<FilePlaylistItem*>(item);
+       if (fileItem != NULL)
+               return _ExtraMediaExists(playlist, fileItem->Ref());
+
+       // If we are here let's see if it is an url
+       UrlPlaylistItem* urlItem = dynamic_cast<UrlPlaylistItem*>(item);
+       if (urlItem == NULL)
+               return true;
+
+       return _ExtraMediaExists(playlist, urlItem->Url());
+}
+
+
+// #pragma mark - private
+
+
+/*static*/ bool
+Playlist::_ExtraMediaExists(Playlist* playlist, const entry_ref& ref)
 {
        BString exceptExtension = _GetExceptExtension(BPath(&ref).Path());
        
@@ -617,7 +636,18 @@ Playlist::ExtraMediaExists(Playlist* playlist, const 
entry_ref& ref)
 }
 
 
-// #pragma mark - private
+/*static*/ bool
+Playlist::_ExtraMediaExists(Playlist* playlist, BUrl* url)
+{
+       for (int32 i = 0; i < playlist->CountItems(); i++) {
+               UrlPlaylistItem* compare = 
dynamic_cast<UrlPlaylistItem*>(playlist->ItemAt(i));
+               if (compare == NULL)
+                       continue;
+               if (compare->Url() != url)
+                       return true;
+       }
+       return false;
+}
 
 
 /*static*/ bool
diff --git a/src/apps/mediaplayer/playlist/Playlist.h 
b/src/apps/mediaplayer/playlist/Playlist.h
index 0a2ca39..eac0dd5 100644
--- a/src/apps/mediaplayer/playlist/Playlist.h
+++ b/src/apps/mediaplayer/playlist/Playlist.h
@@ -24,9 +24,11 @@
 
 #include <List.h>
 #include <Locker.h>
+#include <Url.h>
 
 #include "FilePlaylistItem.h"
 #include "PlaylistItem.h"
+#include "UrlPlaylistItem.h"
 
 class BDataIO;
 class BMessage;
@@ -115,13 +117,15 @@ public:
 
                        void                            NotifyImportFailed();
 
-       static  bool                            ExtraMediaExists(Playlist* 
playlist, const entry_ref& ref);
+       static  bool                            ExtraMediaExists(Playlist* 
playlist, PlaylistItem* item);
 
 private:
                                                                Playlist(const 
Playlist& other);
                        Playlist&                       operator=(const 
Playlist& other);
                                                                        // 
unimplemented
 
+       static  bool                            _ExtraMediaExists(Playlist* 
playlist, const entry_ref& ref);
+       static  bool                            _ExtraMediaExists(Playlist* 
playlist, BUrl* url);
        static  bool                            _IsImageFile(const BString& 
mimeString);
        static  bool                            _IsMediaFile(const BString& 
mimeString);
        static  bool                            _IsTextPlaylist(const BString& 
mimeString);

############################################################################

Revision:    hrev50169
Commit:      b7f7c6e0a8f743255da7d31c28608654ef572605
URL:         http://cgit.haiku-os.org/haiku/commit/?id=b7f7c6e0a8f7
Author:      Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date:        Sun Mar 27 19:29:35 2016 UTC

MediaPlayer: Fix style in Playlist.h

----------------------------------------------------------------------------

diff --git a/src/apps/mediaplayer/playlist/Playlist.h 
b/src/apps/mediaplayer/playlist/Playlist.h
index eac0dd5..94980c5 100644
--- a/src/apps/mediaplayer/playlist/Playlist.h
+++ b/src/apps/mediaplayer/playlist/Playlist.h
@@ -117,15 +117,18 @@ public:
 
                        void                            NotifyImportFailed();
 
-       static  bool                            ExtraMediaExists(Playlist* 
playlist, PlaylistItem* item);
+       static  bool                            ExtraMediaExists(Playlist* 
playlist,
+                                                                       
PlaylistItem* item);
 
 private:
                                                                Playlist(const 
Playlist& other);
                        Playlist&                       operator=(const 
Playlist& other);
                                                                        // 
unimplemented
 
-       static  bool                            _ExtraMediaExists(Playlist* 
playlist, const entry_ref& ref);
-       static  bool                            _ExtraMediaExists(Playlist* 
playlist, BUrl* url);
+       static  bool                            _ExtraMediaExists(Playlist* 
playlist,
+                                                                       const 
entry_ref& ref);
+       static  bool                            _ExtraMediaExists(Playlist* 
playlist,
+                                                                       BUrl* 
url);
        static  bool                            _IsImageFile(const BString& 
mimeString);
        static  bool                            _IsMediaFile(const BString& 
mimeString);
        static  bool                            _IsTextPlaylist(const BString& 
mimeString);
@@ -134,7 +137,9 @@ private:
        static  bool                            _IsQuery(const BString& 
mimeString);
        static  BString                         _MIMEString(const entry_ref* 
ref);
        static  void                            _BindExtraMedia(PlaylistItem* 
item);
-       static  void                            
_BindExtraMedia(FilePlaylistItem* fileItem, const BEntry& entry);
+       static  void                            
_BindExtraMedia(FilePlaylistItem* fileItem,
+                                                                       const 
BEntry& entry);
+
        static  BString                         _GetExceptExtension(const 
BString& path);
 
                        void                            
_NotifyItemAdded(PlaylistItem*,


Other related posts:

  • » [haiku-commits] haiku: hrev50169 - src/apps/mediaplayer/playlist - b . vitruvio