123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- #include "main.h"
- #include "MergePlaylist.h"
- #include <strsafe.h>
- merge_pl_entry::merge_pl_entry( const wchar_t *p_filename, const wchar_t *p_title, int p_length_ms )
- {
- SetFilename( p_filename );
- SetTitle( p_title );
- SetLengthMilliseconds( p_length_ms );
- }
- merge_pl_entry::~merge_pl_entry()
- {
- plstring_release( this->filename );
- plstring_release( this->filetitle );
- }
- size_t merge_pl_entry::GetFilename( wchar_t *p_filename, size_t filenameCch )
- {
- if ( !this->filename )
- return 0;
- if ( !p_filename )
- return wcslen( this->filename );
- if ( !this->filename[ 0 ] )
- return 0;
- StringCchCopyW( p_filename, filenameCch, this->filename );
- return 1;
- }
- size_t merge_pl_entry::GetTitle( wchar_t *p_title, size_t titleCch )
- {
- if ( !this->filetitle )
- return 0;
- if ( !p_title )
- return wcslen( this->filetitle );
- if ( !this->filetitle[ 0 ] )
- return 0;
- StringCchCopyW( p_title, titleCch, this->filetitle );
- return 1;
- }
- int merge_pl_entry::GetLengthInMilliseconds()
- {
- return length;
- }
- size_t merge_pl_entry::GetExtendedInfo( const wchar_t *metadata, wchar_t *info, size_t infoCch )
- {
- return 0;
- }
- void merge_pl_entry::SetFilename( const wchar_t *p_filename )
- {
- plstring_release( this->filename );
- if ( p_filename && p_filename[ 0 ] )
- this->filename = plstring_wcsdup( p_filename );
- else
- this->filename = 0;
- }
- void merge_pl_entry::SetTitle( const wchar_t *p_title )
- {
- plstring_release( filetitle );
- if ( p_title && p_title[ 0 ] )
- {
- this->filetitle = plstring_wcsdup( p_title );
- this->cached = true;
- }
- else
- filetitle = 0;
- }
- void merge_pl_entry::SetLengthMilliseconds( int p_length_ms )
- {
- if ( p_length_ms <= 0 )
- this->length = -1000;
- else
- this->length = p_length_ms;
- }
- MergePlaylist::MergePlaylist()
- {
- total_time = 0;
- }
- void MergePlaylist::Clear()
- {
- for ( merge_pl_entry *l_merged_entry : entries )
- delete l_merged_entry;
- entries.clear();
- }
- void MergePlaylist::OnFile( const wchar_t *p_filename, const wchar_t *p_title, int lengthInMS, ifc_plentryinfo *info )
- {
- if ( lengthInMS > 0 )
- total_time += lengthInMS;
- entries.push_back( new merge_pl_entry( p_filename, p_title, lengthInMS ) );
- }
- void MergePlaylist::AppendWithInfo( const wchar_t *p_filename, const wchar_t *p_title, int lengthInMS )
- {
- if ( lengthInMS > 0 )
- total_time += lengthInMS;
- entries.push_back( new merge_pl_entry( p_filename, p_title, lengthInMS ) );
- }
- MergePlaylist::~MergePlaylist()
- {
- Clear();
- }
- size_t MergePlaylist::GetNumItems()
- {
- return entries.size();
- }
- size_t MergePlaylist::GetItem( size_t item, wchar_t *p_filename, size_t filenameCch )
- {
- if ( item >= entries.size() )
- return 0;
- return entries[ item ]->GetFilename( p_filename, filenameCch );
- }
- size_t MergePlaylist::GetItemTitle( size_t item, wchar_t *p_title, size_t titleCch )
- {
- if ( item >= entries.size() )
- return 0;
- return entries[ item ]->GetTitle( p_title, titleCch );
- }
- const wchar_t *MergePlaylist::ItemTitle( size_t item )
- {
- if ( item >= entries.size() )
- return 0;
- return entries[ item ]->filetitle;
- }
- const wchar_t *MergePlaylist::ItemName( size_t item )
- {
- if ( item >= entries.size() )
- return 0;
- return entries[ item ]->filename;
- }
- int MergePlaylist::GetItemLengthMilliseconds( size_t item )
- {
- if ( item >= entries.size() )
- return -1;
- return entries[ item ]->GetLengthInMilliseconds();
- }
- size_t MergePlaylist::GetItemExtendedInfo( size_t item, const wchar_t *metadata, wchar_t *info, size_t infoCch )
- {
- if ( item >= entries.size() )
- return 0;
- return entries[ item ]->GetExtendedInfo( metadata, info, infoCch );
- }
- void MergePlaylist::SetItemFilename( size_t item, const wchar_t *p_filename )
- {
- if ( item < entries.size() )
- entries[ item ]->SetFilename( p_filename );
- }
- void MergePlaylist::SetItemTitle( size_t item, const wchar_t *p_title )
- {
- if ( item < entries.size() )
- entries[ item ]->SetTitle( p_title );
- }
- void MergePlaylist::SetItemLengthMilliseconds( size_t item, int p_length_ms )
- {
- if ( item < entries.size() )
- entries[ item ]->SetLengthMilliseconds( p_length_ms );
- }
- void MergePlaylist::AppendPlaylist( MergePlaylist © )
- {
- for ( merge_pl_entry *l_merged_entry : copy.entries )
- {
- if ( l_merged_entry->filename && !HasFilename( l_merged_entry->filename ) )
- {
- if ( l_merged_entry->length > 0 )
- total_time += l_merged_entry->length;
- entries.push_back( l_merged_entry );
- }
- }
- copy.entries.clear();
- }
- bool MergePlaylist::HasFilename( const wchar_t *p_filename )
- {
- for ( merge_pl_entry *l_merged_entry : entries )
- {
- if ( l_merged_entry->filename && !_wcsicmp( p_filename, l_merged_entry->filename ) )
- return true;
- }
- return false;
- }
- #ifdef CBCLASS
- #undef CBCLASS
- #endif
- #define CBCLASS MergePlaylist
- START_MULTIPATCH;
- START_PATCH(patch_playlist)
- M_VCB(patch_playlist, ifc_playlist, IFC_PLAYLIST_CLEAR, Clear)
- //M_VCB(patch_playlist, ifc_playlist, IFC_PLAYLIST_APPENDWITHINFO, AppendWithInfo)
- //M_VCB(patch_playlist, ifc_playlist, IFC_PLAYLIST_APPEND, Append)
- M_CB(patch_playlist, ifc_playlist, IFC_PLAYLIST_GETNUMITEMS, GetNumItems)
- M_CB(patch_playlist, ifc_playlist, IFC_PLAYLIST_GETITEM, GetItem)
- M_CB(patch_playlist, ifc_playlist, IFC_PLAYLIST_GETITEMTITLE, GetItemTitle)
- M_CB(patch_playlist, ifc_playlist, IFC_PLAYLIST_GETITEMLENGTHMILLISECONDS, GetItemLengthMilliseconds)
- M_CB(patch_playlist, ifc_playlist, IFC_PLAYLIST_GETITEMEXTENDEDINFO, GetItemExtendedInfo)
- NEXT_PATCH(patch_playlistloadercallback)
- M_VCB(patch_playlistloadercallback, ifc_playlistloadercallback, IFC_PLAYLISTLOADERCALLBACK_ONFILE, OnFile);
- END_PATCH
- END_MULTIPATCH;
|