1e00ede2bSDario Casalinuovo /*
2e00ede2bSDario Casalinuovo * Copyright 2016, Dario Casalinuovo
3e00ede2bSDario Casalinuovo * All rights reserved. Distributed under the terms of the MIT license.
4e00ede2bSDario Casalinuovo */
5e00ede2bSDario Casalinuovo
6e00ede2bSDario Casalinuovo
7e00ede2bSDario Casalinuovo #include "UrlPlaylistItem.h"
8e00ede2bSDario Casalinuovo
9e00ede2bSDario Casalinuovo #include <MediaFile.h>
108199f204SDario Casalinuovo #include <MediaTrack.h>
11e00ede2bSDario Casalinuovo
12e00ede2bSDario Casalinuovo #include "MediaFileTrackSupplier.h"
13e00ede2bSDario Casalinuovo
14e00ede2bSDario Casalinuovo
UrlPlaylistItem(BUrl url)150ba82236SDario Casalinuovo UrlPlaylistItem::UrlPlaylistItem(BUrl url)
16e00ede2bSDario Casalinuovo :
17ce8fd106SDario Casalinuovo fUrl(url),
18ce8fd106SDario Casalinuovo fDuration(-1)
19e00ede2bSDario Casalinuovo {
20e00ede2bSDario Casalinuovo }
21e00ede2bSDario Casalinuovo
22e00ede2bSDario Casalinuovo
UrlPlaylistItem(const UrlPlaylistItem & item)23e00ede2bSDario Casalinuovo UrlPlaylistItem::UrlPlaylistItem(const UrlPlaylistItem& item)
24e00ede2bSDario Casalinuovo {
250ba82236SDario Casalinuovo fUrl = BUrl(item.Url());
26e00ede2bSDario Casalinuovo }
27e00ede2bSDario Casalinuovo
28e00ede2bSDario Casalinuovo
UrlPlaylistItem(const BMessage * archive)29e00ede2bSDario Casalinuovo UrlPlaylistItem::UrlPlaylistItem(const BMessage* archive)
30e00ede2bSDario Casalinuovo {
318199f204SDario Casalinuovo const char* url = NULL;
328199f204SDario Casalinuovo if (archive->FindString("mediaplayer:url", &url) == B_OK)
338199f204SDario Casalinuovo fUrl = BUrl(url);
34e00ede2bSDario Casalinuovo }
35e00ede2bSDario Casalinuovo
36e00ede2bSDario Casalinuovo
~UrlPlaylistItem()37e00ede2bSDario Casalinuovo UrlPlaylistItem::~UrlPlaylistItem()
38e00ede2bSDario Casalinuovo {
39e00ede2bSDario Casalinuovo }
40e00ede2bSDario Casalinuovo
41e00ede2bSDario Casalinuovo
42e00ede2bSDario Casalinuovo PlaylistItem*
Clone() const43e00ede2bSDario Casalinuovo UrlPlaylistItem::Clone() const
44e00ede2bSDario Casalinuovo {
450ba82236SDario Casalinuovo return new UrlPlaylistItem(fUrl);
46e00ede2bSDario Casalinuovo }
47e00ede2bSDario Casalinuovo
48e00ede2bSDario Casalinuovo
49e00ede2bSDario Casalinuovo BArchivable*
Instantiate(BMessage * archive)50e00ede2bSDario Casalinuovo UrlPlaylistItem::Instantiate(BMessage* archive)
51e00ede2bSDario Casalinuovo {
528199f204SDario Casalinuovo if (validate_instantiation(archive, "UrlPlaylistItem"))
538199f204SDario Casalinuovo return new (std::nothrow) UrlPlaylistItem(archive);
548199f204SDario Casalinuovo
558199f204SDario Casalinuovo return NULL;
56e00ede2bSDario Casalinuovo }
57e00ede2bSDario Casalinuovo
58e00ede2bSDario Casalinuovo
59e00ede2bSDario Casalinuovo status_t
Archive(BMessage * into,bool deep) const60e00ede2bSDario Casalinuovo UrlPlaylistItem::Archive(BMessage* into, bool deep) const
61e00ede2bSDario Casalinuovo {
628199f204SDario Casalinuovo return into->AddString("mediaplayer:url", fUrl.UrlString());
63e00ede2bSDario Casalinuovo }
64e00ede2bSDario Casalinuovo
65e00ede2bSDario Casalinuovo
66e00ede2bSDario Casalinuovo status_t
SetAttribute(const Attribute & attribute,const BString & string)67e00ede2bSDario Casalinuovo UrlPlaylistItem::SetAttribute(const Attribute& attribute, const BString& string)
68e00ede2bSDario Casalinuovo {
69e00ede2bSDario Casalinuovo return B_ERROR;
70e00ede2bSDario Casalinuovo }
71e00ede2bSDario Casalinuovo
72e00ede2bSDario Casalinuovo
73e00ede2bSDario Casalinuovo status_t
GetAttribute(const Attribute & attribute,BString & string) const74e00ede2bSDario Casalinuovo UrlPlaylistItem::GetAttribute(const Attribute& attribute, BString& string) const
75e00ede2bSDario Casalinuovo {
7692cb0c5dSDario Casalinuovo if (attribute == ATTR_STRING_NAME) {
7792cb0c5dSDario Casalinuovo string = fUrl.UrlString();
7892cb0c5dSDario Casalinuovo return B_OK;
7992cb0c5dSDario Casalinuovo }
8092cb0c5dSDario Casalinuovo
8192cb0c5dSDario Casalinuovo return B_NOT_SUPPORTED;
82e00ede2bSDario Casalinuovo }
83e00ede2bSDario Casalinuovo
84e00ede2bSDario Casalinuovo
85e00ede2bSDario Casalinuovo status_t
SetAttribute(const Attribute & attribute,const int32 & value)86e00ede2bSDario Casalinuovo UrlPlaylistItem::SetAttribute(const Attribute& attribute, const int32& value)
87e00ede2bSDario Casalinuovo {
8892cb0c5dSDario Casalinuovo return B_NOT_SUPPORTED;
89e00ede2bSDario Casalinuovo }
90e00ede2bSDario Casalinuovo
91e00ede2bSDario Casalinuovo
92e00ede2bSDario Casalinuovo status_t
GetAttribute(const Attribute & attribute,int32 & value) const93e00ede2bSDario Casalinuovo UrlPlaylistItem::GetAttribute(const Attribute& attribute, int32& value) const
94e00ede2bSDario Casalinuovo {
9592cb0c5dSDario Casalinuovo return B_NOT_SUPPORTED;
96e00ede2bSDario Casalinuovo }
97e00ede2bSDario Casalinuovo
98e00ede2bSDario Casalinuovo
99e00ede2bSDario Casalinuovo status_t
SetAttribute(const Attribute & attribute,const int64 & value)100e00ede2bSDario Casalinuovo UrlPlaylistItem::SetAttribute(const Attribute& attribute, const int64& value)
101e00ede2bSDario Casalinuovo {
10292cb0c5dSDario Casalinuovo return B_NOT_SUPPORTED;
103e00ede2bSDario Casalinuovo }
104e00ede2bSDario Casalinuovo
105e00ede2bSDario Casalinuovo
106e00ede2bSDario Casalinuovo status_t
GetAttribute(const Attribute & attribute,int64 & value) const107e00ede2bSDario Casalinuovo UrlPlaylistItem::GetAttribute(const Attribute& attribute, int64& value) const
108e00ede2bSDario Casalinuovo {
109ce8fd106SDario Casalinuovo if (attribute == ATTR_INT64_DURATION && fDuration >= 0) {
110ce8fd106SDario Casalinuovo value = fDuration;
111ce8fd106SDario Casalinuovo return B_OK;
112ce8fd106SDario Casalinuovo }
11392cb0c5dSDario Casalinuovo return B_NOT_SUPPORTED;
114e00ede2bSDario Casalinuovo }
115e00ede2bSDario Casalinuovo
116e00ede2bSDario Casalinuovo
117*3248de3dSJulien Lepiller status_t
SetAttribute(const Attribute & attribute,const float & value)118*3248de3dSJulien Lepiller UrlPlaylistItem::SetAttribute(const Attribute& attribute, const float& value)
119*3248de3dSJulien Lepiller {
120*3248de3dSJulien Lepiller return B_NOT_SUPPORTED;
121*3248de3dSJulien Lepiller }
122*3248de3dSJulien Lepiller
123*3248de3dSJulien Lepiller
124*3248de3dSJulien Lepiller status_t
GetAttribute(const Attribute & attribute,float & value) const125*3248de3dSJulien Lepiller UrlPlaylistItem::GetAttribute(const Attribute& attribute, float& value) const
126*3248de3dSJulien Lepiller {
127*3248de3dSJulien Lepiller return B_NOT_SUPPORTED;
128*3248de3dSJulien Lepiller }
129*3248de3dSJulien Lepiller
130*3248de3dSJulien Lepiller
131e00ede2bSDario Casalinuovo BString
LocationURI() const132e00ede2bSDario Casalinuovo UrlPlaylistItem::LocationURI() const
133e00ede2bSDario Casalinuovo {
1340ba82236SDario Casalinuovo return fUrl.UrlString();
135e00ede2bSDario Casalinuovo }
136e00ede2bSDario Casalinuovo
137e00ede2bSDario Casalinuovo
138e00ede2bSDario Casalinuovo status_t
GetIcon(BBitmap * bitmap,icon_size iconSize) const139e00ede2bSDario Casalinuovo UrlPlaylistItem::GetIcon(BBitmap* bitmap, icon_size iconSize) const
140e00ede2bSDario Casalinuovo {
14192cb0c5dSDario Casalinuovo return B_NOT_SUPPORTED;
142e00ede2bSDario Casalinuovo }
143e00ede2bSDario Casalinuovo
144e00ede2bSDario Casalinuovo
145e00ede2bSDario Casalinuovo status_t
MoveIntoTrash()146e00ede2bSDario Casalinuovo UrlPlaylistItem::MoveIntoTrash()
147e00ede2bSDario Casalinuovo {
14892cb0c5dSDario Casalinuovo return B_NOT_SUPPORTED;
149e00ede2bSDario Casalinuovo }
150e00ede2bSDario Casalinuovo
151e00ede2bSDario Casalinuovo
152e00ede2bSDario Casalinuovo status_t
RestoreFromTrash()153e00ede2bSDario Casalinuovo UrlPlaylistItem::RestoreFromTrash()
154e00ede2bSDario Casalinuovo {
15592cb0c5dSDario Casalinuovo return B_NOT_SUPPORTED;
156e00ede2bSDario Casalinuovo }
157e00ede2bSDario Casalinuovo
158e00ede2bSDario Casalinuovo
1598199f204SDario Casalinuovo bigtime_t
_CalculateDuration()1608199f204SDario Casalinuovo UrlPlaylistItem::_CalculateDuration()
1618199f204SDario Casalinuovo {
162ce8fd106SDario Casalinuovo if (fDuration < 0) {
1638199f204SDario Casalinuovo BMediaFile mediaFile(fUrl);
1648199f204SDario Casalinuovo
1658199f204SDario Casalinuovo if (mediaFile.InitCheck() != B_OK || mediaFile.CountTracks() < 1)
1668199f204SDario Casalinuovo return 0;
167ce8fd106SDario Casalinuovo fDuration = mediaFile.TrackAt(0)->Duration();
168ce8fd106SDario Casalinuovo }
169ce8fd106SDario Casalinuovo return fDuration;
1708199f204SDario Casalinuovo }
1718199f204SDario Casalinuovo
1728199f204SDario Casalinuovo
173e00ede2bSDario Casalinuovo TrackSupplier*
_CreateTrackSupplier() const17470efd0dbSDario Casalinuovo UrlPlaylistItem::_CreateTrackSupplier() const
175e00ede2bSDario Casalinuovo {
176e00ede2bSDario Casalinuovo MediaFileTrackSupplier* supplier
177e00ede2bSDario Casalinuovo = new(std::nothrow) MediaFileTrackSupplier();
178e00ede2bSDario Casalinuovo if (supplier == NULL)
179e00ede2bSDario Casalinuovo return NULL;
180e00ede2bSDario Casalinuovo
181e00ede2bSDario Casalinuovo BMediaFile* mediaFile = new(std::nothrow) BMediaFile(fUrl);
1822c19bcfaSDario Casalinuovo if (mediaFile == NULL || supplier->AddMediaFile(mediaFile) != B_OK) {
1832c19bcfaSDario Casalinuovo delete mediaFile;
184e00ede2bSDario Casalinuovo delete supplier;
185e00ede2bSDario Casalinuovo return NULL;
186e00ede2bSDario Casalinuovo }
187e00ede2bSDario Casalinuovo
188e00ede2bSDario Casalinuovo return supplier;
189e00ede2bSDario Casalinuovo }
190e00ede2bSDario Casalinuovo
191e00ede2bSDario Casalinuovo
1920ba82236SDario Casalinuovo BUrl
Url() const193e00ede2bSDario Casalinuovo UrlPlaylistItem::Url() const
194e00ede2bSDario Casalinuovo {
195e00ede2bSDario Casalinuovo return fUrl;
196e00ede2bSDario Casalinuovo }
197