http_streamer: Mutable flag is chosen at runtime
* BeOS Radio now works.
This commit is contained in:
parent
9f2deec26f
commit
b4e751b890
@ -81,12 +81,12 @@ private:
|
||||
|
||||
HTTPMediaIO::HTTPMediaIO(BUrl url)
|
||||
:
|
||||
BAdapterIO(B_MEDIA_STREAMING | B_MEDIA_SEEK_BACKWARD, HTTP_TIMEOUT),
|
||||
BAdapterIO(HTTP_TIMEOUT),
|
||||
fContext(NULL),
|
||||
fReq(NULL),
|
||||
fListener(NULL),
|
||||
fUrl(url),
|
||||
fTotalSize(0)
|
||||
fIsMutable(false)
|
||||
{
|
||||
}
|
||||
|
||||
@ -96,6 +96,15 @@ HTTPMediaIO::~HTTPMediaIO()
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
HTTPMediaIO::GetFlags(int32* flags) const
|
||||
{
|
||||
*flags = B_MEDIA_STREAMING | B_MEDIA_SEEK_BACKWARD;
|
||||
if (fIsMutable)
|
||||
*flags = *flags | B_MEDIA_MUTABLE_SIZE;
|
||||
}
|
||||
|
||||
|
||||
ssize_t
|
||||
HTTPMediaIO::WriteAt(off_t position, const void* buffer, size_t size)
|
||||
{
|
||||
@ -110,17 +119,6 @@ HTTPMediaIO::SetSize(off_t size)
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
HTTPMediaIO::GetSize(off_t* size) const
|
||||
{
|
||||
if (fReq == NULL)
|
||||
return B_ERROR;
|
||||
|
||||
*size = fTotalSize;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
HTTPMediaIO::Open()
|
||||
{
|
||||
@ -142,7 +140,14 @@ HTTPMediaIO::Open()
|
||||
if (ret != B_OK)
|
||||
return ret;
|
||||
|
||||
fTotalSize = fReq->Result().Length();
|
||||
off_t totalSize = fReq->Result().Length();
|
||||
|
||||
// At this point we decide if our size is fixed or mutable,
|
||||
// this will change the behavior of our parent.
|
||||
if (totalSize > 0)
|
||||
BAdapterIO::SetSize(totalSize);
|
||||
else
|
||||
fIsMutable = true;
|
||||
|
||||
return BAdapterIO::Open();
|
||||
}
|
||||
|
@ -20,11 +20,12 @@ public:
|
||||
HTTPMediaIO(BUrl url);
|
||||
virtual ~HTTPMediaIO();
|
||||
|
||||
virtual void GetFlags(int32* flags) const;
|
||||
|
||||
virtual ssize_t WriteAt(off_t position,
|
||||
const void* buffer, size_t size);
|
||||
|
||||
virtual status_t SetSize(off_t size);
|
||||
virtual status_t GetSize(off_t* size) const;
|
||||
|
||||
virtual status_t Open();
|
||||
virtual void Close();
|
||||
@ -39,6 +40,7 @@ private:
|
||||
|
||||
BUrl fUrl;
|
||||
off_t fTotalSize;
|
||||
bool fIsMutable;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user