summaryrefslogtreecommitdiff
path: root/apps/filetypes.c
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2021-10-21 00:03:52 -0400
committerWilliam Wilgus <wilgus.william@gmail.com>2021-10-21 01:45:47 -0400
commitaf573708ed7acf476ed49ff94243a94b27aa33a0 (patch)
treeef04b79dc016966431a35387f8d4496292f93d79 /apps/filetypes.c
parent9878226e4dec1ee7bb1434249214d6d8161b439f (diff)
downloadrockbox-af573708ed7acf476ed49ff94243a94b27aa33a0.tar.gz
rockbox-af573708ed7acf476ed49ff94243a94b27aa33a0.zip
extend filetype_get_plugin() search for viewer by fileext
I noticed the way filetree switch was modified for the lua (and then) opx and open plugin viewers since builtin files are assumed to be handled in the filetree switch what if instead filetype_get_plugin() could search the available viewers this could probably be extended further with selectable defaults Change-Id: I40f74cd698f4b788a0adcbebf32c08a970df29a5
Diffstat (limited to 'apps/filetypes.c')
-rw-r--r--apps/filetypes.c39
1 files changed, 30 insertions, 9 deletions
diff --git a/apps/filetypes.c b/apps/filetypes.c
index 3724f57a9b..ed90be755f 100644
--- a/apps/filetypes.c
+++ b/apps/filetypes.c
@@ -536,10 +536,31 @@ char* filetype_get_plugin(const struct entry* file, char *buffer, size_t buffer_
536 int index = find_attr(file->attr); 536 int index = find_attr(file->attr);
537 if (index < 0 || !buffer) 537 if (index < 0 || !buffer)
538 return NULL; 538 return NULL;
539 if (filetypes[index].plugin == NULL) 539 struct file_type *ft_indexed = &filetypes[index];
540
541 /* attempt to find a suitable viewer by file extension */
542 if(ft_indexed->plugin == NULL && ft_indexed->extension != NULL)
543 {
544 struct file_type *ft;
545 int i = filetype_count;
546 while (--i > index)
547 {
548 ft = &filetypes[i];
549 if (ft->plugin == NULL || ft->extension == NULL)
550 continue;
551 else if (strcmp(ft->extension, ft_indexed->extension) == 0)
552 {
553 /*splashf(HZ*3, "Found %d %s %s", i, ft->extension, ft->plugin);*/
554 ft_indexed = ft;
555 break;
556 }
557 }
558 }
559 if (ft_indexed->plugin == NULL)
540 return NULL; 560 return NULL;
541 snprintf(buffer, buffer_len, "%s/%s.%s", 561
542 PLUGIN_DIR, filetypes[index].plugin, ROCK_EXTENSION); 562 snprintf(buffer, buffer_len, "%s/%s." ROCK_EXTENSION,
563 PLUGIN_DIR, ft_indexed->plugin);
543 return buffer; 564 return buffer;
544} 565}
545 566
@@ -573,8 +594,8 @@ static int openwith_get_talk(int selected_item, void * data)
573{ 594{
574 (void)data; 595 (void)data;
575 char viewer_filename[MAX_FILENAME]; 596 char viewer_filename[MAX_FILENAME];
576 snprintf(viewer_filename, MAX_FILENAME, "%s.%s", 597 snprintf(viewer_filename, MAX_FILENAME, "%s." ROCK_EXTENSION,
577 filetypes[viewers[selected_item]].plugin, ROCK_EXTENSION); 598 filetypes[viewers[selected_item]].plugin);
578 talk_file_or_spell(PLUGIN_DIR, viewer_filename, 599 talk_file_or_spell(PLUGIN_DIR, viewer_filename,
579 NULL, false); 600 NULL, false);
580 return 0; 601 return 0;
@@ -588,8 +609,8 @@ static int openwith_action_callback(int action, struct gui_synclist *lists)
588 { 609 {
589 char plugin[MAX_PATH]; 610 char plugin[MAX_PATH];
590 i = viewers[gui_synclist_get_sel_pos(lists)]; 611 i = viewers[gui_synclist_get_sel_pos(lists)];
591 snprintf(plugin, MAX_PATH, "%s/%s.%s", 612 snprintf(plugin, MAX_PATH, "%s/%s." ROCK_EXTENSION,
592 PLUGIN_DIR, filetypes[i].plugin, ROCK_EXTENSION); 613 PLUGIN_DIR, filetypes[i].plugin);
593 plugin_load(plugin, info->current_file); 614 plugin_load(plugin, info->current_file);
594 return ACTION_STD_CANCEL; 615 return ACTION_STD_CANCEL;
595 } 616 }
@@ -630,7 +651,7 @@ int filetype_load_plugin(const char* plugin, const char* file)
630 } 651 }
631 if (i >= filetype_count) 652 if (i >= filetype_count)
632 return PLUGIN_ERROR; 653 return PLUGIN_ERROR;
633 snprintf(plugin_name, MAX_PATH, "%s/%s.%s", 654 snprintf(plugin_name, MAX_PATH, "%s/%s." ROCK_EXTENSION,
634 PLUGIN_DIR, filetypes[i].plugin, ROCK_EXTENSION); 655 PLUGIN_DIR, filetypes[i].plugin);
635 return plugin_load(plugin_name, file); 656 return plugin_load(plugin_name, file);
636} 657}