mirror of
https://github.com/Tha14/toxic.git
synced 2024-11-23 06:13:03 +01:00
improve friendlis sorting function
This commit is contained in:
parent
e625bffbb4
commit
3470a5eef7
@ -27,39 +27,27 @@ static int friendlist_index[MAX_FRIENDS_NUM] = {0};
|
|||||||
|
|
||||||
int index_name_cmp(const void *n1, const void *n2)
|
int index_name_cmp(const void *n1, const void *n2)
|
||||||
{
|
{
|
||||||
return name_compare(friends[*(int *) n1].name, friends[*(int *) n2].name);
|
int res = name_compare(friends[*(int *) n1].name, friends[*(int *) n2].name);
|
||||||
|
|
||||||
|
int k = 100;
|
||||||
|
/* Use weight to make qsort always put online friends before offline */
|
||||||
|
res = friends[*(int *) n1].online ? (res - k) : (res + k);
|
||||||
|
res = friends[*(int *) n2].online ? (res + k) : (res - k);
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sorts friendlist_index by connection status */
|
/* sorts friendlist_index first by connection status then alphabetically */
|
||||||
void sort_friendlist_index(void)
|
void sort_friendlist_index(void)
|
||||||
{
|
{
|
||||||
int on_friends[MAX_FRIENDS_NUM];
|
|
||||||
int off_friends[MAX_FRIENDS_NUM];
|
|
||||||
int on_cnt = 0;
|
|
||||||
int off_cnt = 0;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* split friends into online and offline groups */
|
|
||||||
for (i = 0; i < max_friends_index; ++i) {
|
for (i = 0; i < max_friends_index; ++i) {
|
||||||
if (!friends[i].active)
|
if (friends[i].active)
|
||||||
continue;
|
friendlist_index[i] = friends[i].num;
|
||||||
|
|
||||||
if (friends[i].online)
|
|
||||||
on_friends[on_cnt++] = friends[i].num;
|
|
||||||
else
|
|
||||||
off_friends[off_cnt++] = friends[i].num;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sort both groups alphabetically*/
|
qsort(friendlist_index, num_friends, sizeof(int), index_name_cmp);
|
||||||
qsort(on_friends, on_cnt, sizeof(int), index_name_cmp);
|
|
||||||
qsort(off_friends, off_cnt, sizeof(int), index_name_cmp);
|
|
||||||
|
|
||||||
/* update friendlist_index, putting online friends before offline friends */
|
|
||||||
for (i = 0; i < on_cnt; ++i)
|
|
||||||
friendlist_index[i] = on_friends[i];
|
|
||||||
|
|
||||||
for (i = on_cnt; i < num_friends; ++i)
|
|
||||||
friendlist_index[i] = off_friends[i-on_cnt];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void friendlist_onMessage(ToxWindow *self, Tox *m, int num, uint8_t *str, uint16_t len)
|
static void friendlist_onMessage(ToxWindow *self, Tox *m, int num, uint8_t *str, uint16_t len)
|
||||||
@ -89,6 +77,7 @@ static void friendlist_onNickChange(ToxWindow *self, int num, uint8_t *str, uint
|
|||||||
len = strlen(str) + 1;
|
len = strlen(str) + 1;
|
||||||
memcpy(friends[num].name, str, len);
|
memcpy(friends[num].name, str, len);
|
||||||
friends[num].namelength = len;
|
friends[num].namelength = len;
|
||||||
|
sort_friendlist_index();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void friendlist_onStatusChange(ToxWindow *self, Tox *m, int num, TOX_USERSTATUS status)
|
static void friendlist_onStatusChange(ToxWindow *self, Tox *m, int num, TOX_USERSTATUS status)
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
ToxWindow new_friendlist(void);
|
ToxWindow new_friendlist(void);
|
||||||
void disable_chatwin(int f_num);
|
void disable_chatwin(int f_num);
|
||||||
int get_friendnum(uint8_t *name);
|
int get_friendnum(uint8_t *name);
|
||||||
|
|
||||||
|
/* sorts friendlist_index first by connection status then alphabetically */
|
||||||
void sort_friendlist_index(void);
|
void sort_friendlist_index(void);
|
||||||
|
|
||||||
#endif /* end of include guard: FRIENDLIST_H_53I41IM */
|
#endif /* end of include guard: FRIENDLIST_H_53I41IM */
|
||||||
|
Loading…
Reference in New Issue
Block a user