#include "plugin.h" static struct plugin_api* rb; enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { struct mp3entry* id3; char track_path[MAX_PATH+1]; int fd, seek, result, len; char fname[MAX_PATH+1]; char display_line[25]; int f_num; bool exit = false; bool used = false; bool wrt_trk = false; int w,h; char *Lfiles[] = { "Not used", "/DEL.TXT", "/EDT.TXT", "/RIP.TXT", "/TAG.TXT", "/USR.TXT" }; char *Rfiles[] = { "Not used", "/HotLst1.m3u", "/HotLst2.m3u", "/HotLst3.m3u", "/HotLst4.m3u", "/HotLst5.m3u" }; TEST_PLUGIN_API(api); (void)parameter; rb = api; f_num = 1; id3 = rb->mpeg_current_track(); if (!id3) { rb->splash(HZ*2, 0, true, "Nothing Playing"); return PLUGIN_OK; } rb->lcd_setfont(FONT_SYSFIXED); while (!exit) { rb->strcpy((char *)display_line, (char *)" "); rb->memcpy(display_line,Lfiles[f_num] + 1, 3); rb->memcpy(display_line + 5,Rfiles[f_num] + 1, 7); rb->lcd_getstringsize("A",&w,&h); rb->lcd_clear_display(); rb->lcd_putsxy(0, LCD_HEIGHT/2 - h*2, "Add Track To:"); rb->lcd_putsxy(0, LCD_HEIGHT/2 , (char *) display_line); rb->lcd_putsxy(0, LCD_HEIGHT/2 + (h*2), "<< >>"); rb->lcd_update(); switch (rb->button_get(true)) { case BUTTON_LEFT: case BUTTON_F3 | BUTTON_LEFT: rb->strcpy(fname,Lfiles[f_num]); wrt_trk = true; used = true; exit = true; break; case BUTTON_RIGHT: case BUTTON_F3 | BUTTON_RIGHT: rb->strcpy(fname,Rfiles[f_num]); wrt_trk = true; used = true; exit = true; break; case BUTTON_UP: case BUTTON_F3 | BUTTON_UP: if(f_num == 5) f_num = 1; else f_num++; used = true; break; case BUTTON_DOWN: case BUTTON_F3 | BUTTON_DOWN: if(f_num == 1) f_num = 5; else f_num--; used = true; break; case BUTTON_F3 | BUTTON_REL: if ( used ) exit = true; used = true; break; case BUTTON_F3 | BUTTON_REPEAT: used = true; break; case BUTTON_OFF: rb->splash(HZ*2, 0, true, " - Cancelled -"); used = true; exit = true; break; } } rb->lcd_setfont(FONT_UI); if (wrt_trk){ fd = rb->open(fname, O_WRONLY); if (fd < 0) fd = rb->creat(fname, 0); if (fd > 0) { rb->strcpy(track_path, id3->path); len = rb->strlen(track_path); seek = rb->lseek(fd, 0, SEEK_END); track_path[len] = '\n'; result = rb->write(fd, track_path, len + 1); track_path[len] = '\0'; rb->close(fd); } rb->splash(HZ*2, 0, true, "Saved Pick"); } return PLUGIN_OK; }