forked from len0rd/rockbox
Open_Plugins Add Features
Added an entry 'Add' to the main screen to lessen confusion side note: its actually a shortcut back to this plugin with flag '-add' passed as a parameter Change-Id: Ifeb0a1e5be99764b1d25d5a3b0e00f1449ec3d78
This commit is contained in:
parent
f647cde3c7
commit
87ad55b06e
1 changed files with 43 additions and 12 deletions
|
@ -51,7 +51,7 @@ const off_t op_entry_sz = sizeof(struct open_plugin_entry_t);
|
||||||
/* we only need the names for the first menu so don't bother reading paths yet */
|
/* we only need the names for the first menu so don't bother reading paths yet */
|
||||||
const off_t op_name_sz = OPEN_PLUGIN_NAMESZ + (op_entry.name - (char*)&op_entry);
|
const off_t op_name_sz = OPEN_PLUGIN_NAMESZ + (op_entry.name - (char*)&op_entry);
|
||||||
|
|
||||||
static uint32_t op_entry_add_path(const char *key, const char *plugin, const char *parameter);
|
static uint32_t op_entry_add_path(const char *key, const char *plugin, const char *parameter, bool use_key);
|
||||||
|
|
||||||
static bool _yesno_pop(const char* text)
|
static bool _yesno_pop(const char* text)
|
||||||
{
|
{
|
||||||
|
@ -175,7 +175,7 @@ static int op_entry_set_path(void)
|
||||||
if (op_entry.path[0] == '\0')
|
if (op_entry.path[0] == '\0')
|
||||||
rb->strcpy(op_entry.path, PLUGIN_DIR"/");
|
rb->strcpy(op_entry.path, PLUGIN_DIR"/");
|
||||||
|
|
||||||
rb->browse_context_init(&browse, SHOW_ALL, BROWSE_SELECTONLY, "",
|
rb->browse_context_init(&browse, SHOW_ALL, BROWSE_SELECTONLY, rb->str(LANG_ADD),
|
||||||
Icon_Plugin, op_entry.path, NULL);
|
Icon_Plugin, op_entry.path, NULL);
|
||||||
|
|
||||||
browse.buf = tmp_buf;
|
browse.buf = tmp_buf;
|
||||||
|
@ -289,12 +289,13 @@ static int op_entry_transfer(int fd, int fd_tmp,
|
||||||
return entries + 1;
|
return entries + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t op_entry_add_path(const char *key, const char *plugin, const char *parameter)
|
static uint32_t op_entry_add_path(const char *key, const char *plugin, const char *parameter, bool use_key)
|
||||||
{
|
{
|
||||||
int len;
|
int len, extlen;
|
||||||
uint32_t hash;
|
uint32_t hash;
|
||||||
char *pos = "";;
|
char *pos = "";;
|
||||||
int fd_tmp = -1;
|
int fd_tmp = -1;
|
||||||
|
use_key = (use_key == true && key != NULL);
|
||||||
|
|
||||||
if (key)
|
if (key)
|
||||||
{
|
{
|
||||||
|
@ -313,13 +314,20 @@ static uint32_t op_entry_add_path(const char *key, const char *plugin, const cha
|
||||||
if (plugin)
|
if (plugin)
|
||||||
{
|
{
|
||||||
/* name */
|
/* name */
|
||||||
|
if (use_key)
|
||||||
|
{
|
||||||
|
op_entry.lang_id = -1;
|
||||||
|
rb->strlcpy(op_entry.name, key, OPEN_PLUGIN_NAMESZ);
|
||||||
|
}
|
||||||
|
|
||||||
if (pathbasename(plugin, (const char **)&pos) == 0)
|
if (pathbasename(plugin, (const char **)&pos) == 0)
|
||||||
pos = "\0";
|
pos = "\0";
|
||||||
if (op_entry.name[0] == '\0' || op_entry.lang_id >= 0)
|
if (op_entry.name[0] == '\0' || op_entry.lang_id >= 0)
|
||||||
rb->strlcpy(op_entry.name, pos, OPEN_PLUGIN_NAMESZ);
|
rb->strlcpy(op_entry.name, pos, OPEN_PLUGIN_NAMESZ);
|
||||||
|
|
||||||
len = rb->strlen(pos);
|
len = rb->strlen(pos);
|
||||||
if(len > 5 && rb->strcasecmp(&(pos[len-5]), "." ROCK_EXT) == 0)
|
extlen = rb->strlen("." ROCK_EXT);
|
||||||
|
if(len > extlen && rb->strcasecmp(&(pos[len-extlen]), "." ROCK_EXT) == 0)
|
||||||
{
|
{
|
||||||
fd_tmp = rb->open(OPEN_PLUGIN_DAT ".tmp", O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
fd_tmp = rb->open(OPEN_PLUGIN_DAT ".tmp", O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
||||||
if (fd_tmp < 0)
|
if (fd_tmp < 0)
|
||||||
|
@ -398,7 +406,7 @@ void op_entry_browse_add(int selection)
|
||||||
else
|
else
|
||||||
key = op_entry.path;
|
key = op_entry.path;
|
||||||
|
|
||||||
op_entry_add_path(key, op_entry.path, NULL);
|
op_entry_add_path(key, op_entry.path, NULL, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -681,7 +689,7 @@ static void edit_menu(int selection)
|
||||||
if (param[0] == '\0')
|
if (param[0] == '\0')
|
||||||
param = NULL;
|
param = NULL;
|
||||||
|
|
||||||
op_entry_add_path(NULL, op_entry.path, param);
|
op_entry_add_path(NULL, op_entry.path, param, false);
|
||||||
fd_dat = rb->open(OPEN_PLUGIN_DAT, O_RDWR, 0666);
|
fd_dat = rb->open(OPEN_PLUGIN_DAT, O_RDWR, 0666);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -737,11 +745,27 @@ enum plugin_status plugin_start(const void* parameter)
|
||||||
bool exit = false;
|
bool exit = false;
|
||||||
|
|
||||||
const int creat_flags = O_RDWR | O_CREAT;
|
const int creat_flags = O_RDWR | O_CREAT;
|
||||||
|
|
||||||
|
reopen_datfile:
|
||||||
fd_dat = rb->open(OPEN_PLUGIN_DAT, creat_flags, 0666);
|
fd_dat = rb->open(OPEN_PLUGIN_DAT, creat_flags, 0666);
|
||||||
if (!fd_dat)
|
if (!fd_dat)
|
||||||
exit = true;
|
exit = true;
|
||||||
|
|
||||||
items = rb->lseek(fd_dat, 0, SEEK_END) / op_entry_sz;
|
items = rb->lseek(fd_dat, 0, SEEK_END) / op_entry_sz;
|
||||||
|
if (parameter)
|
||||||
|
{
|
||||||
|
path = (char*)parameter;
|
||||||
|
while (path[0] == ' ')
|
||||||
|
path++;
|
||||||
|
|
||||||
|
if (strncasecmp(path, "-add", 4) == 0)
|
||||||
|
{
|
||||||
|
parameter = NULL;
|
||||||
|
op_entry_browse_add(-1);
|
||||||
|
rb->close(fd_dat);
|
||||||
|
goto reopen_datfile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (parameter)
|
if (parameter)
|
||||||
{
|
{
|
||||||
|
@ -781,7 +805,7 @@ enum plugin_status plugin_start(const void* parameter)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
op_entry_read(fd_dat, selection, op_entry_sz);
|
op_entry_read(fd_dat, selection, op_entry_sz);
|
||||||
if (op_entry_add_path(parameter, parameter, "\0") > 0)
|
if (op_entry_add_path(parameter, parameter, "\0", false) > 0)
|
||||||
{
|
{
|
||||||
selection = 0;
|
selection = 0;
|
||||||
items++;
|
items++;
|
||||||
|
@ -792,12 +816,19 @@ enum plugin_status plugin_start(const void* parameter)
|
||||||
}
|
}
|
||||||
}/* OP_EXT */
|
}/* OP_EXT */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (items == 0 && !exit)
|
if (items < 1 && !exit)
|
||||||
{
|
{
|
||||||
rb->plugin_open(rb->plugin_get_current_filename(), NULL);
|
char* cur_filename = rb->plugin_get_current_filename();
|
||||||
|
|
||||||
|
if (op_entry_add_path(rb->str(LANG_ADD), cur_filename, "-add", true))
|
||||||
|
{
|
||||||
|
rb->close(fd_dat);
|
||||||
|
parameter = NULL;
|
||||||
|
goto reopen_datfile;
|
||||||
|
}
|
||||||
rb->close(fd_dat);
|
rb->close(fd_dat);
|
||||||
return PLUGIN_GOTO_PLUGIN;
|
return PLUGIN_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue