diff --git a/index.html b/index.html
index 86496cc..90a556f 100644
--- a/index.html
+++ b/index.html
@@ -23,99 +23,109 @@
},
//Required for Supernode operations
- SNStorageID: "FEzk75EGMPEQMrCuPosGiwuK162hcEu49E",
+ SNStorageID: "FNaN9McoBAEFUjkRmNQRYLmBF8SpS7Tgfk",
supernodes: {}, //each supnernode must be stored as floID : {uri:,pubKey:}
//for app
- application: "messenger",
+ application: "messenger",
+ adminID: "FMRsefPydWznGWneLqi4ABeQAJeFvtS3aQ",
pubKeys: {},
contacts: {},
appendix: {}
}
@@ -675,7 +685,7 @@
messageTemplate = document.getElementById('message_template'),
mailTemplate = document.getElementById('mail_template')
const render = {
- mailCard(mailRef, subject, timestamp, category, floID, content, markUnread){
+ mailCard(floID, ref, subject, timestamp, content, markUnread){
let card = mailCardTemplate.content.cloneNode(true),
cardContainer = card.querySelector('.mail-card'),
time = new Date(timestamp).toString(),
@@ -684,7 +694,6 @@
dateTime
minutes = minutes.length === 1 ? `0${minutes}` : minutes
let finalHours = hours - 12 > 0 ? `${hours - 12}:${minutes} pm` : `${hours}:${minutes} am`
-
if(new Date().getDate() === new Date(timestamp).getDate())
dateTime = finalHours
else
@@ -692,18 +701,30 @@
let mailSummery = content.split(' ')
mailSummery.splice(16)
mailSummery = mailSummery.join(' ')
- cardContainer.setAttribute("name", mailRef);
- if (Array.isArray(floID))
- floID = floID.join(",");
+ cardContainer.setAttribute("name", ref);
+ let contact;
+ if(Array.isArray(floID)){
+ for(let f of floID)
+ if(floGlobals.contacts[f]){
+ contact = floGlobals.contacts[f]
+ break;
+ }
+ contact = contact || `${floID[0].substring(12)}...`;
+ if(floID.length > 1)
+ contact = `${contact} & ${floID.length - 1} others(s)`
+ floID = floID.join(', ')
+ } else
+ contact = floGlobals.contacts[floID] || floID
if(markUnread)
cardContainer.classList.add('unread')
- card.querySelector('.sender').textContent = floGlobals.contacts[floID] || floID
+ card.querySelector('.sender').textContent = contact
card.querySelector('.subject').textContent = subject
card.querySelector('.date').textContent = dateTime
card.querySelector('.description').textContent = mailSummery
return card
},
- mail(senderName, floID, timestamp, category, subject, content){
+
+ mail(from, to, subject, timestamp, content){
let card = mailTemplate.content.cloneNode(true),
cardContainer = card.querySelector('.mail'),
time = new Date(timestamp).toString(),
@@ -712,17 +733,27 @@
dateTime
minutes = minutes.length === 1 ? `0${minutes}` : minutes
let finalHours = hours - 12 > 0 ? `${hours - 12}:${minutes} pm` : `${hours}:${minutes} am`
-
if(new Date().getDate() === new Date(timestamp).getDate())
dateTime = finalHours
else
dateTime = time.slice(4, 10)
- if (Array.isArray(floID))
- floID = floID.join(",");
- if(category === 'receivedFrom')
- card.querySelector('.sender-name').textContent = `From : ${senderName}`
- if(category === 'sentTo')
- card.querySelector('.sender-name').textContent = `To : ${senderName}`
+ let senderName, floID
+ if(from === myFloID){
+ let count = 0, list = [];
+ to.forEach(f => floGlobals.contacts[f] ? list.push(floGlobals.contacts[f]): count++)
+ senderName = `To : ${list.join(', ')}`
+ if(count){
+ if(list.length)
+ senderName = `${senderName} & ${count} other(s)`
+ else
+ senderName = `${senderName} ${count} Unknown people`
+ }
+ floID = to.join(', ')
+ } else {
+ senderName = `From : ${floGlobals.contacts[from] || ''}`;
+ floID = from
+ }
+ card.querySelector('.sender-name').textContent = senderName
card.querySelector('.flo-id').textContent = floID
card.querySelector('.mail-subject').textContent = subject
card.querySelector('.date').textContent = dateTime;
@@ -776,6 +807,24 @@
let currentDate, currentFloID
+ function renderDirectUI(data) {
+ console.log(data)
+ renderMessages(data.messages);
+ renderMailList(data.mails)
+ if(Object.keys(data.messages).length && activePage.button !== chatPageButton){
+ chatPageButton.setAttribute('data-notifications', Object.keys(data.messages).length)
+ notify(`${Object.keys(data.messages).length} new message(s)`)
+ }
+ if(Object.keys(data.mails).length && activePage.button !== mailPageButton){
+ mailPageButton.setAttribute('data-notifications', Object.keys(data.mails).length)
+ notify(`${Object.keys(data.mails).length} new mail(s)`)
+ }
+ }
+
+ function renderGroupUI(data){
+ console.log(data)
+ }
+
function randomHsl(saturation = 90, lightness = 50) {
let hue = Math.random() * 360
let color = {
@@ -1125,7 +1174,7 @@
'Are you sure you want to Sign out?', "Sign Out",
"Stay Signed In").then(
result => {
- floDapps.logout().then(result => {
+ floDapps.clearCredentials().then(result => {
notify("Successfully Signed out", 'success')
setTimeout(onLoadStartUp, 2000)
}).catch(error => notify("Signout Unsuccessful", "error", error))
@@ -1136,7 +1185,7 @@
getConfirmation('Remove Account?',
'**Remember to store your PRIVATE-KEY**\n*Private-Key will be needed to signIn again*\nAre you sure you want to remove account?',
"Remove").then(result => {
- floDapps.logout().then(result => {
+ floDapps.clearCredentials().then(result => {
notify("Removed Account")
setTimeout(onLoadStartUp, 2000)
}).catch(error => notify("Remove Unsuccessful", "error", error))
@@ -1169,7 +1218,7 @@
getConfirmation('Clear Data?',
`Are you sure you want to clear stored data?`, "Clear").then(
result => {
- floDapps.clearUserData().then(result => {
+ messenger.clearUserData().then(result => {
notify("Successfully Cleared local data", 'success')
setTimeout(onLoadStartUp, 2000)
}).catch(error => notify(error, "error"))
@@ -1192,9 +1241,10 @@
let refreshing = false
function refresh(){
+ return
if(refreshing) return;
refreshing = true
- messenger.refreshInbox().then(data => {
+ messenger.requestDirectInbox().then(data => {
renderMessages(data.messages)
renderMailList(data.mails)
if(Object.keys(data.messages).length && activePage.button !== chatPageButton){
@@ -1251,6 +1301,7 @@
return;
}
messenger.parseBackup(file).then(data => {
+ debugger;
getConfirmation('Restore Data?',
`Found: ${Object.keys(data.contacts).length} Contacts,\n ${Object.keys(data.messages).length} Messages, ${Object.keys(data.mails).length} Mails.`,
"Restore"
@@ -1285,11 +1336,12 @@
typeMessage.value = ''
if(message.trim() === '') return
messenger.sendMessage(message, receiver).then(data => {
- render.messageBubble(data.floID, data.message, data.time, data.category)
- chatContainer.scrollTo({left: 0, top: chatContainer.scrollHeight, behavior: 'smooth'})
- refreshCount = 0;
- refreshTimeout = 10000;
- setTimeout(refreshAgain, refreshTimeout)
+ renderMessages(data, false)
+ //render.messageBubble(data.floID, data.message, data.time, data.category)
+ //chatContainer.scrollTo({left: 0, top: chatContainer.scrollHeight, behavior: 'smooth'})
+ //refreshCount = 0;
+ //refreshTimeout = 10000;
+ //setTimeout(refreshAgain, refreshTimeout)
}).catch(error => notify(error, "error"));
}
@@ -1401,12 +1453,9 @@
return element;
}
- let frag = document.createDocumentFragment()
-
function renderMessages(data, markUnread = true) {
let floID
- console.log(data)
- for (m in data) {
+ for (let m in data) {
floID = data[m].floID
render.messageBubble(data[m].floID, data[m].message, data[m].time, data[m].category)
if (markUnread)
@@ -1425,7 +1474,7 @@
textColor = contact.getAttribute('text-color'),
backgroundColor = contact.getAttribute('background-color')
let currentConversation = document.getElementById("receiver_floID").textContent;
- console.log(floID, floGlobals.contacts[floID], currentConversation)
+ console.log(floID, floGlobals.contacts[floID])
if (currentConversation != "")
document.getElementById(currentConversation).classList.add('hide-completely')
let currentChat = document.getElementById(floID)
@@ -1442,18 +1491,19 @@
messenger.removeMark(floID, "unread");
}
- let sentMailFrag = document.createDocumentFragment()
function renderMailList(mails, markUnread = true) {
- for (m in mails) {
- let { ref, subject, time, category, floID, content} = mails[m]
- if(category === 'receivedFrom' || category === 'replyFrom')
- frag.prepend(render.mailCard(ref, subject, time, category, floID, content, markUnread));
- if(category === 'sentTo' || category === 'replyTo')
- sentMailFrag.prepend(render.mailCard(ref, subject, time, category, floID, content, markUnread));
+ let inboxMailFrag = document.createDocumentFragment()
+ let sentMailFrag = document.createDocumentFragment()
+ for (let m in mails) {
+ let { from, to, prev, ref, subject, time, content } = mails[m]
+ if(from === myFloID)
+ sentMailFrag.prepend(render.mailCard(to, ref, subject, time, content, markUnread))
+ else if(to.includes(myFloID))
+ inboxMailFrag.prepend(render.mailCard(from, ref, subject, time, content, markUnread))
}
- inboxMailContainer.prepend(frag)
+ inboxMailContainer.prepend(inboxMailFrag)
sentMailContainer.prepend(sentMailFrag)
- if(inboxMailContainer.children.length){
+ if(inboxMailContainer.children.length || sentMailContainer.children.length){
document.getElementById('no_mails').classList.add('hide-completely')
document.getElementById('all_mail_container').classList.remove('hide-completely')
}
@@ -1469,26 +1519,19 @@
clearElement(document.getElementById("mail_container"))
messenger.getMail(mailRef).then(result => {
- let {floID, time, category, subject, content, prevRef} = result
- //add name (if available)
- let senderName = floGlobals.contacts[floID] || ' ';
+ let { from, to, prev, ref, subject, time, content } = result
//append the contents to mail container
- document.getElementById("mail_container").append(render.mail(senderName, floID, time, category, subject, content));
+ document.getElementById("mail_container").append(render.mail(from, to, subject, time, content));
//add prop for previous mail (if available)
let prevMail = document.getElementById("prev_mail");
- prevMail.dataset["value"] = prevRef;
- prevMail.style.display = prevRef ? 'block' : 'none';
+ prevMail.dataset["value"] = prev;
+ prevMail.style.display = prev ? 'block' : 'none';
//set values for reply mail form if new view
if (newView) {
- if (floID.includes(','))
- document.getElementById("show_reply_popup").classList.add("hide-completely");
- else {
- replyMailPopup.dataset["to"] = floID;
- replyMailPopup.dataset["prevRef"] = mailRef;
- subjectOfReplyMail.value = subject.startsWith("Re: ") ? result
- .subject : `Re: ${subject}`;
- document.getElementById("show_reply_popup").classList.remove("hide-completely");
- }
+ replyMailPopup.dataset["to"] = (from === myFloID ? to.join(',') : from)
+ replyMailPopup.dataset["prev"] = mailRef;
+ subjectOfReplyMail.value = subject.startsWith("Re: ") ? subject : `Re: ${subject}`;
+ document.getElementById("show_reply_popup").classList.remove("hide-completely");
}
messenger.removeMark(mailRef, "unread");
}).catch(error => notify("Unable to read mail", "error", error))
@@ -1510,25 +1553,9 @@
recipients.push(tmp);
})
messenger.sendMail(subject, content, recipients).then(result => {
- console.log(result);
- let sucessCount = Object.keys(result.success).length;
- let errorCount = Object.keys(result.error).length
- if (!sucessCount)
- notify("Failed to send mail!", "error", result)
- else {
- if (errorCount)
- notify(
- `${Object.keys(result.success).length} Mail(s) sent! (${Object.keys(result.error).length} failed)`,
- "warn", {
- sent: result.success,
- failed: result.error
- });
- else
- notify(`${Object.keys(result.success).length} Mail(s) sent!`)
- let {ref, subject, time, category, floID, content} = result.data
- sentMailContainer.prepend(render.mailCard(ref, subject, time, category, floID, content));
- composeMailPopup.hide()
- }
+ notify(`Mail(s) sent!`)
+ renderMailList(result)
+ composeMailPopup.hide()
}).catch(error => notify("Failed to send mail!", "error", error))
} catch (error) {
notify(error, "error")
@@ -1537,262 +1564,9597 @@
function replyMail() {
let recipient = replyMailPopup.dataset.to;
+ if(recipient.includes(','))
+ recipient = recipient.split(',')
let subject = subjectOfReplyMail.value;
let content = replyMailContent.value;
- let prevRef = replyMailPopup.dataset.prevRef;
- messenger.replyMail(prevRef, subject, content, recipient).then(data => {
+ let prev = replyMailPopup.dataset.prev;
+ messenger.sendMail(subject, content, recipient, prev).then(result => {
notify(`Mail replied!`);
+ renderMailList(result)
replyMailPopup.hide()
- let {ref, subject, time, category, floID, content} = data
- sentMailContainer.prepend(render.mailCard(ref, subject, time, category, floID, content));
- }).catch(error => notify("Failed to send mail!", "error", error))
+ }).catch(error => notify("Failed to reply mail!", "error", error))
}
-
+
+
+
+
+
+
+
+