properly use parent_ids by storing them in a hash first
This commit is contained in:
parent
b07b716a56
commit
d9c276c68c
@ -52,6 +52,7 @@ dc_channel_t dc_channel_from_json(json_t *j);
|
||||
|
||||
char const *dc_channel_id(dc_channel_t c);
|
||||
char const *dc_channel_name(dc_channel_t c);
|
||||
char const *dc_channel_parent_id(dc_channel_t c);
|
||||
|
||||
dc_channel_type_t dc_channel_type(dc_channel_t c);
|
||||
bool dc_channel_is_dm(dc_channel_t c);
|
||||
|
@ -249,6 +249,12 @@ char const *dc_channel_id(dc_channel_t c)
|
||||
return c->id;
|
||||
}
|
||||
|
||||
char const *dc_channel_parent_id(dc_channel_t c)
|
||||
{
|
||||
return_if_true(c == NULL, NULL);
|
||||
return c->parent_id;
|
||||
}
|
||||
|
||||
dc_channel_type_t dc_channel_type(dc_channel_t c)
|
||||
{
|
||||
return_if_true(c == NULL, -1);
|
||||
|
@ -251,6 +251,7 @@ void ncdc_mainwindow_update_guilds(ncdc_mainwindow_t n)
|
||||
GHashTableIter iter;
|
||||
gpointer key = NULL, value = NULL;
|
||||
size_t idx = 0;
|
||||
GHashTable *parents = NULL;
|
||||
|
||||
ncdc_treeitem_clear(n->root);
|
||||
|
||||
@ -258,6 +259,8 @@ void ncdc_mainwindow_update_guilds(ncdc_mainwindow_t n)
|
||||
return;
|
||||
}
|
||||
|
||||
parents = g_hash_table_new(g_str_hash, g_str_equal);
|
||||
|
||||
g_hash_table_iter_init(&iter, dc_session_guilds(current_session));
|
||||
while (g_hash_table_iter_next(&iter, &key, &value)) {
|
||||
dc_guild_t g = (dc_guild_t)value;
|
||||
@ -291,38 +294,48 @@ void ncdc_mainwindow_update_guilds(ncdc_mainwindow_t n)
|
||||
continue;
|
||||
}
|
||||
|
||||
/* skip categories, and shop channels
|
||||
*/
|
||||
if (dc_channel_type(c) == CHANNEL_TYPE_GUILD_CATEGORY ||
|
||||
dc_channel_type(c) == CHANNEL_TYPE_GUILD_NEWS ||
|
||||
dc_channel_type(c) == CHANNEL_TYPE_GUILD_STORE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ci = ncdc_treeitem_new();
|
||||
if (ci == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (dc_channel_type(c) == CHANNEL_TYPE_GUILD_VOICE ||
|
||||
dc_channel_type(c) == CHANNEL_TYPE_GUILD_TEXT) {
|
||||
aswprintf(&name, L"[%s] %s",
|
||||
(dc_channel_type(c) == CHANNEL_TYPE_GUILD_VOICE ?
|
||||
"<" : "#"),
|
||||
dc_channel_name(c)
|
||||
);
|
||||
} else {
|
||||
aswprintf(&name, L"%s", dc_channel_name(c));
|
||||
}
|
||||
if (name == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
g_hash_table_insert(parents, (void*)dc_channel_id(c), ci);
|
||||
|
||||
ncdc_treeitem_set_label(ci, name);
|
||||
free(name);
|
||||
name = NULL;
|
||||
|
||||
ncdc_treeitem_set_tag(ci, c);
|
||||
|
||||
if (dc_channel_parent_id(c) != NULL &&
|
||||
g_hash_table_contains(parents, dc_channel_parent_id(c))) {
|
||||
ncdc_treeitem_t parent = g_hash_table_lookup(
|
||||
parents, dc_channel_parent_id(c)
|
||||
);
|
||||
ncdc_treeitem_add(parent, ci);
|
||||
} else {
|
||||
ncdc_treeitem_add(i, ci);
|
||||
}
|
||||
}
|
||||
|
||||
ncdc_treeitem_add(n->root, i);
|
||||
}
|
||||
|
||||
g_hash_table_unref(parents);
|
||||
}
|
||||
|
||||
void ncdc_mainwindow_input_ready(ncdc_mainwindow_t n)
|
||||
|
Loading…
Reference in New Issue
Block a user