Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
159
Src/playlist/PLSLoader.cpp
Normal file
159
Src/playlist/PLSLoader.cpp
Normal file
|
@ -0,0 +1,159 @@
|
|||
#include "PLSLoader.h"
|
||||
|
||||
#include "../nu/AutoChar.h"
|
||||
#include "../nu/AutoWide.h"
|
||||
#include <shlwapi.h>
|
||||
#include <strsafe.h>
|
||||
|
||||
|
||||
class PLSInfo : public ifc_plentryinfo
|
||||
{
|
||||
public:
|
||||
PLSInfo( const wchar_t *_filename, int _entryNum ) : filename( _filename ), entryNum( _entryNum )
|
||||
{}
|
||||
|
||||
const wchar_t *GetExtendedInfo( const wchar_t *parameter )
|
||||
{
|
||||
static wchar_t data[ 1024 ];
|
||||
wchar_t fieldbuf[ 100 ] = { 0 };
|
||||
|
||||
StringCchPrintfW( fieldbuf, 100, L"%s%d", parameter, entryNum );
|
||||
|
||||
GetPrivateProfileStringW( L"playlist", fieldbuf, L"", data, 1024, filename );
|
||||
|
||||
if ( data[ 0 ] )
|
||||
return data;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
RECVS_DISPATCH;
|
||||
|
||||
const wchar_t *filename;
|
||||
int entryNum;
|
||||
};
|
||||
|
||||
#define CBCLASS PLSInfo
|
||||
START_DISPATCH;
|
||||
CB( IFC_PLENTRYINFO_GETEXTENDEDINFO, GetExtendedInfo )
|
||||
END_DISPATCH;
|
||||
#undef CBCLASS
|
||||
|
||||
int PLSLoader::OnFileHelper( ifc_playlistloadercallback *playlist, const wchar_t *trackName, const wchar_t *title, int length, const wchar_t *rootPath, ifc_plentryinfo *extraInfo )
|
||||
{
|
||||
if ( length == -1000 )
|
||||
length = -1;
|
||||
|
||||
int ret;
|
||||
if ( wcsstr( trackName, L"://" ) || PathIsRootW( trackName ) )
|
||||
{
|
||||
ret = playlist->OnFile( trackName, title, length, extraInfo );
|
||||
}
|
||||
else
|
||||
{
|
||||
wchar_t fullPath[ MAX_PATH ] = { 0 };
|
||||
if ( PathCombineW( fullPath, rootPath, trackName ) )
|
||||
{
|
||||
wchar_t canonicalizedPath[ MAX_PATH ] = { 0 };
|
||||
PathCanonicalizeW( canonicalizedPath, fullPath );
|
||||
ret = playlist->OnFile( canonicalizedPath, title, length, extraInfo );
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = ifc_playlistloadercallback::LOAD_CONTINUE;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int PLSLoader::Load( const wchar_t *filename, ifc_playlistloadercallback *playlist )
|
||||
{
|
||||
int x, numfiles;
|
||||
int ext = 0;
|
||||
char fieldbuf[ 100 ] = { 0 };
|
||||
char fnbuf[ FILENAME_SIZE ] = { 0 };
|
||||
char tmp[ MAX_PATH ] = { 0 };
|
||||
|
||||
wchar_t rootPath[ MAX_PATH ] = { 0 };
|
||||
const wchar_t *callbackPath = playlist->GetBasePath();
|
||||
if ( callbackPath )
|
||||
lstrcpynW( rootPath, callbackPath, MAX_PATH );
|
||||
else
|
||||
{
|
||||
lstrcpynW( rootPath, filename, MAX_PATH );
|
||||
PathRemoveFileSpecW( rootPath );
|
||||
}
|
||||
|
||||
tmp[ 0 ] = (char)rootPath[ 0 ];
|
||||
tmp[ 1 ] = (char)rootPath[ 1 ];
|
||||
tmp[ 2 ] = (char)rootPath[ 2 ];
|
||||
|
||||
AutoChar fn( filename );
|
||||
|
||||
numfiles = GetPrivateProfileIntA( "playlist", "NumberOfEntries", 0, fn );
|
||||
ext = GetPrivateProfileIntA( "playlist", "Version", 1, fn );
|
||||
if ( numfiles == 0 )
|
||||
return IFC_PLAYLISTLOADER_FAILED;
|
||||
|
||||
for ( x = 1; x <= numfiles; x++ )
|
||||
{
|
||||
int flen = -1;
|
||||
char ftitle[ FILETITLE_SIZE ] = "";
|
||||
StringCchPrintfA( fieldbuf, 100, "File%d", x );
|
||||
GetPrivateProfileStringA( "playlist", fieldbuf, "", fnbuf, FILENAME_SIZE, fn );
|
||||
if ( ext )
|
||||
{
|
||||
StringCchPrintfA( fieldbuf, 100, "Title%d", x );
|
||||
GetPrivateProfileStringA( "playlist", fieldbuf, "", ftitle, FILETITLE_SIZE, fn );
|
||||
StringCchPrintfA( fieldbuf, 100, "Length%d", x );
|
||||
flen = GetPrivateProfileIntA( "playlist", fieldbuf, -1, fn );
|
||||
}
|
||||
|
||||
if ( *fnbuf )
|
||||
{
|
||||
char *p;
|
||||
char buf[ 512 ] = { 0 };
|
||||
|
||||
p = fnbuf;
|
||||
|
||||
if ( strncmp( p, "\\\\", 2 ) && strncmp( p + 1, ":\\", 2 ) && !strstr( p, ":/" ) )
|
||||
{
|
||||
if ( p[ 0 ] == '\\' )
|
||||
{
|
||||
buf[ 0 ] = tmp[ 0 ];
|
||||
buf[ 1 ] = tmp[ 1 ];
|
||||
lstrcpynA( buf + 2, p, 510 );
|
||||
buf[ 511 ] = 0;
|
||||
p = buf;
|
||||
}
|
||||
}
|
||||
|
||||
PLSInfo info( filename, x );
|
||||
|
||||
int ret;
|
||||
if ( ftitle[ 0 ] )
|
||||
{
|
||||
ret = OnFileHelper( playlist, AutoWide( p ), AutoWide( ftitle ), flen * 1000, rootPath, &info );
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = OnFileHelper( playlist, AutoWide( p ), 0, -1, rootPath, &info );
|
||||
}
|
||||
|
||||
if ( ret != ifc_playlistloadercallback::LOAD_CONTINUE )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return IFC_PLAYLISTLOADER_SUCCESS;
|
||||
}
|
||||
|
||||
#define CBCLASS PLSLoader
|
||||
START_DISPATCH;
|
||||
CB( IFC_PLAYLISTLOADER_LOAD, Load )
|
||||
END_DISPATCH;
|
||||
#undef CBCLASS
|
Loading…
Add table
Add a link
Reference in a new issue