From 3b35640e686d113118193bcb12d4908c583b4be1 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Fri, 7 Jun 2024 17:01:22 -0700 Subject: [PATCH 01/11] defaulting new accounts to searchable --- net/server/internal/api_addAccount.go | 1 + 1 file changed, 1 insertion(+) diff --git a/net/server/internal/api_addAccount.go b/net/server/internal/api_addAccount.go index 37c5d0dd..df6d9959 100644 --- a/net/server/internal/api_addAccount.go +++ b/net/server/internal/api_addAccount.go @@ -83,6 +83,7 @@ func AddAccount(w http.ResponseWriter, r *http.Request) { // create new account account := store.Account{ Username: username, + Searchable: true, Handle: strings.ToLower(username), Password: password, GUID: fingerprint, From 2e6b892791ae11a3e811f957f8a8674c7682d39f Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Fri, 7 Jun 2024 18:16:17 -0700 Subject: [PATCH 02/11] fix unit test --- net/server/internal/testUtil.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/net/server/internal/testUtil.go b/net/server/internal/testUtil.go index 63740785..2b0e7f8c 100644 --- a/net/server/internal/testUtil.go +++ b/net/server/internal/testUtil.go @@ -659,6 +659,13 @@ func addTestAccount(username string) (guid string, token string, err error) { } token = access.AppToken + // set to searchable + searchable := false + if r, w, err = NewRequest("PUT", "/account/searchable?agent="+token, &searchable); err != nil { + return + } + SetAccountSearchable(w, r); + // authorize claim if r, w, err = NewRequest("PUT", "/authorize?agent="+token, "1234abcd"); err != nil { return From b9cb687cf1b1ff83eb3ee6b726110f1565de6474 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Fri, 7 Jun 2024 22:31:02 -0700 Subject: [PATCH 03/11] fixing scan path on image download --- .../conversation/topicItem/imageAsset/useImageAsset.hook.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js index 6d4d9872..91cae4c9 100644 --- a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js +++ b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js @@ -88,7 +88,7 @@ export function useImageAsset(asset) { } const block = await RNFS.read(path, 8, 0, 'base64'); if (block === '/9j/4AAQSkY=') { - await RNFS.scanFile(jpg); + await RNFS.scanFile(path); } } }, From 3e4233b8dfd2eb0d026cffbe658a32c44e54a960 Mon Sep 17 00:00:00 2001 From: balzack Date: Sun, 9 Jun 2024 09:15:56 -0700 Subject: [PATCH 04/11] avoid unmaintained lib for download --- .../topicItem/imageAsset/useImageAsset.hook.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js index 91cae4c9..a8702e2f 100644 --- a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js +++ b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js @@ -3,7 +3,7 @@ import { ConversationContext } from 'context/ConversationContext'; import { Image, Platform } from 'react-native'; import { useWindowDimensions } from 'react-native'; import Share from 'react-native-share'; -import RNFetchBlob from "rn-fetch-blob"; +import { checkResponse, fetchWithTimeout } from 'api/fetchUtil'; import RNFS from "react-native-fs"; export function useImageAsset(asset) { @@ -78,13 +78,13 @@ export function useImageAsset(asset) { if (!state.downloaded) { updateState({ downloaded: true }); const epoch = Math.ceil(Date.now() / 1000); - const dir = Platform.OS === 'ios' ? RNFetchBlob.fs.dirs.DocumentDir : RNFetchBlob.fs.dirs.PictureDir; - const path = `${dir}/databag_${epoch}.jpg` + const dir = Platform.OS === 'ios' ? RNFS.DocumentDirectoryPath : RNFS.DownloadDirectoryPath; + const path = `${dir}/databag_${epoch}.dat` if (state.url.substring(0, 7) === 'file://') { await RNFS.copyFile(state.url.substring(7).split('?')[0], path); } else { - const res = await RNFetchBlob.config({path: path}).fetch("GET", state.url, {}); + await RNFS.downloadFile({ fromUrl: state.url, toFile: path }).promise; } const block = await RNFS.read(path, 8, 0, 'base64'); if (block === '/9j/4AAQSkY=') { From b2d8332b7b1890eb4f7dc9ceda3e47240f43e563 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Sun, 9 Jun 2024 09:46:44 -0700 Subject: [PATCH 05/11] renaming file as jpg --- .../conversation/topicItem/imageAsset/useImageAsset.hook.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js index a8702e2f..a8ffce9e 100644 --- a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js +++ b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js @@ -79,7 +79,7 @@ export function useImageAsset(asset) { updateState({ downloaded: true }); const epoch = Math.ceil(Date.now() / 1000); const dir = Platform.OS === 'ios' ? RNFS.DocumentDirectoryPath : RNFS.DownloadDirectoryPath; - const path = `${dir}/databag_${epoch}.dat` + const path = `${dir}/databag_${epoch}` if (state.url.substring(0, 7) === 'file://') { await RNFS.copyFile(state.url.substring(7).split('?')[0], path); } @@ -88,7 +88,8 @@ export function useImageAsset(asset) { } const block = await RNFS.read(path, 8, 0, 'base64'); if (block === '/9j/4AAQSkY=') { - await RNFS.scanFile(path); + await RNFS.moveFile(path, `${path}.jpg}`); + await RNFS.scanFile(`${path}.jpg}`); } } }, From b5b8c8e2cb92e3b2c4ca66a6df4e688b1bd07cef Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Sun, 9 Jun 2024 10:04:43 -0700 Subject: [PATCH 06/11] fixing download path --- .../conversation/topicItem/imageAsset/useImageAsset.hook.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js index a8ffce9e..670d4dfb 100644 --- a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js +++ b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js @@ -88,7 +88,7 @@ export function useImageAsset(asset) { } const block = await RNFS.read(path, 8, 0, 'base64'); if (block === '/9j/4AAQSkY=') { - await RNFS.moveFile(path, `${path}.jpg}`); + await RNFS.moveFile(path, `${path}.jpg`); await RNFS.scanFile(`${path}.jpg}`); } } From b4ebb2089755aa1902e05e2b0f3fd2eec51bb838 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Sun, 9 Jun 2024 10:17:20 -0700 Subject: [PATCH 07/11] fixing scan path for download --- .../conversation/topicItem/imageAsset/useImageAsset.hook.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js index 670d4dfb..ecb83ae2 100644 --- a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js +++ b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js @@ -89,7 +89,7 @@ export function useImageAsset(asset) { const block = await RNFS.read(path, 8, 0, 'base64'); if (block === '/9j/4AAQSkY=') { await RNFS.moveFile(path, `${path}.jpg`); - await RNFS.scanFile(`${path}.jpg}`); + await RNFS.scanFile(`${path}.jpg`); } } }, From fcbce7c58a7d9cfa6b51f6f2055c6d363bbbbafb Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Sun, 9 Jun 2024 10:26:22 -0700 Subject: [PATCH 08/11] setting extension for scan path --- .../topicItem/imageAsset/useImageAsset.hook.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js index ecb83ae2..12dba224 100644 --- a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js +++ b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js @@ -91,6 +91,22 @@ export function useImageAsset(asset) { await RNFS.moveFile(path, `${path}.jpg`); await RNFS.scanFile(`${path}.jpg`); } + if (block === 'iVBORw0KGgo=') { + await RNFS.moveFile(path, `${path}.png`); + await RNFS.scanFile(`${path}.png`); + } + if (block === 'UklGRphXAQA=') { + await RNFS.moveFile(path, `${path}.webp`); + await RNFS.scanFile(`${path}.webp`); + } + if (block === 'R0lGODlhIAM=') { + await RNFS.moveFile(path, `${path}.gif`); + await RNFS.scanFile(`${path}.gif`); + } + else if (block.startsWith('Qk')) { + await RNFS.moveFile(path, `${path}.bmp`); + await RNFS.scanFile(`${path}.bmp`); + } } }, loaded: () => { From b192e8a93949818812d869fb9c9f204fbc162490 Mon Sep 17 00:00:00 2001 From: balzack Date: Sun, 9 Jun 2024 22:01:23 -0700 Subject: [PATCH 09/11] adding download button to all asset types --- .../topicItem/audioAsset/AudioAsset.jsx | 7 +++++- .../audioAsset/useAudioAsset.hook.js | 19 +++++++++++--- .../topicItem/imageAsset/ImageAsset.jsx | 7 +----- .../imageAsset/useImageAsset.hook.js | 25 ++++++++----------- .../topicItem/videoAsset/VideoAsset.jsx | 7 +++++- .../videoAsset/useVideoAsset.hook.js | 22 +++++++++++++--- 6 files changed, 58 insertions(+), 29 deletions(-) diff --git a/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.jsx b/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.jsx index 3a232862..7543fd65 100644 --- a/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.jsx +++ b/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.jsx @@ -33,7 +33,12 @@ export function AudioAsset({ asset, dismiss }) { )} { state.url && ( - + { state.downloaded && ( + + )} + { !state.downloaded && ( + + )} )} diff --git a/app/mobile/src/session/conversation/topicItem/audioAsset/useAudioAsset.hook.js b/app/mobile/src/session/conversation/topicItem/audioAsset/useAudioAsset.hook.js index 334b47e6..9b54cca5 100644 --- a/app/mobile/src/session/conversation/topicItem/audioAsset/useAudioAsset.hook.js +++ b/app/mobile/src/session/conversation/topicItem/audioAsset/useAudioAsset.hook.js @@ -2,7 +2,7 @@ import { useState, useRef, useEffect, useContext } from 'react'; import { ConversationContext } from 'context/ConversationContext'; import { Image } from 'react-native'; import { useWindowDimensions } from 'react-native'; -import Share from 'react-native-share'; +import RNFS from "react-native-fs"; export function useAudioAsset(asset) { @@ -12,6 +12,7 @@ export function useAudioAsset(asset) { url: null, playing: false, loaded: false, + downloaded: false, }); const closing = useRef(null); @@ -48,8 +49,20 @@ export function useAudioAsset(asset) { }, [asset]); const actions = { - download: () => { - Share.open({ url: state.url }); + download: async () => { + if (!state.downloaded) { + updateState({ downloaded: true }); + const epoch = Math.ceil(Date.now() / 1000); + const dir = Platform.OS === 'ios' ? RNFS.DocumentDirectoryPath : RNFS.DownloadDirectoryPath; + const path = `${dir}/databag_${epoch}.mp3` + if (state.url.substring(0, 7) === 'file://') { + await RNFS.copyFile(state.url.substring(7).split('?')[0], path); + } + else { + await RNFS.downloadFile({ fromUrl: state.url, toFile: path }).promise; + } + await RNFS.moveFile(path, `${path}`); + } }, play: () => { updateState({ playing: true }); diff --git a/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.jsx b/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.jsx index 5e9a307a..60193153 100644 --- a/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.jsx +++ b/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.jsx @@ -19,12 +19,7 @@ export function ImageAsset({ asset, dismiss }) { style={{ ...styles.main, width: state.imageWidth, height: state.imageHeight }} resizeMode={FastImage.resizeMode.contain} /> )} - { state.loaded && state.controls && Platform.OS === 'ios' && ( - - - - )} - { state.loaded && state.controls && Platform.OS !== 'ios' && ( + { state.loaded && state.controls && ( { state.downloaded && ( diff --git a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js index 12dba224..dc3cdf1d 100644 --- a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js +++ b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js @@ -2,8 +2,6 @@ import { useState, useRef, useEffect, useContext } from 'react'; import { ConversationContext } from 'context/ConversationContext'; import { Image, Platform } from 'react-native'; import { useWindowDimensions } from 'react-native'; -import Share from 'react-native-share'; -import { checkResponse, fetchWithTimeout } from 'api/fetchUtil'; import RNFS from "react-native-fs"; export function useImageAsset(asset) { @@ -71,9 +69,6 @@ export function useImageAsset(asset) { const { width, height } = e.nativeEvent; updateState({ imageRatio: width / height }); }, - share: () => { - Share.open({ url: state.url }) - }, download: async () => { if (!state.downloaded) { updateState({ downloaded: true }); @@ -86,26 +81,26 @@ export function useImageAsset(asset) { else { await RNFS.downloadFile({ fromUrl: state.url, toFile: path }).promise; } + let ext = 'dat'; const block = await RNFS.read(path, 8, 0, 'base64'); if (block === '/9j/4AAQSkY=') { - await RNFS.moveFile(path, `${path}.jpg`); - await RNFS.scanFile(`${path}.jpg`); + ext = 'jpg'; } if (block === 'iVBORw0KGgo=') { - await RNFS.moveFile(path, `${path}.png`); - await RNFS.scanFile(`${path}.png`); + ext = 'png'; } if (block === 'UklGRphXAQA=') { - await RNFS.moveFile(path, `${path}.webp`); - await RNFS.scanFile(`${path}.webp`); + ext = 'webp'; } if (block === 'R0lGODlhIAM=') { - await RNFS.moveFile(path, `${path}.gif`); - await RNFS.scanFile(`${path}.gif`); + ext = 'gif'; } else if (block.startsWith('Qk')) { - await RNFS.moveFile(path, `${path}.bmp`); - await RNFS.scanFile(`${path}.bmp`); + ext = 'bmp'; + } + await RNFS.moveFile(path, `${path}.${ext}`); + if (Platform.OS !== 'ios') { + await RNFS.scanFile(`${path}.${ext}`); } } }, diff --git a/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.jsx b/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.jsx index 18ab8b10..9753ec4c 100644 --- a/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.jsx +++ b/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.jsx @@ -39,7 +39,12 @@ export function VideoAsset({ asset, dismiss }) { )} { (state.controls || !state.playing) && state.videoLoaded && ( - + { state.downloaded && ( + + )} + { !state.downloaded && ( + + )} )} { (state.controls || !state.playing) && state.videoLoaded && ( diff --git a/app/mobile/src/session/conversation/topicItem/videoAsset/useVideoAsset.hook.js b/app/mobile/src/session/conversation/topicItem/videoAsset/useVideoAsset.hook.js index 8131d97d..5cbd8449 100644 --- a/app/mobile/src/session/conversation/topicItem/videoAsset/useVideoAsset.hook.js +++ b/app/mobile/src/session/conversation/topicItem/videoAsset/useVideoAsset.hook.js @@ -2,7 +2,7 @@ import { useState, useRef, useEffect, useContext } from 'react'; import { ConversationContext } from 'context/ConversationContext'; import { Image } from 'react-native'; import { useWindowDimensions } from 'react-native'; -import Share from 'react-native-share'; +import RNFS from "react-native-fs"; export function useVideoAsset(asset) { @@ -20,6 +20,7 @@ export function useVideoAsset(asset) { thumbLoaded: false, videoLoaded: false, controls: false, + downloaded: false, }); const controls = useRef(null); @@ -72,8 +73,23 @@ export function useVideoAsset(asset) { }, [asset]); const actions = { - download: () => { - Share.open({ url: state.url }); + download: async () => { + if (!state.downloaded) { + updateState({ downloaded: true }); + const epoch = Math.ceil(Date.now() / 1000); + const dir = Platform.OS === 'ios' ? RNFS.DocumentDirectoryPath : RNFS.DownloadDirectoryPath; + const path = `${dir}/databag_${epoch}.mp4` + if (state.url.substring(0, 7) === 'file://') { + await RNFS.copyFile(state.url.substring(7).split('?')[0], path); + } + else { + await RNFS.downloadFile({ fromUrl: state.url, toFile: path }).promise; + } + await RNFS.moveFile(path, `${path}`); + if (Platform.OS !== 'ios') { + await RNFS.scanFile(`${path}`); + } + } }, setThumbSize: (e) => { const { width, height } = e.nativeEvent || {}; From 8d473b342b52c930b91273f46d469d23b676bfc6 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Mon, 10 Jun 2024 13:33:58 -0700 Subject: [PATCH 10/11] show popup msg on download --- .../topicItem/audioAsset/AudioAsset.jsx | 11 ++++++++++ .../topicItem/audioAsset/AudioAsset.styled.js | 18 +++++++++++++++++ .../audioAsset/useAudioAsset.hook.js | 4 +++- .../topicItem/imageAsset/ImageAsset.jsx | 12 +++++++++++ .../topicItem/imageAsset/ImageAsset.styled.js | 20 ++++++++++++++++++- .../imageAsset/useImageAsset.hook.js | 3 +++ .../topicItem/videoAsset/VideoAsset.jsx | 11 ++++++++++ .../topicItem/videoAsset/VideoAsset.styled.js | 18 +++++++++++++++++ .../videoAsset/useVideoAsset.hook.js | 3 ++- 9 files changed, 97 insertions(+), 3 deletions(-) diff --git a/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.jsx b/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.jsx index 7543fd65..7d7f743b 100644 --- a/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.jsx +++ b/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.jsx @@ -26,6 +26,17 @@ export function AudioAsset({ asset, dismiss }) { )} + { state.showDownloaded && ( + + + { Platform.OS === 'ios' && ( + Documents + )} + { Platform.OS !== 'ios' && ( + Downloads + )} + + )} { state.playing && state.loaded && ( diff --git a/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.styled.js b/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.styled.js index da233c3a..f0700618 100644 --- a/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.styled.js +++ b/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.styled.js @@ -59,5 +59,23 @@ export const styles = StyleSheet.create({ fontSize: 12, color: '#888888', }, + downloaded: { + top: 0, + position: 'absolute', + marginTop: 8, + display: 'flex', + backgroundColor: Colors.grey, + borderRadius: 4, + flexDirection: 'row', + alignItems: 'center', + paddingLeft: 8, + paddingRight: 8, + paddingTop: 2, + paddingBottom: 2, + }, + downloadedLabel: { + color: Colors.white, + paddingLeft: 8, + }, }) diff --git a/app/mobile/src/session/conversation/topicItem/audioAsset/useAudioAsset.hook.js b/app/mobile/src/session/conversation/topicItem/audioAsset/useAudioAsset.hook.js index 9b54cca5..1de7c18f 100644 --- a/app/mobile/src/session/conversation/topicItem/audioAsset/useAudioAsset.hook.js +++ b/app/mobile/src/session/conversation/topicItem/audioAsset/useAudioAsset.hook.js @@ -13,6 +13,7 @@ export function useAudioAsset(asset) { playing: false, loaded: false, downloaded: false, + showDownloaded: false, }); const closing = useRef(null); @@ -61,7 +62,8 @@ export function useAudioAsset(asset) { else { await RNFS.downloadFile({ fromUrl: state.url, toFile: path }).promise; } - await RNFS.moveFile(path, `${path}`); + updateState({ showDownloaded: true }); + setTimeout(() => { updateState({ showDownloaded: false }) }, 2000); } }, play: () => { diff --git a/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.jsx b/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.jsx index 60193153..a17c3c53 100644 --- a/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.jsx +++ b/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.jsx @@ -19,6 +19,18 @@ export function ImageAsset({ asset, dismiss }) { style={{ ...styles.main, width: state.imageWidth, height: state.imageHeight }} resizeMode={FastImage.resizeMode.contain} /> )} + { state.showDownloaded && ( + + + { Platform.OS === 'ios' && ( + Documents + )} + { Platform.OS !== 'ios' && ( + Downloads + )} + + )} + { state.loaded && state.controls && ( { state.downloaded && ( diff --git a/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.styled.js b/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.styled.js index 58259d83..17f92108 100644 --- a/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.styled.js +++ b/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.styled.js @@ -60,6 +60,24 @@ export const styles = StyleSheet.create({ padding: 4, borderRadius: 4, backgroundColor: Colors.grey, - } + }, + downloaded: { + top: 0, + position: 'absolute', + marginTop: 8, + display: 'flex', + backgroundColor: Colors.grey, + borderRadius: 4, + flexDirection: 'row', + alignItems: 'center', + paddingLeft: 8, + paddingRight: 8, + paddingTop: 2, + paddingBottom: 2, + }, + downloadedLabel: { + color: Colors.white, + paddingLeft: 8, + }, }) diff --git a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js index dc3cdf1d..0b419016 100644 --- a/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js +++ b/app/mobile/src/session/conversation/topicItem/imageAsset/useImageAsset.hook.js @@ -17,6 +17,7 @@ export function useImageAsset(asset) { failed: false, controls: false, downloaded: false, + showDownloaded: false, }); const conversation = useContext(ConversationContext); @@ -102,6 +103,8 @@ export function useImageAsset(asset) { if (Platform.OS !== 'ios') { await RNFS.scanFile(`${path}.${ext}`); } + updateState({ showDownloaded: true }); + setTimeout(() => { updateState({ showDownloaded: false }) }, 2000); } }, loaded: () => { diff --git a/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.jsx b/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.jsx index 9753ec4c..4ce6378e 100644 --- a/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.jsx +++ b/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.jsx @@ -27,6 +27,17 @@ export function VideoAsset({ asset, dismiss }) { { (!state.playing || state.controls) && ( )} + { state.showDownloaded && ( + + + { Platform.OS === 'ios' && ( + Documents + )} + { Platform.OS !== 'ios' && ( + Downloads + )} + + )} { !state.playing && state.videoLoaded && ( diff --git a/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.styled.js b/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.styled.js index f29d27b1..977f5a75 100644 --- a/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.styled.js +++ b/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.styled.js @@ -67,5 +67,23 @@ export const styles = StyleSheet.create({ fontSize: 12, color: '#dddddd', }, + downloaded: { + top: 0, + position: 'absolute', + marginTop: 8, + display: 'flex', + backgroundColor: Colors.grey, + borderRadius: 4, + flexDirection: 'row', + alignItems: 'center', + paddingLeft: 8, + paddingRight: 8, + paddingTop: 2, + paddingBottom: 2, + }, + downloadedLabel: { + color: Colors.white, + paddingLeft: 8, + }, }) diff --git a/app/mobile/src/session/conversation/topicItem/videoAsset/useVideoAsset.hook.js b/app/mobile/src/session/conversation/topicItem/videoAsset/useVideoAsset.hook.js index 5cbd8449..db3c15c3 100644 --- a/app/mobile/src/session/conversation/topicItem/videoAsset/useVideoAsset.hook.js +++ b/app/mobile/src/session/conversation/topicItem/videoAsset/useVideoAsset.hook.js @@ -85,10 +85,11 @@ export function useVideoAsset(asset) { else { await RNFS.downloadFile({ fromUrl: state.url, toFile: path }).promise; } - await RNFS.moveFile(path, `${path}`); if (Platform.OS !== 'ios') { await RNFS.scanFile(`${path}`); } + updateState({ showDownloaded: true }); + setTimeout(() => { updateState({ showDownloaded: false }) }, 2000); } }, setThumbSize: (e) => { From 2592c07e00421cb78f26955045a9f004856b4751 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Mon, 10 Jun 2024 13:47:05 -0700 Subject: [PATCH 11/11] fixing folder name for android --- .../session/conversation/topicItem/audioAsset/AudioAsset.jsx | 2 +- .../session/conversation/topicItem/imageAsset/ImageAsset.jsx | 2 +- .../session/conversation/topicItem/videoAsset/VideoAsset.jsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.jsx b/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.jsx index 7d7f743b..79685b57 100644 --- a/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.jsx +++ b/app/mobile/src/session/conversation/topicItem/audioAsset/AudioAsset.jsx @@ -33,7 +33,7 @@ export function AudioAsset({ asset, dismiss }) { Documents )} { Platform.OS !== 'ios' && ( - Downloads + Download )} )} diff --git a/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.jsx b/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.jsx index a17c3c53..23de1ff6 100644 --- a/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.jsx +++ b/app/mobile/src/session/conversation/topicItem/imageAsset/ImageAsset.jsx @@ -26,7 +26,7 @@ export function ImageAsset({ asset, dismiss }) { Documents )} { Platform.OS !== 'ios' && ( - Downloads + Download )} )} diff --git a/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.jsx b/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.jsx index 4ce6378e..b3cd790e 100644 --- a/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.jsx +++ b/app/mobile/src/session/conversation/topicItem/videoAsset/VideoAsset.jsx @@ -34,7 +34,7 @@ export function VideoAsset({ asset, dismiss }) { Documents )} { Platform.OS !== 'ios' && ( - Downloads + Download )} )}