Changes to file browser

Signed-off-by: Mahyar Koshkouei <deltabeard@users.noreply.github.com>
This commit is contained in:
Mahyar Koshkouei
2017-01-01 13:58:36 +00:00
parent 9920fd1ac3
commit f7fa518294
5 changed files with 92 additions and 33 deletions

View File

@@ -74,15 +74,13 @@ int playFlac(const char* in)
break; break;
if(kDown & (KEY_A | KEY_R)) if(kDown & (KEY_A | KEY_R))
playing = !playing;
if(playing == false || lastbuf == true)
{ {
printf("\33[2K\rPaused"); playing = !playing;
continue; printf("\33[2K\r%s", playing == false ? "Paused" : "");
} }
printf("\33[2K\r"); if(playing == false || lastbuf == true)
continue;
if(waveBuf[0].status == NDSP_WBUF_DONE) if(waveBuf[0].status == NDSP_WBUF_DONE)
{ {

View File

@@ -49,12 +49,14 @@ int main(int argc, char **argv)
chdir(DEFAULT_DIR); chdir(DEFAULT_DIR);
chdir("MUSIC"); chdir("MUSIC");
if((fileMax = listDir(from, MAX_LIST, 0)) < 0) if(listDir(from, MAX_LIST, 0) < 0)
{ {
err_print("Unable to list directory."); err_print("Unable to list directory.");
goto out; goto out;
} }
fileMax = getNumberFiles();
consoleSelect(&topScreen); consoleSelect(&topScreen);
puts("Playlist"); puts("Playlist");
consoleSelect(&bottomScreen); consoleSelect(&bottomScreen);
@@ -80,34 +82,49 @@ int main(int argc, char **argv)
if(kDown & KEY_START) if(kDown & KEY_START)
break; break;
if(kDown & KEY_UP) if((kDown & KEY_UP) && fileNum > 0)
{ {
if(fileNum > 0) fileNum--;
fileNum--;
if(fileMax - fileNum >= from && from != 0)
from--;
} }
if(kDown & KEY_DOWN) if((kDown & KEY_DOWN) && fileNum < fileMax)
{ {
if(fileNum < fileMax) fileNum++;
fileNum++;
if(fileNum >= MAX_LIST && fileMax - fileNum >= 0)
from++;
} }
consoleSelect(&topScreen);
printf("\rNum: %d, from: %d, max: %d ", fileNum, from, fileMax);
consoleSelect(&bottomScreen);
if(kDown & (KEY_DOWN | KEY_UP)) if(kDown & (KEY_DOWN | KEY_UP))
{ {
consoleClear(); consoleClear();
if((fileMax = listDir(from, MAX_LIST, fileNum)) < 0) if(listDir(from, MAX_LIST, fileNum) < 0)
{ {
err_print("Unable to list directory."); err_print("Unable to list directory.");
} }
} }
if((kDown & (KEY_A | KEY_R)) && (from == 0 && fileNum == 0)) /*
* Pressing B goes up a folder, as well as pressing A or R when ".."
* is selected.
*/
if((kDown & KEY_B) ||
((kDown & (KEY_A | KEY_R)) && (from == 0 && fileNum == 0)))
{ {
if(chdir("..") != 0) if(chdir("..") != 0)
err_print("chdir"); err_print("chdir");
fileMax = getNumberFiles();
consoleClear(); consoleClear();
if((fileMax = listDir(from, MAX_LIST, fileNum)) < 0) if(listDir(from, MAX_LIST, fileNum) < 0)
{ {
err_print("Unable to list directory."); err_print("Unable to list directory.");
} }
@@ -131,7 +148,7 @@ int main(int argc, char **argv)
dp = opendir(wd); dp = opendir(wd);
if (dp != NULL) if(dp != NULL)
{ {
char* file = NULL; char* file = NULL;
@@ -150,12 +167,15 @@ int main(int argc, char **argv)
err_print("chdir"); err_print("chdir");
fileNum = 0; fileNum = 0;
from = 0;
consoleClear(); consoleClear();
if((fileMax = listDir(from, MAX_LIST, fileNum)) < 0) fileMax = getNumberFiles();
if(listDir(from, MAX_LIST, fileNum) < 0)
{ {
err_print("Unable to list directory."); err_print("Unable to list directory.");
} }
closedir(dp);
free(wd); free(wd);
continue; continue;
} }
@@ -265,16 +285,21 @@ int listDir(int from, int max, int select)
if(countChr > 1 && from == 0) if(countChr > 1 && from == 0)
printf("%c../\n", select == 0 ? '>' : ' '); printf("%c../\n", select == 0 ? '>' : ' ');
#endif #endif
printf("%c../\n", select == 0 ? '>' : ' '); if(from == 0)
{
printf("%c../\n", select == 0 ? '>' : ' ');
/* Compensate for the fact that there will be one more line */
//max++;
}
while((ep = readdir(dp)) != NULL) while((ep = readdir(dp)) != NULL)
{ {
fileNum++; fileNum++;
if(fileNum < from) if(fileNum <= from)
continue; continue;
if(fileNum + from == max) if(fileNum == max + from)
break; break;
listed++; listed++;
@@ -297,6 +322,38 @@ err:
goto out; goto out;
} }
/**
* Get number of files in current working folder
*
* \return Number of files in current working folder, -1 on failure with
* errno set.
*/
int getNumberFiles(void)
{
DIR *dp;
struct dirent *ep;
char* wd = getcwd(NULL, 0);
int ret = 0;
if(wd == NULL)
goto err;
if((dp = opendir(wd)) == NULL)
goto err;
while((ep = readdir(dp)) != NULL)
ret++;
closedir(dp);
out:
return ret;
err:
ret = -1;
goto out;
}
/** /**
* Obtains file type. * Obtains file type.
* *

View File

@@ -7,6 +7,14 @@
* LICENSE file. * LICENSE file.
*/ */
/**
* Get number of files in current working folder
*
* \return Number of files in current working folder, -1 on failure with
* errno set.
*/
int getNumberFiles(void);
/** /**
* List current directory. * List current directory.
* *

View File

@@ -86,15 +86,13 @@ int playOpus(const char* in)
break; break;
if(kDown & (KEY_A | KEY_R)) if(kDown & (KEY_A | KEY_R))
playing = !playing;
if(playing == false || lastbuf == true)
{ {
printf("\33[2K\rPaused"); playing = !playing;
continue; printf("\33[2K\r%s", playing == false ? "Paused" : "");
} }
printf("\33[2K\r"); if(playing == false || lastbuf == true)
continue;
if(waveBuf[0].status == NDSP_WBUF_DONE) if(waveBuf[0].status == NDSP_WBUF_DONE)
{ {

View File

@@ -144,15 +144,13 @@ int playWav(const char *wav)
break; break;
if(kDown & (KEY_A | KEY_R)) if(kDown & (KEY_A | KEY_R))
playing = !playing;
if(playing == false || lastbuf == true)
{ {
printf("\33[2K\rPaused"); playing = !playing;
continue; printf("\33[2K\r%s", playing == false ? "Paused" : "");
} }
printf("\33[2K\r"); if(playing == false || lastbuf == true)
continue;
if(waveBuf[0].status == NDSP_WBUF_DONE) if(waveBuf[0].status == NDSP_WBUF_DONE)
{ {