1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-11-03 19:37:16 -05:00

Add command to show single bookmark details

`/bookmark list` lists all bookmarks with its details.
`/bookmark list <jid>` shows the details of a single bookmark.

Implement https://github.com/profanity-im/profanity/issues/1558
This commit is contained in:
Michael Vetter 2021-06-09 15:45:09 +02:00
parent d7adec69ce
commit 8ef35290bd
9 changed files with 68 additions and 5 deletions

View File

@ -2206,6 +2206,10 @@ _bookmark_autocomplete(ProfWin* window, const char* const input, gboolean previo
if (found) {
return found;
}
found = autocomplete_param_with_func(input, "/bookmark list", bookmark_find, previous, NULL);
if (found) {
return found;
}
found = autocomplete_param_with_ac(input, "/bookmark", bookmark_ac, TRUE, previous);
return found;

View File

@ -822,7 +822,7 @@ static struct cmd_t command_defs[] = {
CMD_TAG_GROUPCHAT)
CMD_SYN(
"/bookmark",
"/bookmark list",
"/bookmark list [<jid>]",
"/bookmark add [<room>] [nick <nick>] [password <password>] [name <roomname>] [autojoin on|off]",
"/bookmark update <room> [nick <nick>] [password <password>] [name <roomname>] [autojoin on|off]",
"/bookmark remove [<room>]",
@ -836,7 +836,7 @@ static struct cmd_t command_defs[] = {
"If you are in a chat room and no arguments are supplied to `/bookmark add`, autojoin is set to \"on\". "
"There is also an autojoin ignore list in case you want to autojoin in many clients but not on Profanity. ")
CMD_ARGS(
{ "list", "List all bookmarks." },
{ "list [<jid>]", "List all bookmarks. Or the details of one." },
{ "add [<room>]", "Add a bookmark, passing no room will bookmark the current room, setting autojoin to \"on\"." },
{ "remove [<room>]", "Remove a bookmark, passing no room will remove the bookmark for the current room, if one exists." },
{ "update <room>", "Update the properties associated with a bookmark." },
@ -853,6 +853,8 @@ static struct cmd_t command_defs[] = {
"/bookmark join room@example.com",
"/bookmark update room@example.com nick NEWNICK autojoin on",
"/bookmark ignore room@example.com",
"/bookmark list",
"/bookmark list room@example.com",
"/bookmark remove room@example.com")
},

View File

@ -4661,9 +4661,18 @@ cmd_bookmark(ProfWin* window, const char* const command, gchar** args)
}
if (strcmp(cmd, "list") == 0) {
char* bookmark_jid = args[1];
if (bookmark_jid == NULL) {
// list all bookmarks
GList* bookmarks = bookmark_get_list();
cons_show_bookmarks(bookmarks);
g_list_free(bookmarks);
} else {
// list one bookmark
Bookmark *bookmark = bookmark_get_by_jid(bookmark_jid);
cons_show_bookmark(bookmark);
}
return TRUE;
}

View File

@ -744,6 +744,34 @@ cons_show_bookmarks(const GList* list)
cons_alert(NULL);
}
void
cons_show_bookmark(Bookmark* item)
{
cons_show("");
if (!item) {
cons_show("No such bookmark");
} else {
cons_show("Bookmark details:");
cons_show("Room jid : %s", item->barejid);
if (item->name) {
cons_show("name : %s", item->name);
}
if (item->nick) {
cons_show("nick : %s", item->nick);
}
if (item->password) {
cons_show("password : %s", item->password);
}
if (item->autojoin) {
cons_show("autojoin : ON");
} else {
cons_show("autojoin : OFF");
}
}
cons_alert(NULL);
}
void
cons_show_disco_info(const char* jid, GSList* identities, GSList* features)
{

View File

@ -271,6 +271,7 @@ void cons_show_aliases(GList* aliases);
void cons_show_login_success(ProfAccount* account, gboolean secured);
void cons_show_account_list(gchar** accounts);
void cons_show_room_list(GSList* room, const char* const conference_node);
void cons_show_bookmark(Bookmark* item);
void cons_show_bookmarks(const GList* list);
void cons_show_bookmarks_ignore(gchar** list, gsize len);
void cons_show_disco_items(GSList* items, const char* const jid);

View File

@ -225,6 +225,13 @@ bookmark_remove(const char* jid)
return TRUE;
}
Bookmark*
bookmark_get_by_jid(const char* jid)
{
Bookmark* bookmark = g_hash_table_lookup(bookmarks, jid);
return bookmark;
}
GList*
bookmark_get_list(void)
{

View File

@ -274,6 +274,7 @@ gboolean bookmark_update(const char* jid, const char* nick, const char* password
gboolean bookmark_remove(const char* jid);
gboolean bookmark_join(const char* jid);
GList* bookmark_get_list(void);
Bookmark* bookmark_get_by_jid(const char* jid);
char* bookmark_find(const char* const search_str, gboolean previous, void* context);
void bookmark_autocomplete_reset(void);
gboolean bookmark_exists(const char* const room);

View File

@ -907,6 +907,11 @@ cons_show_bookmarks(const GList* list)
check_expected(list);
}
void
cons_show_bookmark(Bookmark* item)
{
}
void
cons_show_disco_items(GSList* items, const char* const jid)
{

View File

@ -487,6 +487,12 @@ bookmark_get_list(void)
return mock_ptr_type(GList*);
}
Bookmark*
bookmark_get_by_jid(const char* jid)
{
return NULL;
}
char*
bookmark_find(const char* const search_str, gboolean previous, void* context)
{