MediaPlayer: Emulate duration attribute for BUrl playlists
* Make the Playlist window working again by caching the duration value.
This commit is contained in:
@@ -14,7 +14,8 @@
|
|||||||
|
|
||||||
UrlPlaylistItem::UrlPlaylistItem(BUrl url)
|
UrlPlaylistItem::UrlPlaylistItem(BUrl url)
|
||||||
:
|
:
|
||||||
fUrl(url)
|
fUrl(url),
|
||||||
|
fDuration(-1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,6 +106,10 @@ UrlPlaylistItem::SetAttribute(const Attribute& attribute, const int64& value)
|
|||||||
status_t
|
status_t
|
||||||
UrlPlaylistItem::GetAttribute(const Attribute& attribute, int64& value) const
|
UrlPlaylistItem::GetAttribute(const Attribute& attribute, int64& value) const
|
||||||
{
|
{
|
||||||
|
if (attribute == ATTR_INT64_DURATION && fDuration >= 0) {
|
||||||
|
value = fDuration;
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
return B_NOT_SUPPORTED;
|
return B_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,12 +145,14 @@ UrlPlaylistItem::RestoreFromTrash()
|
|||||||
bigtime_t
|
bigtime_t
|
||||||
UrlPlaylistItem::_CalculateDuration()
|
UrlPlaylistItem::_CalculateDuration()
|
||||||
{
|
{
|
||||||
BMediaFile mediaFile(fUrl);
|
if (fDuration < 0) {
|
||||||
|
BMediaFile mediaFile(fUrl);
|
||||||
|
|
||||||
if (mediaFile.InitCheck() != B_OK || mediaFile.CountTracks() < 1)
|
if (mediaFile.InitCheck() != B_OK || mediaFile.CountTracks() < 1)
|
||||||
return 0;
|
return 0;
|
||||||
|
fDuration = mediaFile.TrackAt(0)->Duration();
|
||||||
return mediaFile.TrackAt(0)->Duration();
|
}
|
||||||
|
return fDuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
BUrl fUrl;
|
BUrl fUrl;
|
||||||
|
bigtime_t fDuration;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user