diff --git a/apps/mobile/app/components/dialogs/pdf-preview/index.js b/apps/mobile/app/components/dialogs/pdf-preview/index.js index 72220142d..a9b8564bb 100644 --- a/apps/mobile/app/components/dialogs/pdf-preview/index.js +++ b/apps/mobile/app/components/dialogs/pdf-preview/index.js @@ -17,12 +17,15 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +import { strings } from "@notesnook/intl"; +import { useThemeColors } from "@notesnook/theme"; import React, { useCallback, useEffect, useRef, useState } from "react"; import { Dimensions, TextInput, View } from "react-native"; import Orientation from "react-native-orientation-locker"; import Pdf from "react-native-pdf"; -import Animated, { FadeIn, FadeOut } from "react-native-reanimated"; +import { MMKV } from "../../../common/database/mmkv"; import downloadAttachment from "../../../common/filesystem/download-attachment"; +import { deleteCacheFileByPath, exists } from "../../../common/filesystem/io"; import { cacheDir } from "../../../common/filesystem/utils"; import { useAttachmentProgress } from "../../../hooks/use-attachment-progress"; import useGlobalSafeAreaInsets from "../../../hooks/use-global-safe-area-insets"; @@ -30,8 +33,9 @@ import { eSubscribeEvent, eUnSubscribeEvent } from "../../../services/event-manager"; -import { useThemeColors } from "@notesnook/theme"; import { AppFontSize } from "../../../utils/size"; +import { DefaultAppStyles } from "../../../utils/styles"; +import { sleep } from "../../../utils/time"; import { Dialog } from "../../dialog"; import BaseDialog from "../../dialog/base-dialog"; import { presentDialog } from "../../dialog/functions"; @@ -39,11 +43,6 @@ import SheetProvider from "../../sheet-provider"; import { IconButton } from "../../ui/icon-button"; import { ProgressBarComponent } from "../../ui/svg/lazy"; import Paragraph from "../../ui/typography/paragraph"; -import { sleep } from "../../../utils/time"; -import { MMKV } from "../../../common/database/mmkv"; -import { deleteCacheFileByPath } from "../../../common/filesystem/io"; -import { strings } from "@notesnook/intl"; -import { DefaultAppStyles } from "../../../utils/styles"; const WIN_WIDTH = Dimensions.get("window").width; const WIN_HEIGHT = Dimensions.get("window").height; @@ -105,11 +104,11 @@ const PDFPreview = () => { const open = useCallback( async (attachment) => { setVisible(true); - setLoading(true); setTimeout(async () => { setAttachment(attachment); let hash = attachment.hash; if (!hash) return; + if (!exists(hash)) setLoading(true); const uri = await downloadAttachment(hash, false, { silent: true, cache: true @@ -166,8 +165,7 @@ const PDFPreview = () => { }} > {loading ? ( - { > {strings.loadingWithProgress(progress?.percent)} - + ) : ( <> { {pdfSource ? ( - - { - setNumPages(numberOfPages); - }} - onPageChanged={(page) => { - setCurrentPage(page); - inputRef.current?.setNativeProps({ - text: page + "" - }); - saveSnapshot({ - currentPage: page, - scale: snapshot?.current?.scale - }); - }} - // scale={snapshotValue.current?.scale} - // onScaleChanged={(scale) => { - // saveSnapshot({ - // currentPage: snapshot?.current?.currentPage, - // scale: scale - // }); - // }} - page={snapshotValue?.current?.currentPage} - password={password} - maxScale={6} - onError={onError} - onPressLink={(uri) => {}} - style={{ - flex: 1, - width: width, - height: Dimensions.get("window").height - }} - /> - + ref={pdfRef} + onLoadComplete={(numberOfPages) => { + setNumPages(numberOfPages); + }} + onPageChanged={(page) => { + setCurrentPage(page); + inputRef.current?.setNativeProps({ + text: page + "" + }); + saveSnapshot({ + currentPage: page, + scale: snapshot?.current?.scale + }); + }} + // scale={snapshotValue.current?.scale} + // onScaleChanged={(scale) => { + // saveSnapshot({ + // currentPage: snapshot?.current?.currentPage, + // scale: scale + // }); + // }} + page={snapshotValue?.current?.currentPage} + password={password} + maxScale={6} + onError={onError} + onPressLink={(uri) => {}} + style={{ + flex: 1, + width: width, + height: Dimensions.get("window").height + }} + /> ) : null} )} diff --git a/apps/mobile/patches/react-native-pdf+6.7.7.patch b/apps/mobile/patches/react-native-pdf+6.7.7.patch index 444398983..363c3f9c7 100644 --- a/apps/mobile/patches/react-native-pdf+6.7.7.patch +++ b/apps/mobile/patches/react-native-pdf+6.7.7.patch @@ -36,3 +36,37 @@ index 3dfe1dc..70ef9da 100644 + implementation 'io.legere:pdfiumandroid:1.0.32' implementation 'com.google.code.gson:gson:2.8.5' } +diff --git a/node_modules/react-native-pdf/android/src/main/java/org/wonday/pdf/PdfView.java b/node_modules/react-native-pdf/android/src/main/java/org/wonday/pdf/PdfView.java +index 7b7a125..361924b 100644 +--- a/node_modules/react-native-pdf/android/src/main/java/org/wonday/pdf/PdfView.java ++++ b/node_modules/react-native-pdf/android/src/main/java/org/wonday/pdf/PdfView.java +@@ -12,6 +12,8 @@ import java.io.File; + + import android.content.ContentResolver; + import android.content.Context; ++import android.os.Handler; ++import android.os.Looper; + import android.util.SizeF; + import android.view.View; + import android.view.ViewGroup; +@@ -105,7 +107,7 @@ public class PdfView extends PDFView implements OnPageChangeListener,OnLoadCompl + TopChangeEvent tce = new TopChangeEvent(surfaceId, getId(), event); + + if (dispatcher != null) { +- dispatcher.dispatchEvent(tce); ++ new Handler(Looper.getMainLooper()).postDelayed(() -> dispatcher.dispatchEvent(tce), 10); + } + + // ReactContext reactContext = (ReactContext)this.getContext(); +diff --git a/node_modules/react-native-pdf/index.js b/node_modules/react-native-pdf/index.js +index 56df005..dd14412 100644 +--- a/node_modules/react-native-pdf/index.js ++++ b/node_modules/react-native-pdf/index.js +@@ -364,7 +364,6 @@ export default class Pdf extends Component { + } + + _onChange = (event) => { +- + let message = event.nativeEvent.message.split('|'); + //__DEV__ && console.log("onChange: " + message); + if (message.length > 0) {