Have fun
Code: Select all
// Fix stupid ZEN MX Bug: Playlists must define their tracks in 8.3 DOS style
// Convert every playlist <name> found in /playlist to <name>_mx. Old lists are not changed
// (c) Stefan Skopnik (sskopnik(at)web(dot)de)
/*
Insert in C:\Programme\MediaMonkey\Scripts\scripts.ini
[FixZenMXPlaylist]
FileName=FixZenMXPlaylist.js
ProcName=FixZenMXPlaylist
Order=1
DisplayName=Fix dumb ZEN MX playlist
;DisplayName=Korrektur von ZEN MX Playlisten
Description=Fix dumb ZEN MX playlist
;Description=Korrektur von ZEN MX Playlisten
Language=JScript
ScriptType=0
*/
var MyLang = 'de', // Define your language: 'en' = English, 'de' = German
OutDrive = "?", // Define your Zen MX Drive or leave "?" to find device
OutDir = "\\Playlist",
Scriptname = "FixZenMXPlaylist.js",
objFso = new ActiveXObject("Scripting.FileSystemObject"),
objDic = new ActiveXObject("Scripting.Dictionary"),
fc,
fin,
fout,
orgfile,
newfile,
newfilearr = new Array();
re = /\.m3u$/,
re2 = /_mx\.m3u$/,
re3 = /^#/,
newsuff = "_mx",
nrfiles = 0,
C_ForReading = 1,
Lang_rc = {
'de' : {
msg1 : "Folgende %1 neue Playlisten wurden im Verzeichnis %3 erstellt:\n\n",
msg2 : "Folgende %1 neue Playliste wurde im Verzeichnis %3 erstellt:\n\n",
msg4 : "Kein Zen MX Spieler gefunden!",
msg5 : "Zen MX Spieler in Laufwerk %1 gefunden!\nPlaylisten konvertieren?"
},
'en' : {
msg1 : "%1 new playlists where created in directory %3:\n\n",
msg2 : "%1 new playlist was created in directory %3:\n\n",
msg4 : "No Zen MX Player found!",
msg5 : "Found Zen MX Player in drive %1!\nConvert Playlists?"
}
},
Lang = Lang_rc[MyLang];
// some utillity functions
function sprintf() {
var savearg = arguments;
return savearg[0].replace(new RegExp("%(\\d+)","g"),
function ($0, $1, $2) { return savearg[$1]; }
);
}
function getDriveLetter(i) {
var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
s;
s = str.charAt(i);
return(s + ":");
}
function JS2VBArray(objJSArray) {
objDic.RemoveAll();
for (var i = 0; i < objJSArray.length; i++ ) {
objDic.add(i,objJSArray[i]);
}
return objDic.Items();
}
function getShortPath(filespec, nodrive) {
var f = objFso.GetFile(filespec),
ret = f.ShortPath;
if (nodrive) ret = ret.substr(2);
return(ret);
}
function convColltoArr(col) {
var ret = new Array();
for (var e = new Enumerator(col), i = 0; !e.atEnd(); e.moveNext(), i++) {
ret[i] = e.item();
}
return ret;
}
function getPath(fn) {
var stop = fn.lastIndexOf("\\");
if (stop==-1) return "";
return fn.slice(0,stop);
}
function getFilename(fn) {
var start = fn.lastIndexOf("\\");
return fn.slice(++start);
}
function getFilenamePrefix(fn) {
var ret = getFilename(fn),
stop = ret.lastIndexOf(".");
if (stop==-1) return ret;
return ret.slice(0,stop);
}
function getFilenameSuffix(fn) {
var ret = getFilename(fn),
start = ret.lastIndexOf(".");
if (start==-1) return "";
return ret.slice(++start);
}
function genNewPlaylistname(filespec) {
return getPath(filespec) + "\\" + getFilenamePrefix(filespec) + newsuff + "." + getFilenameSuffix(filespec);
}
function messageBox(s,t,b) {
return SDB.MessageBox(s, t, JS2VBArray(b));
}
// ---
function FixZenMXPlaylist() {
var ret,
devlist,
i;
// find the Drive letter of Zen MX
if (OutDrive == "?") {
devlist = SDB.Device.ActiveDeviceList("USBSTOR\\Disk&Ven_Creative&Prod_ZEN_MX"); // You have to look into the registry!
for (i = 0; i < devlist.Count;i++) {
if (devlist.FriendlyName(i) == "Creative ZEN MX USB Device") {
// messageBox(i + ": (" + devlist.DeviceID(i) + ") " + devlist.FriendlyName(i) + " " + devlist.DeviceInst(i) + " " + devlist.DriveLetterIndex(i), mtInformation, new Array(mbOk) );
OutDrive = getDriveLetter(devlist.DriveLetterIndex(i));
}
}
}
if (OutDrive == "?") {
messageBox(Lang.msg4, mtInformation, new Array(mbOk));
return(-1);
} else {
ret = messageBox(sprintf(Lang.msg5, OutDrive), mtConfirmation, new Array(mbOk, mbCancel));
if (ret == mrCancel) return (-2);
}
objDir = objFso.GetFolder(OutDrive + OutDir);
for (fc = new Enumerator(objDir.files); !fc.atEnd(); fc.moveNext()) {
ele = fc.item();
if (re.test(ele.Name) && !re2.test(ele.Name)) {
nrfiles++;
// WScript.Echo("File: " + ele.Path);
orgfile = ele.Path;
newfile = genNewPlaylistname(orgfile);
newfilearr.push(getFilename(newfile));
fin = objFso.OpenTextFile(orgfile, C_ForReading, false);
fout = objFso.CreateTextFile(newfile, true);
while (!fin.AtEndOfLine) {
l = fin.ReadLine();
if (!re3.test(l)) {
sn = getShortPath(OutDrive + l, true);
l = sn;
}
fout.WriteLine(l);
}
fin.Close();
fout.Close();
}
}
messageBox(sprintf(Lang[(nrfiles>1) ? 'msg1' : 'msg2'], nrfiles, OutDrive + OutDir) + newfilearr.join(", "),
mtInformation, new Array(mbOk)
);
}