diff --git a/core/src/main/assets/web/export_template.html b/core/src/main/assets/web/export_template.html index fe5b3c2c..79522c87 100644 --- a/core/src/main/assets/web/export_template.html +++ b/core/src/main/assets/web/export_template.html @@ -1,295 +1,362 @@ -
-
-
+
+
+
-
-
- - - -
+
- - + const imageTag = document.createElement("img") + imageTag.src = originalMediaUrl + imageTag.classList.add("chat_media") + mediaContainer.appendChild(imageTag) + + imageTag.onerror = () => { + mediaContainer.removeChild(imageTag) + const mediaTag = document.createElement(message.type === "NOTE" ? "audio" : "video") + mediaTag.classList.add("chat_media") + mediaTag.src = originalMediaUrl + mediaTag.preload = "metadata" + mediaTag.controls = true + mediaContainer.appendChild(mediaTag) + } + + const overlay = document.querySelector('.media-OVERLAY_' + mediaKey) + if (!overlay) { + return + } + + const overlayImage = document.createElement("img") + overlayImage.src = decodeMedia(overlay) + overlayImage.classList.add("chat_media") + overlayImage.classList.add("overlay_media") + mediaContainer.appendChild(overlayImage) + }) + }) + + let fetched = false + + new IntersectionObserver(entries => { + if (!fetched && entries[0].isIntersecting === true) { + fetched = true + messageContainer.innerHTML = "" + observers.forEach(c => { + try { + c() + } catch (e) { + console.log(e) + } + }) + } + }).observe(messageContainer) + } + + return messageContainer + })(document.createElement("div"))) + + document.querySelector('main').appendChild(messageObject) + }) + } + + makeHeader() + makeMain() + + \ No newline at end of file diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/messaging/MessageExporter.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/messaging/MessageExporter.kt index 313848d5..79a0fe94 100644 --- a/core/src/main/kotlin/me/rhunk/snapenhance/core/messaging/MessageExporter.kt +++ b/core/src/main/kotlin/me/rhunk/snapenhance/core/messaging/MessageExporter.kt @@ -2,6 +2,7 @@ package me.rhunk.snapenhance.core.messaging import android.os.Environment import android.util.Base64InputStream +import android.util.Base64OutputStream import com.google.gson.JsonArray import com.google.gson.JsonNull import com.google.gson.JsonObject @@ -21,11 +22,7 @@ import me.rhunk.snapenhance.core.features.impl.downloader.decoder.AttachmentType import me.rhunk.snapenhance.core.features.impl.downloader.decoder.MessageDecoder import me.rhunk.snapenhance.core.wrapper.impl.Message import me.rhunk.snapenhance.core.wrapper.impl.SnapUUID -import java.io.BufferedInputStream -import java.io.File -import java.io.FileOutputStream -import java.io.InputStream -import java.io.OutputStream +import java.io.* import java.text.SimpleDateFormat import java.util.Collections import java.util.Date @@ -34,6 +31,7 @@ import java.util.concurrent.Executors import java.util.concurrent.TimeUnit import java.util.zip.Deflater import java.util.zip.DeflaterInputStream +import java.util.zip.DeflaterOutputStream import java.util.zip.ZipFile import kotlin.io.encoding.Base64 import kotlin.io.encoding.ExperimentalEncodingApi @@ -172,17 +170,15 @@ class MessageExporter( mediaFiles.forEach { (key, filePair) -> output.write("
\n".toByteArray()) output.flush() updateProgress("wrote") @@ -191,7 +187,17 @@ class MessageExporter( //write the json file output.write("\n".toByteArray()) printLog("writing template...")