Added app_args config setting for fileassoc.

This commit is contained in:
yellows8 2020-04-06 10:34:44 -04:00
parent 88fe495bd8
commit f4067d64f3
No known key found for this signature in database
GPG Key ID: 0AF90DA3F1E60E43

View File

@ -210,7 +210,7 @@ bool menuEntryLoad(menuEntry_s* me, const char* name, bool shortcut, bool check_
menu_s *menu_fileassoc = menuFileassocGetCurrent();
menuEntry_s* fileassoc_me = NULL;
char *strptr = NULL;
char tempbuf[PATH_MAX+1];
char tempbuf[PATH_MAX+16];
//bool isOldAppFolder = false;
if (check_exists && !fsobjExists(me->path)) return false;
@ -504,9 +504,28 @@ bool menuEntryLoad(menuEntry_s* me, const char* name, bool shortcut, bool check_
// Initialize the argument data
argData_s* ad = &me->args;
argData_s* ad_assoc = &fileassoc_me->args;
char *arg_src = (char*)&ad_assoc->buf[1];
bool ftoken_found=0;
ad->dst = (char*)&ad->buf[1];
launchAddArg(ad, fileassoc_me->path);
launchAddArg(ad, me->path);
for (u32 argi=0; argi<ad_assoc->buf[0]; argi++, arg_src+= strlen(arg_src)+1) {
if (argi) {
strptr = strchr(arg_src, '%');
if (strptr && strptr[0] && strptr[1] && (strptr == arg_src || strptr[-1] != '\\')) {
if (strptr[1] == 'f') {
memset(tempbuf, 0, sizeof(tempbuf));
snprintf(tempbuf, sizeof(tempbuf)-1, "%.*s%s%s", (int)((uintptr_t)strptr-(uintptr_t)arg_src), arg_src, me->path, &strptr[2]);
launchAddArg(ad, tempbuf);
ftoken_found = 1;
continue;
}
}
}
launchAddArg(ad, arg_src);
}
if (!ftoken_found) launchAddArg(ad, me->path);
strncpy(me->path, fileassoc_me->path, sizeof(me->path));
me->path[sizeof(me->path)-1] = 0;
@ -530,9 +549,9 @@ void menuEntryFileassocLoad(const char* filepath) {
bool success=0, iconLoaded=0;
menuEntry_s* me = NULL;
config_setting_t *fileassoc = NULL, *targets = NULL, *target = NULL;
config_setting_t *fileassoc = NULL, *targets = NULL, *target = NULL, *app_args = NULL, *target_args = NULL;
config_t cfg = {0};
int targets_len=0, i;
int targets_len=0, args_len=0, i;
const char *strptr = NULL;
char app_path[PATH_MAX+8];
@ -564,7 +583,8 @@ void menuEntryFileassocLoad(const char* filepath) {
snprintf(app_path, sizeof(app_path)-1, "%s%s", menuGetRootBasePath(), strptr);
if (config_setting_lookup_string(fileassoc, "icon_path", &strptr))
snprintf(main_icon_path, sizeof(main_icon_path)-1, "%s%s", menuGetRootBasePath(), strptr);
targets = config_setting_get_member(fileassoc, "targets");
app_args = config_setting_lookup(fileassoc, "app_args");
targets = config_setting_lookup(fileassoc, "targets");
if (app_path[0] && targets) {
targets_len = config_setting_length(targets);
@ -610,6 +630,7 @@ void menuEntryFileassocLoad(const char* filepath) {
strncpy(target_file_extension, strptr, sizeof(target_file_extension)-1);
if (config_setting_lookup_string(target, "filename", &strptr))
strncpy(target_filename, strptr, sizeof(target_filename)-1);
target_args = config_setting_lookup(target, "app_args");
//string_is_set for target_file_extension and target_filename must differ: only 1 can be set, not both set or both not set.
if ((target_file_extension[0]!=0) == (target_filename[0]!=0)) continue;
@ -642,6 +663,21 @@ void menuEntryFileassocLoad(const char* filepath) {
} else {
iconLoaded = menuEntryImportIconGfx(me, app_icon_gfx, app_icon_gfx_small);
}
argData_s* ad = &me->args;
ad->dst = (char*)&ad->buf[1];
launchAddArg(ad, me->path);
config_setting_t *config_args = target_args ? target_args : app_args;
if (config_args) {
args_len = config_setting_length(config_args);
for (int argi=0; argi<args_len; argi++) {
strptr = config_setting_get_string_elem(config_args, argi);
if (strptr==NULL) continue;
launchAddArg(ad, strptr);
}
}
}
if (me) menuFileassocAddEntry(me);