aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Library/ml_disc/M3UWriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Library/ml_disc/M3UWriter.cpp')
-rw-r--r--Src/Plugins/Library/ml_disc/M3UWriter.cpp91
1 files changed, 91 insertions, 0 deletions
diff --git a/Src/Plugins/Library/ml_disc/M3UWriter.cpp b/Src/Plugins/Library/ml_disc/M3UWriter.cpp
new file mode 100644
index 00000000..d4ec2a13
--- /dev/null
+++ b/Src/Plugins/Library/ml_disc/M3UWriter.cpp
@@ -0,0 +1,91 @@
+#include "M3UWriter.h"
+#include <shlwapi.h>
+
+static void MakeRelativePathName( const char *filename, char *outFile, const char *path )
+{
+ char outPath[ MAX_PATH ] = { 0 };
+
+ int common = PathCommonPrefixA( path, filename, outPath );
+ if ( common && common == lstrlenA( path ) )
+ {
+ PathAddBackslashA( outPath );
+ const char *p = filename + lstrlenA( outPath );
+ lstrcpyA( outFile, p );
+ }
+ else if ( !PathIsUNCA( filename ) && PathIsSameRootA( filename, path ) )
+ {
+ lstrcpyA( outFile, filename + 2 );
+ }
+}
+
+M3UWriter::M3UWriter()
+{
+ memset( basePath, 0, sizeof( basePath ) );
+}
+
+M3UWriter::~M3UWriter()
+{
+ Close();
+}
+
+int M3UWriter::Open( char *filename, int extendedMode )
+{
+ fp = fopen( filename, "wt" );
+ if ( !fp )
+ return 0;
+
+ if ( extendedMode )
+ fprintf( fp, "#EXTM3U\n" );
+
+ extended = extendedMode;
+
+ lstrcpynA( basePath, filename, MAX_PATH );
+ PathRemoveFileSpecA( basePath );
+
+ return 1;
+}
+
+int M3UWriter::Open( FILE *_fp, char *filename, int extendedMode )
+{
+ fp = _fp;
+ if ( !fp )
+ return 0;
+
+ if ( extendedMode )
+ fprintf( fp, "#EXTM3U\n" );
+
+ extended = extendedMode;
+
+ lstrcpynA( basePath, filename, MAX_PATH );
+ PathRemoveFileSpecA( basePath );
+
+ return 1;
+}
+
+void M3UWriter::SetFilename( char *filename )
+{
+ //char temp[ MAX_PATH ] = { 0 };
+ //MakeRelativePathName( filename, temp, basePath );
+ fprintf( fp, "%s\n", filename );
+}
+
+void M3UWriter::SetExtended( char *filename, char *title, int length )
+{
+ if ( !extended )
+ SetFilename( filename );
+ else
+ {
+ //char temp[ MAX_PATH ] = { 0 };
+ //MakeRelativePathName( filename, temp, basePath );
+ fprintf( fp, "#EXTINF:%d,%s\n%s\n", length, title, filename );
+ }
+}
+
+void M3UWriter::Close()
+{
+ if ( fp != NULL )
+ {
+ fclose( fp );
+ fp = NULL;
+ }
+} \ No newline at end of file