allow joining by snowflake

This commit is contained in:
Florian Stinglmayr 2019-07-20 13:03:45 +02:00
parent d86a386edd
commit f51e371f23
3 changed files with 35 additions and 13 deletions

View File

@ -76,6 +76,8 @@ dc_account_t dc_session_account_fullname(dc_session_t s, char const *f);
*/ */
void dc_session_add_channel(dc_session_t s, dc_channel_t u); void dc_session_add_channel(dc_session_t s, dc_channel_t u);
dc_channel_t dc_session_channel_by_id(dc_session_t s, char const *snowflake);
/** /**
* Creates a new channel, or returns an existing channel if a channel with * Creates a new channel, or returns an existing channel if a channel with
* these recipients already exists. * these recipients already exists.

View File

@ -346,6 +346,12 @@ dc_account_t dc_session_account_fullname(dc_session_t s, char const *f)
return NULL; return NULL;
} }
dc_channel_t dc_session_channel_by_id(dc_session_t s, char const *snowflake)
{
return_if_true(s == NULL || snowflake == NULL, NULL);
return (dc_channel_t)g_hash_table_lookup(s->channels, snowflake);
}
void dc_session_add_channel(dc_session_t s, dc_channel_t u) void dc_session_add_channel(dc_session_t s, dc_channel_t u)
{ {
return_if_true(s == NULL || u == NULL,); return_if_true(s == NULL || u == NULL,);

View File

@ -6,11 +6,12 @@ ncdc_cmd_join(ncdc_mainwindow_t n, size_t ac, wchar_t **av, wchar_t const *f)
{ {
char *guild = NULL; char *guild = NULL;
char *channel = NULL; char *channel = NULL;
char *id = NULL;
bool ret = true; bool ret = true;
dc_guild_t g = NULL; dc_guild_t g = NULL;
dc_channel_t c = NULL; dc_channel_t c = NULL;
if (ac <= 2) { if (ac <= 1) {
LOG(n, L"join: not enough arguments given"); LOG(n, L"join: not enough arguments given");
return false; return false;
} }
@ -19,19 +20,29 @@ ncdc_cmd_join(ncdc_mainwindow_t n, size_t ac, wchar_t **av, wchar_t const *f)
return false; return false;
} }
guild = w_convert(av[1]); if (ac == 2) {
channel = w_convert(av[2]); guild = w_convert(av[1]);
channel = w_convert(av[2]);
g = dc_session_guild_by_name(current_session, guild); g = dc_session_guild_by_name(current_session, guild);
if (g == NULL) { if (g == NULL) {
LOG(n, L"join: no such guild: %s", guild); LOG(n, L"join: no such guild: %s", guild);
goto cleanup; goto cleanup;
} }
c = dc_guild_channel_by_name(g, channel); c = dc_guild_channel_by_name(g, channel);
if (c == NULL) { if (c == NULL) {
LOG(n, L"join: no such channel %s in guild %s", channel, guild); LOG(n, L"join: no such channel %s in guild %s", channel, guild);
goto cleanup; goto cleanup;
}
} else if (ac == 1) {
id = w_convert(av[1]);
c = dc_session_channel_by_id(current_session, id);
if (c == NULL) {
LOG(n, L"join: no channel found with that snowflake: %s", id);
goto cleanup;
}
} }
if (dc_channel_messages(c) == 0) { if (dc_channel_messages(c) == 0) {
@ -42,7 +53,9 @@ ncdc_cmd_join(ncdc_mainwindow_t n, size_t ac, wchar_t **av, wchar_t const *f)
c c
); );
if (!ret) { if (!ret) {
LOG(n, L"join: failed to fetch messages for channel %s", channel); LOG(n, L"join: failed to fetch messages for channel %s",
dc_channel_name(c)
);
goto cleanup; goto cleanup;
} }
} }
@ -57,6 +70,7 @@ cleanup:
free(guild); free(guild);
free(channel); free(channel);
free(id);
return ret; return ret;
} }