VulpesOS/assets/webapps/sms.gaiamobile.org/services/js/threads.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

12 lines
No EOL
2.9 KiB
JavaScript

;;;(function(exports){'use strict';var threads=new Map();var messageMap=new Map();function Thread(thread){var length=Thread.FIELDS.length;var key;for(var i=0;i<length;i++){key=Thread.FIELDS[i];this[key]=thread[key];}
this.messages=new Map();}
Thread.prototype.getDraft=function(){return this.isDraft?Drafts.byDraftId(this.id):Drafts.byThreadId(this.id);};Thread.FIELDS=['body','id','lastMessageSubject','lastMessageType','participants','timestamp','unreadCount','isDraft'];Thread.fromMessage=function(record,options){var participants=[];if(typeof record.delivery!=='undefined'){if(record.delivery==='received'||record.delivery==='not-downloaded'){participants=[record.sender];}else{participants=record.receivers||[record.receiver];}}
return new Thread({id:record.threadId,participants:participants,body:record.body,timestamp:record.timestamp,unreadCount:(options&&options.unread)?1:0,lastMessageType:record.type||'sms',isDraft:false});};Thread.fromDraft=function(draft,options){var participants=draft.recipients&&draft.recipients.length?draft.recipients:[''];var body=draft.content&&draft.content.length?draft.content.find(function(content){if(typeof content==='string'){return true;}}):'';return new Thread({id:draft.threadId||draft.id,participants:participants,body:body,timestamp:new Date(draft.timestamp),unreadCount:(options&&options.unread)?1:0,lastMessageType:draft.type||'sms',isDraft:true});};Thread.create=function(record,options){if(record instanceof Thread){return record;}
return record.delivery?Thread.fromMessage(record,options):Thread.fromDraft(record,options);};var Threads=exports.Threads={registerMessage:function(message){var threadId=+message.threadId;var messageId=+message.id;if(!this.has(threadId)){this.set(threadId,Thread.create(message));}
this.get(threadId).messages.set(messageId,message);messageMap.set(messageId,threadId);},unregisterMessage:function(id){id=+id;var threadId=messageMap.get(id);if(this.has(threadId)){this.get(threadId).messages.delete(id);}
messageMap.delete(id);},set:function(id,thread){var old,length,key;id=+id;if(threads.has(id)){old=threads.get(id);length=Thread.FIELDS.length;for(var i=0;i<length;i++){key=Thread.FIELDS[i];old[key]=thread[key];}
return threads;}
return threads.set(id,new Thread(thread));},get:function(id){return threads.get(+id);},has:function(id){return threads.has(+id);},delete:function(id){id=+id;var thread=this.get(id);if(!thread){return;}
threads.delete(id);var draft=thread.getDraft();if(draft){Drafts.delete(draft).store();}},clear:function(){threads=new Map();},forEach:function(callback){threads.forEach(function(v,k){callback(v,k);});},keys:function(){return threads.keys();},get size(){if(typeof threads.size==='function'){return+threads.size();}
return+threads.size;}};Threads.Messages={get(id){id=+id;var threadId=messageMap.get(id);if(Threads.has(threadId)){return Threads.get(threadId).messages.get(id);}
return null;}};exports.Thread=Thread;}(this));