src/eric7/PdfViewer/PdfViewerWindow.py

branch
server
changeset 10631
00f5aae565a3
parent 10439
21c28b0f9e41
child 10633
dda7e43934dc
--- a/src/eric7/PdfViewer/PdfViewerWindow.py	Fri Mar 08 15:30:23 2024 +0100
+++ b/src/eric7/PdfViewer/PdfViewerWindow.py	Fri Mar 08 15:30:53 2024 +0100
@@ -11,7 +11,7 @@
 import os
 import pathlib
 
-from PyQt6.QtCore import QPointF, QSize, Qt, pyqtSignal, pyqtSlot
+from PyQt6.QtCore import QBuffer, QByteArray, QIODevice, QPointF, QSize, Qt, pyqtSignal, pyqtSlot
 from PyQt6.QtGui import QAction, QActionGroup, QClipboard, QGuiApplication, QKeySequence
 from PyQt6.QtPdf import QPdfDocument, QPdfLink
 from PyQt6.QtPdfWidgets import QPdfView
@@ -30,9 +30,11 @@
 from eric7.EricGui import EricPixmapCache
 from eric7.EricGui.EricAction import EricAction
 from eric7.EricWidgets import EricFileDialog, EricMessageBox
+from eric7.EricWidgets.EricApplication import ericApp
 from eric7.EricWidgets.EricMainWindow import EricMainWindow
 from eric7.EricWidgets.EricStretchableSpacer import EricStretchableSpacer
 from eric7.Globals import recentNamePdfFiles
+from eric7.RemoteServerInterface import EricServerFileDialog
 from eric7.SystemUtilities import FileSystemUtilities, OSUtilities
 
 from .PdfInfoWidget import PdfInfoWidget
@@ -79,6 +81,12 @@
         if not self.__fromEric:
             self.setStyle(Preferences.getUI("Style"), Preferences.getUI("StyleSheet"))
 
+        self.__remotefsInterface =(
+            ericApp().getObject("EricServer").getServiceInterface("FileSystem")
+            if self.__fromEric
+            else None
+        )
+
         self.__pdfDocument = QPdfDocument(self)
 
         self.__cw = QSplitter(Qt.Orientation.Horizontal, self)
@@ -961,8 +969,31 @@
         """
         canceled = False
         err = QPdfDocument.Error.IncorrectPassword
+
+        if FileSystemUtilities.isRemoteFileName(fileName):
+            try:
+                data = QByteArray(self.__remotefsInterface.readFile(fileName))
+                buffer = QBuffer(data)
+            except OSError as err:
+                EricMessageBox.warning(
+                    self,
+                    self.tr("OpenPDF File"),
+                    self.tr(
+                        "<p>The PDF file <b>{0}</b> could not be read.</p>"
+                        "<p>Reason: {1}</p>"
+                    ).format(fileName, str(err)),
+                )
+                return
+        else:
+            buffer = None
+            
         while not canceled and err == QPdfDocument.Error.IncorrectPassword:
-            err = self.__pdfDocument.load(fileName)
+            if FileSystemUtilities.isRemoteFileName(fileName):
+                buffer.open(QIODevice.OpenModeFlag.ReadOnly)
+                self.__pdfDocument.load(buffer)
+                err = QPdfDocument.Error.None_
+            else:
+                err = self.__pdfDocument.load(fileName)
             if err == QPdfDocument.Error.IncorrectPassword:
                 password, ok = QInputDialog.getText(
                     self,
@@ -986,7 +1017,11 @@
             self.__documentInfoWidget.setFileName("")
             return
 
-        self.__lastOpenPath = os.path.dirname(fileName)
+        self.__lastOpenPath = (
+            self.__remotefsInterface.dirname(fileName)
+            if FileSystemUtilities.isRemoteFileName(fileName)
+            else os.path.dirname(fileName)
+        )
         self.__setCurrentFile(fileName)
 
         documentTitle = self.__pdfDocument.metaData(QPdfDocument.MetaDataField.Title)
@@ -1019,11 +1054,20 @@
         ):
             self.__lastOpenPath = self.__project.getProjectPath()
 
-        fileName = EricFileDialog.getOpenFileName(
-            self,
-            self.tr("Open PDF File"),
-            self.__lastOpenPath,
-            self.tr("PDF Files (*.pdf);;All Files (*)"),
+        fileName = (
+            EricServerFileDialog.getOpenFileName(
+                self,
+                self.tr("Open PDF File"),
+                self.__lastOpenPath,
+                self.tr("PDF Files (*.pdf);;All Files (*)"),
+            )
+            if FileSystemUtilities.isRemoteFileName(self.__lastOpenPath)
+            else EricFileDialog.getOpenFileName(
+                self,
+                self.tr("Open PDF File"),
+                self.__lastOpenPath,
+                self.tr("PDF Files (*.pdf);;All Files (*)"),
+            )
         )
         if fileName:
             self.__loadPdfFile(fileName)
@@ -1044,11 +1088,20 @@
             self.__lastOpenPath = self.__project.getProjectPath()
 
         if not fileName:
-            fileName = EricFileDialog.getOpenFileName(
-                self,
-                self.tr("Open PDF File"),
-                self.__lastOpenPath,
-                self.tr("PDF Files (*.pdf);;All Files (*)"),
+            fileName = (
+                EricServerFileDialog.getOpenFileName(
+                    self,
+                    self.tr("Open PDF File"),
+                    self.__lastOpenPath,
+                    self.tr("PDF Files (*.pdf);;All Files (*)"),
+                )
+                if FileSystemUtilities.isRemoteFileName(self.__lastOpenPath)
+                else EricFileDialog.getOpenFileName(
+                    self,
+                    self.tr("Open PDF File"),
+                    self.__lastOpenPath,
+                    self.tr("PDF Files (*.pdf);;All Files (*)"),
+                )
             )
         if fileName:
             viewer = PdfViewerWindow(

eric ide

mercurial