Hallo dedlfix,
Wie soll das gehen ohne den Thread-Baum in seiner Struktur zu zerstören? Deshalb haben wir ja auch unterschiedliche Sortierverfahren für Threads und die Thread-Bäume.
Im alten Forum ging es auch.
Nein.
Dann musst du das alte Forum nochmal anwerfen und genau nachschauen. Wenn bei Sortierung nach jüngstem Posting jemand eine neue Antwort neben bereits bestehende erstellt hatte, dann stand sie über ihren Geschwistern. Hier steht sie unter ihnen.
Du verwechselst hier Sortierung von Threads und Postings. Die Sortierung von Threads kannte (und kennt) die Optionen "aufsteigend," "absteigend" und "nach jüngstem Posting:"
if(cf_strcmp(args[0],"ascending") == 0) flt_sorting_sorthread_ts = CF_SORT_ASCENDING;
else if(cf_strcmp(args[0],"newestfirst") == 0) flt_sorting_sorthread_ts = CF_SORT_NEWESTFIRST;
else flt_sorting_sorthread_ts = CF_SORT_DESCENDING;
Das hatte keinerlei Auswirkungen auf die Sortierung der Postings im Thread-Baum. Die Sortierung der Postings hatte (und hat) die Parameter "aufsteigend" und "absteigend:"
flt_sorting_sortmessages = cf_strcmp(args[0],"ascending") == 0 ? CF_SORT_ASCENDING : CF_SORT_DESCENDING;
Das sortierte (und sortiert) die Nachrichten im Threadbaum aufsteigend oder absteigend. Was anderes gibt und gab es nicht. Das hier ist der Code, der die Nachrichten sortiert hat:
/* {{{ flt_sorting_msgs_cmp */
int flt_sorting_msgs_cmp(const void *a,const void *b) {
hierarchical_node_t *na = (hierarchical_node_t *)a;
hierarchical_node_t *nb = (hierarchical_node_t *)b;
if(flt_sorting_sortmessages == CF_SORT_ASCENDING) {
if(na->msg->date > nb->msg->date) return 1;
else if(na->msg->date < nb->msg->date) return -1;
}
else {
if(na->msg->date > nb->msg->date) return -1;
else if(na->msg->date < nb->msg->date) return 1;
}
return 0;
}
/* }}} */
/* {{{ flt_sorting_sort_msgs */
void flt_sorting_sort_msgs(hierarchical_node_t *h) {
size_t i;
cf_array_sort(&h->childs,flt_sorting_msgs_cmp);
for(i=0;i<h->childs.elements;++i) flt_sorting_sort_msgs(cf_array_element_at(&h->childs,i));
}
/* }}} */
Es gibt ausschliesslich aufsteigend und absteigend. Das hier ist der Code, der die Threads sortiert hat:
/* {{{ flt_sorting_threads_cmp */
int flt_sorting_threads_cmp(const void *a,const void *b) {
cl_thread_t *ta = (cl_thread_t *)a;
cl_thread_t *tb = (cl_thread_t *)b;
if(flt_sorting_sortthreads == CF_SORT_ASCENDING) {
if(ta->messages->date > tb->messages->date) return 1;
else if(ta->messages->date < tb->messages->date) return -1;
}
else if(flt_sorting_sortthreads == CF_SORT_DESCENDING) {
if(ta->messages->date > tb->messages->date) return -1;
else if(ta->messages->date < tb->messages->date) return 1;
}
else {
if(ta->newest->date > tb->newest->date) return -1;
else if(ta->newest->date < tb->newest->date) return 1;
}
return 0;
}
/* }}} */
/* {{{ flt_sorting_sort */
#ifndef CF_SHARED_MEM
int flt_sorting_sort(cf_hash_t *head,cf_configuration_t *dc,cf_configuration_t *vc,int sock,rline_t *tsd,cf_array_t *threads)
#else
int flt_sorting_sort(cf_hash_t *head,cf_configuration_t *dc,cf_configuration_t *vc,void *ptr,cf_array_t *threads)
#endif
{
size_t i;
cl_thread_t *thr;
/* sort threads first */
if(flt_sorting_sortthreads != -1) cf_array_sort(threads,flt_sorting_threads_cmp);
if(flt_sorting_sortmessages != -1) {
for(i=0;i<threads->elements;++i) {
thr = cf_array_element_at(threads,i);
flt_sorting_sort_msgs(thr->ht);
cf_msg_linearize(thr,thr->ht);
}
}
return FLT_OK;
}
/* }}} */
Die Sortierung der Threads hatte also keinerlei Auswirkungen auf die Sortierung von Nachrichten.
Ja, das wäre "Nachrichten-Sortierung austeigend" bzw "absteigend," das gibt es heute auch schon ;) Aber nach neustem Posting gab es nie, das müsste die Hierarchie zerreissen.
Nein, das zerreißt gar nichts. [...] Die Struktur ist weiterhin vorhanden.
Du möchtest nur innerhalb der Teilbäume sortieren nach der neusten Nachricht, und nicht die Nachrichten sortieren nach der neusten Nachricht. Grosser Unterschied :) Ich nehms mal mit auf, aber für die 4.0.1 wird das nicht mehr befürchte ich.
LG,
CK