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) {