gboolean flatpak_complete_document_list (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; g_autoptr(FlatpakDir) user_dir = NULL; g_autoptr(FlatpakDir) system_dir = NULL; g_autoptr(GError) error = NULL; int i; context = g_option_context_new (""); if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, NULL, NULL)) return FALSE; switch (completion->argc) { case 0: case 1: /* APPID */ flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); flatpak_complete_columns (completion, all_columns); user_dir = flatpak_dir_get_user (); { g_auto(GStrv) refs = flatpak_dir_find_installed_refs (user_dir, NULL, NULL, NULL, FLATPAK_KINDS_APP, FIND_MATCHING_REFS_FLAGS_NONE, &error); if (refs == NULL) flatpak_completion_debug ("find local refs error: %s", error->message); for (i = 0; refs != NULL && refs[i] != NULL; i++) { g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); if (parts) flatpak_complete_word (completion, "%s ", parts[1]); } } system_dir = flatpak_dir_get_system_default (); { g_auto(GStrv) refs = flatpak_dir_find_installed_refs (system_dir, NULL, NULL, NULL, FLATPAK_KINDS_APP, FIND_MATCHING_REFS_FLAGS_NONE, &error); if (refs == NULL) flatpak_completion_debug ("find local refs error: %s", error->message); for (i = 0; refs != NULL && refs[i] != NULL; i++) { g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); if (parts) flatpak_complete_word (completion, "%s ", parts[1]); } } break; } return TRUE; }
gboolean flatpak_complete_update (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; g_autoptr(FlatpakDir) dir = NULL; g_autoptr(GError) error = NULL; g_auto(GStrv) refs = NULL; int i; context = g_option_context_new (""); if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, 0, &dir, NULL, NULL)) return FALSE; if (!opt_app && !opt_runtime) opt_app = opt_runtime = TRUE; switch (completion->argc) { case 0: case 1: /* NAME */ flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); flatpak_complete_options (completion, user_entries); refs = flatpak_dir_find_installed_refs (dir, NULL, NULL, opt_arch, opt_app, opt_runtime, &error); if (refs == NULL) flatpak_completion_debug ("find local refs error: %s", error->message); for (i = 0; refs != NULL && refs[i] != NULL; i++) { g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); if (parts) flatpak_complete_word (completion, "%s \n", parts[1]); } break; case 2: /* Branch */ refs = flatpak_dir_find_installed_refs (dir, completion->argv[1], NULL, opt_arch, opt_app, opt_runtime, &error); if (refs == NULL) flatpak_completion_debug ("find remote refs error: %s", error->message); for (i = 0; refs != NULL && refs[i] != NULL; i++) { g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); if (parts) flatpak_complete_word (completion, "%s ", parts[3]); } break; default: break; } return TRUE; }
static int complete (int argc, char **argv) { FlatpakCommand *command; FlatpakCompletion *completion; const char *command_name = NULL; completion = flatpak_completion_new (argv[2], argv[3], argv[4]); if (completion == NULL) return 1; command = extract_command (&completion->argc, completion->argv, &command_name); flatpak_completion_debug ("command=%p '%s'", command->fn, command->name); if (!command->fn) { FlatpakCommand *c = commands; while (c->name) { if (c->fn != NULL) flatpak_complete_word (completion, "%s ", c->name); c++; } flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, empty_entries); flatpak_complete_options (completion, user_entries); } else if (command->complete) { if (!command->complete (completion)) return 1; } else { flatpak_complete_options (completion, global_entries); } return 0; }
gboolean flatpak_complete_build_init (FlatpakCompletion *completion) { g_autoptr(GOptionContext) context = NULL; g_autoptr(FlatpakDir) user_dir = NULL; g_autoptr(FlatpakDir) system_dir = NULL; g_autoptr(GError) error = NULL; int i; context = g_option_context_new (""); if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, NULL, NULL)) return FALSE; switch (completion->argc) { case 0: case 1: /* DIR */ flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); flatpak_complete_dir (completion); break; case 2: /* APP */ break; case 3: /* RUNTIME */ case 4: /* SDK */ user_dir = flatpak_dir_get_user (); { g_auto(GStrv) refs = flatpak_dir_find_installed_refs (user_dir, NULL, NULL, opt_arch, FLATPAK_KINDS_RUNTIME, &error); if (refs == NULL) flatpak_completion_debug ("find local refs error: %s", error->message); for (i = 0; refs != NULL && refs[i] != NULL; i++) { g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); if (parts) flatpak_complete_word (completion, "%s ", parts[1]); } } system_dir = flatpak_dir_get_system_default (); { g_auto(GStrv) refs = flatpak_dir_find_installed_refs (system_dir, NULL, NULL, opt_arch, FLATPAK_KINDS_RUNTIME, &error); if (refs == NULL) flatpak_completion_debug ("find local refs error: %s", error->message); for (i = 0; refs != NULL && refs[i] != NULL; i++) { g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); if (parts) flatpak_complete_word (completion, "%s ", parts[1]); } } break; case 5: /* BRANCH */ user_dir = flatpak_dir_get_user (); { g_auto(GStrv) refs = flatpak_dir_find_installed_refs (user_dir, completion->argv[3], NULL, opt_arch, FLATPAK_KINDS_RUNTIME, &error); if (refs == NULL) flatpak_completion_debug ("find local refs error: %s", error->message); for (i = 0; refs != NULL && refs[i] != NULL; i++) { g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); if (parts) flatpak_complete_word (completion, "%s ", parts[3]); } } system_dir = flatpak_dir_get_system_default (); { g_auto(GStrv) refs = flatpak_dir_find_installed_refs (system_dir, completion->argv[3], NULL, opt_arch, FLATPAK_KINDS_RUNTIME, &error); if (refs == NULL) flatpak_completion_debug ("find local refs error: %s", error->message); for (i = 0; refs != NULL && refs[i] != NULL; i++) { g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); if (parts) flatpak_complete_word (completion, "%s ", parts[3]); } } break; } return TRUE; }