--- 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(