/* --- BROWSE.CPP ---
/
/ Written by Phil Himsworth, 2001-2002.
/
/ Contains everything for the "Browse Music Collection" pages.
/*/
#include Error! The path requested is illegal. It contains the .. directory, which could present a security risk. Error! Couldn't open directory. Ensure you haven't mistyped the path, and that the Music Collection root directory is correct. \n\n");
// table format?
prints(conn,"
\n");
return;
}
// Hidden directory
if ((find->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN)
{
return;
}
// System directory? Eh? *** Look at this ***
if ((find->dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) == FILE_ATTRIBUTE_SYSTEM)
{
return;
}
// normal directory
fileinfo *newfile = new fileinfo;
search->dnodes++;
CopyMemory(&newfile->path,mp3path,MAX_PATH);
CopyMemory(&newfile->name,find->cFileName,MAX_PATH);
newfile->next = NULL;
newfile->prev = NULL;
// No entries in list
if (!search->firstdir)
{
search->firstdir = newfile;
return;
}
else // already entries in list
{
if (GoesBefore(newfile->name,search->firstdir->name))
{
search->firstdir->prev = newfile;
newfile->next = search->firstdir;
search->firstdir = newfile;
}
else // not first in list
{
Insert(newfile,search->firstdir);
}
}
}
else
{
// files
/*
This new version with linked lists NO LONGER checks for Winamp files here!
All files are added to the list in the correct order.
*/
fileinfo *newfile = new fileinfo;
search->fnodes++;
CopyMemory(&newfile->path,mp3path,MAX_PATH);
CopyMemory(&newfile->name,find->cFileName,MAX_PATH);
newfile->next = NULL;
newfile->prev = NULL;
// No entries in list
if (!search->firstfile)
{
search->firstfile = newfile;
return;
}
else // already entries in list
{
if (GoesBefore(newfile->name,search->firstfile->name))
{
search->firstfile->prev = newfile;
newfile->next = search->firstfile;
search->firstfile = newfile;
}
else // new file should not be first in list
{
Insert(newfile,search->firstfile);
}
}
}
}
// --------------------------------------------------------------------------------
// Checks for ../ to ensure selected directory cannot be higher than mp3root
bool GoodPath(char* mp3path)
{
int i=0;
while (mp3path[i] != 0 && i\n\n... Music Collection ...\n
\n");
prints(conn,"");
prints(conn,mp3path);
prints(conn,"
\n");
WIN32_FIND_DATA find;
HANDLE file;
if (!GoodPath(mp3path))
{
prints(conn,"\n");
fileinfo *oldnode = NULL;
fileinfo *currentdir = search.firstdir;
while (currentdir != NULL)
{
wsprintf(temp,"%s%s",currentdir->path,currentdir->name);
Escape_url(temp);
prints(conn,"
");
prints(conn,"\n\n");
// gap on the left
prints(conn," \n");
oldnode = currentdir;
currentdir = currentdir->next;
delete oldnode;
search.dnodes--;
}
oldnode = NULL;
fileinfo *currentfile = search.firstfile;
while (currentfile != NULL)
{
wsprintf(temp,"%s%s",currentfile->path,currentfile->name);
Escape_url(temp);
if (IsWinampFile(currentfile))
{
prints(conn," \n");
prints(conn,"");
wsprintf(temp2,"/ld?path=%s", temp);
ImgLink(conn,temp2,IDR_PLAYDIR,"Load this directory",0,0,T_BOTTOM);
prints(conn," \n");
prints(conn,""); // cFileName \n
wsprintf(temp2,"/browse?path=%s%%5c",temp);
ImgLink(conn,temp2,IDR_DIRECTORY,"Explore this directory",0,0,T_MAIN);
prints(conn,"");
prints(conn,currentdir->name);
prints(conn," \n");
prints(conn,"\n");
// gap on the left
prints(conn," \n");
}
else // not a winamp file
{
if (show_other_files == 1)
{
prints(conn," \n");
// Download link - disk picture
prints(conn,"");
if (dl_wa_files == 1)
{
wsprintf(temp2,"/dl?file=%s",temp);
ImgLink(conn,temp2,IDR_DOWNLOAD,"Download this file",0,0,T_MAIN);
}
else
{
prints(conn," ");
}
prints(conn," \n");
// Play link - WA file picture
prints(conn,"");
wsprintf(temp2,"/ld?path=%s",temp);
if (currentfile->playlist)
ImgLink(conn,temp2,IDR_PLAYLIST,"Load this playlist",0,0,T_BOTTOM);
else
if (currentfile->urlsct)
ImgLink(conn,temp2,IDR_URLSCT,"Load this URL",0,0,T_BOTTOM);
else
ImgLink(conn,temp2,IDR_WAFILE,"Load this track",0,0,T_BOTTOM);
// Play link - text name
wsprintf(temp2," \n");
else
prints(conn,"\">");
prints(conn,currentfile->name);
prints(conn," \n");
prints(conn,"\n");
// gap on the left
prints(conn," \n");
}
}
oldnode = currentfile;
currentfile = currentfile->next;
delete oldnode;
search.fnodes--;
}
prints(conn," \n");
prints(conn,"");
if (dl_other_files == 1)
{
wsprintf(temp2,"/dl?file=%s",temp);
ImgLink(conn,temp2,IDR_DOWNLOAD,"Download this file",0,0,T_MAIN);
}
else
{
prints(conn," ");
}
prints(conn," \n");
prints(conn,"");
Img(conn,IDR_FILE,"This is not a winamp file",0,0);
prints(conn," \n"); // non-winamp file - display greyed out
prints(conn,currentfile->name);
prints(conn," \n");
prints(conn,"
"); printsi(conn,search.dnodes); prints(conn,"·"); printsi(conn,search.fnodes); prints(conn,"
\n"); */ } } } return ST_CLOSEBODY; }