diff --git a/android/app/src/main/assets/public/index.html b/android/app/src/main/assets/public/index.html index b6eb73ec..95451452 100644 --- a/android/app/src/main/assets/public/index.html +++ b/android/app/src/main/assets/public/index.html @@ -127,12 +127,12 @@ async function refreshDms() { try { - - showAction("action.dm.fetch", "dmrefresh"); let res = await fetchEncrypted("user/dm/list"); - clearAction("dmrefresh"); + if (typeof renderDms === 'function') { + await renderDms(res); + } } catch (e) { clearAction("dmrefresh"); diff --git a/android/app/src/main/assets/public/main.js b/android/app/src/main/assets/public/main.js index 72f3ea8f..d5eb05ad 100644 --- a/android/app/src/main/assets/public/main.js +++ b/android/app/src/main/assets/public/main.js @@ -1234,8 +1234,11 @@ async function switchDetailsContent(title, content) function clickCollapseDms() { var collapseDmsBtn = document.getElementById("collapse-dms"); - collapseDmsBtn.classList.toggle("collapsed"); + var dmsList = document.getElementById("dms-list"); + if (dmsList) { + dmsList.style.display = collapseDmsBtn.classList.contains("collapsed") ? "none" : ""; + } } function clickCollapseGroups() { @@ -1471,6 +1474,7 @@ async function acceptInvite(targetId) { //TODO: Implement key generation clearAction("invite.action"); showBlahNotification(res || "success:invite.accepted"); await loadInvites('received'); + await refreshDms(); } catch (e) { clearAction("invite.action"); showBlahNotification("error:something.wrong"); @@ -1679,4 +1683,98 @@ function handleMobileSwipe() { } } } +} + +async function renderDms(res) { + let container = document.getElementById("dms-list"); + if (!container) return; + + if (res && res !== "") { + let parsed = JSON.parse(res); + let dms = parsed.dms || {}; + let dmEntries = Object.entries(dms); + + // Sort by timestamp descending + dmEntries.sort((a,b) => (parseInt(b[1].string2) || 0) - (parseInt(a[1].string2) || 0)); + + let html = ""; + let count = 0; + + for (let [dmId, dmData] of dmEntries) { + let parts = dmId.split('_'); + let myId = `${id};${host}`; + let targetId = parts[0] === myId ? parts[1] : parts[0]; + + let targetUsername = await fetchAsync(`${url}/idtoname?id=${targetId}`); + if (!targetUsername || targetUsername.trim() === "" || targetUsername.startsWith("error:")) continue; + + let pfp = await getAvatarUrl(targetId, targetUsername); + let displayName = targetUsername.split(':')[0]; + + html += ` + + `; + count++; + } + + if (count > 0) { + container.innerHTML = html; + container.classList.remove("empty"); + } else { + container.innerHTML = `