xref: /haiku/src/apps/mediaplayer/playlist/UrlPlaylistItem.cpp (revision 3248de3de47011137e0c667a7247dd424c827bd7)
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