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*,