(Partially) Fix messages being displayed wrongly sorted in ConversationSummary due to being compared->equal

This commit is contained in:
fiaxh 2018-12-10 18:27:02 +01:00
parent 680d28360c
commit d0d68f5878
3 changed files with 11 additions and 9 deletions

View File

@ -93,7 +93,8 @@ public abstract class MetaConversationItem : Object {
public virtual Jid? jid { get; set; default=null; }
public virtual bool dim { get; set; default=false; }
public virtual DateTime? sort_time { get; set; default=null; }
public virtual double seccondary_sort_indicator { get; set; }
public virtual long seccondary_sort_indicator { get; set; }
public virtual long tertiary_sort_indicator { get; set; }
public virtual DateTime? display_time { get; set; default=null; }
public virtual Encryption? encryption { get; set; default=null; }
public virtual Entities.Message.Marked? mark { get; set; default=null; }

View File

@ -78,7 +78,8 @@ public class ContentMetaItem : Plugins.MetaConversationItem {
public ContentMetaItem(ContentItem content_item, ContentItemWidgetFactory widget_factory) {
this.jid = content_item.jid;
this.sort_time = content_item.sort_time;
this.seccondary_sort_indicator = content_item.id;
this.seccondary_sort_indicator = (long) content_item.display_time.to_unix();
this.tertiary_sort_indicator = content_item.id;
this.display_time = content_item.display_time;
this.encryption = content_item.encryption;
this.mark = content_item.mark;

View File

@ -381,15 +381,15 @@ public class ConversationView : Box, Plugins.ConversationItemCollection, Plugins
}
private static int compare_meta_items(Plugins.MetaConversationItem a, Plugins.MetaConversationItem b) {
int res = a.sort_time.compare(b.sort_time);
if (res == 0) {
if (a.seccondary_sort_indicator < b.seccondary_sort_indicator) {
res = -1;
} else if (a.seccondary_sort_indicator > b.seccondary_sort_indicator) {
res = 1;
int cmp1 = a.sort_time.compare(b.sort_time);
if (cmp1 == 0) {
double cmp2 = a.seccondary_sort_indicator - b.seccondary_sort_indicator;
if (cmp2 == 0) {
return (int) (a.tertiary_sort_indicator - b.tertiary_sort_indicator);
}
return (int) cmp2;
}
return res;
return cmp1;
}
private void clear() {