Thread: MAKI Cheats
View Single Post
Old 20th February 2016, 01:02   #909
Plague
f(caffeine){
return wasabi;
}
(Forum King)
 
Plague's Avatar
 
Join Date: Jul 2001
Location: Sweden
Posts: 3,984
Local file path string handling in maki

Aight, so it's not exactly straight forward to do file handling in maki.
One problem is that backslashes in strings cannot easily be handled in maki.
For example, consider this path (which is what a path from getPlayItemString() would look like):
file:\\c:\music\artist1\album1\song1.mp3

What if I want to get a string with only:
c:\music\artist1 ?

That's not easy.
getPath(getPlayItemString()) will only return:
file:\\c:\music\artist1\album1

We still need to remove:
file:\\
and:
\album1

Backslash is an escape character, so to search for a backslash in a string, one would normally have to write two backslashes: "\\".
But, the compiler will not compile the script if one tries to do that.
Another way is to look for the ASCII code for backslash: 92
But, if one tries to do a string search for Chr(92), it will return true for every single character in that string.
Not even getToken will work with backslash as separator.

However, there is one way to do it: urlEncode.
If we urlEncode the string, then every backslash will be replaced with: %5C
Now that we can search for.

So, here is a small script that finds the parent folder of the currently playing file:
PHP Code:
// get the complete path to the currently playing file.
string path getPath(getPlayItemString());
string parentpath "";

if (
strlen(path) > 0) {
    
// make sure the file is a local file by searching for "file:\\"
    // the backslashes in "file:\\" are not included in this search, because the script will not compile with them included.
    // we still need to remove the backslashes later however.
    
int start strsearch(path"file:");
    if (
start > -1) {
        
// the 7 is the number of characters to remove ( file:\\ )
        // we must urlEncode the string, because we cannot search for a single backslash otherwise
        
path urlEncode(strright(pathstrlen(path) - (start 7)));
        
int i strlen(path) - 1;
        while (
> -1) {
            
// search for the last backslash ( %5C ) position.
            // we urlDecode all text before that position.
            // the parentpath will then be that decoded text.
            
if (getToken(strright(pathstrlen(path) - i), "%5C"1) != "") {
                
parentpath urlDecode(strleft(pathi));
                break;
            }
            else
                
i--;
        }
    }
}

if (
parentpath != "") {
    
// do stuff
    // this messagebox will show the parent folder path
    
messagebox(parentpath"test"0"");

Plague is offline   Reply With Quote