262 lines
7.1 KiB
C++
262 lines
7.1 KiB
C++
|
#include "wac_playlists_entry.h"
|
||
|
|
||
|
|
||
|
wa::Components::playlists::playlist_entry::playlist_entry( const std::wstring &p_filename, const std::wstring &p_title, int p_length_ms )
|
||
|
{
|
||
|
this->__filename = p_filename;
|
||
|
this->__filetitle = p_title;
|
||
|
|
||
|
SetLengthMilliseconds( p_length_ms );
|
||
|
}
|
||
|
|
||
|
wa::Components::playlists::playlist_entry::playlist_entry( const std::wstring &p_filename, const std::wstring &p_title, int p_length_ms, int p_size )
|
||
|
{
|
||
|
this->__filename = p_filename;
|
||
|
this->__filetitle = p_title;
|
||
|
|
||
|
SetLengthMilliseconds( p_length_ms );
|
||
|
SetSizeBytes( p_size );
|
||
|
}
|
||
|
|
||
|
wa::Components::playlists::playlist_entry::playlist_entry( const std::wstring &p_filename, const std::wstring &p_title, int p_length_ms, ifc_plentryinfo *p_info )
|
||
|
{
|
||
|
this->__filename = p_filename;
|
||
|
this->__filetitle = p_title;
|
||
|
|
||
|
SetLengthMilliseconds( p_length_ms );
|
||
|
|
||
|
if ( p_info )
|
||
|
{
|
||
|
SetMediahash( p_info->GetExtendedInfo( _CONST_PLAYLIST_INFO_MEDIAHASH ) );
|
||
|
SetMetahash( p_info->GetExtendedInfo( _CONST_PLAYLIST_INFO_METAHASH ) );
|
||
|
SetCloudID( p_info->GetExtendedInfo( _CONST_PLAYLIST_INFO_CLOUD_ID ) );
|
||
|
SetCloudStatus( p_info->GetExtendedInfo( _CONST_PLAYLIST_INFO_CLOUD_STATUS ) );
|
||
|
SetCloudDevices( p_info->GetExtendedInfo( _CONST_PLAYLIST_INFO_CLOUD_DEVICES ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
wa::Components::playlists::playlist_entry::playlist_entry( const std::wstring &p_filename, const std::wstring &p_title, int p_length_ms, int p_size, ifc_plentryinfo *p_info )
|
||
|
{
|
||
|
this->__filename = p_filename;
|
||
|
this->__filetitle = p_title;
|
||
|
|
||
|
SetLengthMilliseconds( p_length_ms );
|
||
|
SetSizeBytes( p_size );
|
||
|
|
||
|
if ( p_info )
|
||
|
{
|
||
|
SetMediahash( p_info->GetExtendedInfo( _CONST_PLAYLIST_INFO_MEDIAHASH ) );
|
||
|
SetMetahash( p_info->GetExtendedInfo( _CONST_PLAYLIST_INFO_METAHASH ) );
|
||
|
SetCloudID( p_info->GetExtendedInfo( _CONST_PLAYLIST_INFO_CLOUD_ID ) );
|
||
|
SetCloudStatus( p_info->GetExtendedInfo( _CONST_PLAYLIST_INFO_CLOUD_STATUS ) );
|
||
|
SetCloudDevices( p_info->GetExtendedInfo( _CONST_PLAYLIST_INFO_CLOUD_DEVICES ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
wa::Components::playlists::playlist_entry::playlist_entry( const std::wstring &p_filename, const std::wstring &p_title, int p_length_ms,
|
||
|
const std::wstring &p_mediahash, const std::wstring &p_metahash, const std::wstring &p_cloud_id, const std::wstring &p_cloud_status, const std::wstring &p_cloud_devices )
|
||
|
{
|
||
|
this->__filename = p_filename;
|
||
|
this->__filetitle = p_title;
|
||
|
|
||
|
SetLengthMilliseconds( p_length_ms );
|
||
|
|
||
|
this->__mediahash = p_mediahash;
|
||
|
this->__metahash = p_metahash;
|
||
|
|
||
|
SetCloudID( p_cloud_id );
|
||
|
SetCloudStatus( p_cloud_status );
|
||
|
|
||
|
this->__cloud_devices = p_cloud_devices;
|
||
|
}
|
||
|
|
||
|
wa::Components::playlists::playlist_entry::playlist_entry( const std::wstring &p_filename, const std::wstring &p_title, int p_length_ms, int p_size,
|
||
|
const std::wstring &p_mediahash, const std::wstring &p_metahash, const std::wstring &p_cloud_id, const std::wstring &p_cloud_status, const std::wstring &p_cloud_devices )
|
||
|
{
|
||
|
this->__filename = p_filename;
|
||
|
this->__filetitle = p_title;
|
||
|
|
||
|
SetLengthMilliseconds( p_length_ms );
|
||
|
SetSizeBytes( p_size );
|
||
|
|
||
|
this->__mediahash = p_mediahash;
|
||
|
this->__metahash = p_metahash;
|
||
|
|
||
|
SetCloudID( p_cloud_id );
|
||
|
SetCloudStatus( p_cloud_status );
|
||
|
|
||
|
this->__cloud_devices = p_cloud_devices;
|
||
|
}
|
||
|
|
||
|
size_t wa::Components::playlists::playlist_entry::GetFilename( std::wstring &p_filename, size_t p_filename_max_length )
|
||
|
{
|
||
|
if ( p_filename.empty() )
|
||
|
return this->__filename.size();
|
||
|
|
||
|
if ( this->__filename.empty() )
|
||
|
return 0;
|
||
|
|
||
|
p_filename = this->__filename.substr( 0, p_filename_max_length );
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
size_t wa::Components::playlists::playlist_entry::GetTitle( std::wstring &p_title, size_t p_title_max_length )
|
||
|
{
|
||
|
if ( p_title.empty() )
|
||
|
return this->__filetitle.size();
|
||
|
|
||
|
if ( this->__filetitle.empty() )
|
||
|
return 0;
|
||
|
|
||
|
p_title = this->__filetitle.substr( 0, p_title_max_length );
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
size_t wa::Components::playlists::playlist_entry::GetExtendedInfo( const std::wstring &p_metadata, std::wstring &p_result, const size_t p_result_max_length )
|
||
|
{
|
||
|
if ( !__cloud_id.empty() )
|
||
|
{
|
||
|
if ( p_metadata.compare( _CONST_PLAYLIST_INFO_MEDIAHASH ) == 0 )
|
||
|
{
|
||
|
if ( !__mediahash.empty() )
|
||
|
{
|
||
|
p_result = __mediahash.substr( 0, p_result_max_length );
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
else
|
||
|
return 0;
|
||
|
}
|
||
|
else if ( p_metadata.compare( _CONST_PLAYLIST_INFO_METAHASH ) == 0 )
|
||
|
{
|
||
|
if ( !__metahash.empty() )
|
||
|
{
|
||
|
p_result = __metahash.substr( 0, p_result_max_length );
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
else
|
||
|
return 0;
|
||
|
}
|
||
|
else if ( p_metadata.compare( _CONST_PLAYLIST_INFO_CLOUD_ID ) == 0 )
|
||
|
{
|
||
|
if ( !__cloud_id.empty() )
|
||
|
{
|
||
|
p_result = __cloud_id.substr( 0, p_result_max_length );
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
else
|
||
|
return 0;
|
||
|
}
|
||
|
else if ( p_metadata.compare( _CONST_PLAYLIST_INFO_CLOUD_STATUS ) == 0 )
|
||
|
{
|
||
|
if ( !__cloud_status.empty() )
|
||
|
{
|
||
|
p_result = __cloud_status.substr( 0, p_result_max_length );
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
else
|
||
|
return 0;
|
||
|
}
|
||
|
else if ( p_metadata.compare( _CONST_PLAYLIST_INFO_CLOUD_DEVICES ) == 0 )
|
||
|
{
|
||
|
if ( !__cloud_devices.empty() )
|
||
|
{
|
||
|
p_result = __cloud_devices.substr( 0, p_result_max_length );
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
else
|
||
|
return 0;
|
||
|
}
|
||
|
else if ( p_metadata.compare( _CONST_PLAYLIST_INFO_CLOUD ) == 0 )
|
||
|
{
|
||
|
if ( _wtoi( __cloud_id.c_str() ) > 0 )
|
||
|
{
|
||
|
wchar_t l_result_buffer[ 500 ] = {0};
|
||
|
|
||
|
swprintf_s( l_result_buffer, p_result_max_length, L"#EXT-X-NS-CLOUD:mediahash=%s,metahash=%s,cloud_id=%s,cloud_status=%s,cloud_devices=%s", __mediahash.c_str(), __metahash.c_str(), __cloud_id.c_str(), __cloud_status.c_str(), __cloud_devices.c_str() );
|
||
|
|
||
|
p_result = std::wstring( l_result_buffer );
|
||
|
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
void wa::Components::playlists::playlist_entry::SetFilename( const std::wstring &p_filename )
|
||
|
{
|
||
|
this->__filename = p_filename;
|
||
|
|
||
|
if ( p_filename.size() > 4 )
|
||
|
__is_local_file = this->__filename.substr( 0, 4 ).compare( L"http" ) != 0;
|
||
|
}
|
||
|
|
||
|
void wa::Components::playlists::playlist_entry::SetTitle( const std::wstring &p_title )
|
||
|
{
|
||
|
this->__filetitle = p_title;
|
||
|
this->__is_cached = !p_title.empty();
|
||
|
}
|
||
|
|
||
|
|
||
|
void wa::Components::playlists::playlist_entry::SetLengthMilliseconds( int p_length_ms )
|
||
|
{
|
||
|
if ( p_length_ms <= 0 )
|
||
|
this->__length_ms = -1000;
|
||
|
else
|
||
|
this->__length_ms = p_length_ms;
|
||
|
}
|
||
|
|
||
|
|
||
|
void wa::Components::playlists::playlist_entry::SetMediahash( const std::wstring &p_mediahash )
|
||
|
{
|
||
|
this->__mediahash = p_mediahash;
|
||
|
}
|
||
|
|
||
|
void wa::Components::playlists::playlist_entry::SetSizeBytes( int p_size )
|
||
|
{
|
||
|
if ( p_size <= 0 )
|
||
|
this->__size = 0;
|
||
|
else
|
||
|
this->__size = p_size;
|
||
|
}
|
||
|
|
||
|
void wa::Components::playlists::playlist_entry::SetMetahash( const std::wstring &p_metahash )
|
||
|
{
|
||
|
this->__metahash = p_metahash;
|
||
|
}
|
||
|
|
||
|
void wa::Components::playlists::playlist_entry::SetCloudID( const std::wstring &p_cloud_id )
|
||
|
{
|
||
|
if ( _wtoi( p_cloud_id.c_str() ) > 0 )
|
||
|
this->__cloud_id = p_cloud_id;
|
||
|
else
|
||
|
this->__cloud_id.clear();
|
||
|
}
|
||
|
|
||
|
void wa::Components::playlists::playlist_entry::SetCloudStatus( const std::wstring &p_cloud_status )
|
||
|
{
|
||
|
if ( _wtoi( p_cloud_status.c_str() ) > 0 )
|
||
|
this->__cloud_status = p_cloud_status;
|
||
|
else
|
||
|
this->__cloud_status.clear();
|
||
|
}
|
||
|
|
||
|
void wa::Components::playlists::playlist_entry::SetCloudDevices( const std::wstring &p_cloud_devices )
|
||
|
{
|
||
|
this->__cloud_devices = p_cloud_devices;
|
||
|
}
|
||
|
|
||
|
|
||
|
|