예제 #1
0
 def mouseDoubleClickEvent(self, event):
     index = self.selectedIndexes()[0]
     finfo = QFileInfo(self._model.filePath(index))
     if finfo.isDir():
         self.baseDir = finfo.absoluteFilePath()
         self.PathChangedEvent(self.baseDir)
         self.pathChanged.emit(self.baseDir)
예제 #2
0
 def on_btnInfo_isDir_clicked(self):
     self.__showBtnInfo(self.sender())
     fileInfo = QFileInfo(self.ui.editDir.text())
     if fileInfo.isDir():
         self.ui.textEdit.appendPlainText("True \n")
     else:
         self.ui.textEdit.appendPlainText("False \n")
예제 #3
0
    def readDir(self, dir, readSubs, tiefe, feedback):
        #fileList = [ QFileInfo ]
        #Schleife für alle Einträge des Verzeichnises
        listOfFiles = os.listdir(dir)
        total = 100
        if len(listOfFiles) > 0:
            total = 100.0 / len(listOfFiles)

            #for n,file in enumerate( os.listdir( dir ) ):
            for n, file in enumerate(listOfFiles):

                filePath = (os.path.join(dir, file))
                info = QFileInfo(filePath)
                #print( dir, info.isFile(), info.isDir( ))
                if info.exists() and info.isFile():
                    self.fileList.append(info)
                    #print (info.fileName(), info.size(), info.birthTime(), info.lastModified())
                elif info.exists() and info.isDir() and readSubs == True:
                    # rekursive if Sub Dir
                    self.readDir(filePath, True, tiefe + 1, feedback)
                else:
                    pass
                    #next
                if tiefe == 1:
                    # Update the progress bar in level 1
                    feedback.setProgress(int(n + 1 * total))

        else:
            feedback.setProgress(int(100))
            feedback.pushInfo("No files in directory! " + dir)

            return  #fileList
예제 #4
0
    def dropEvent(self, event):
        if event.mimeData().hasUrls():
            event.setDropAction(Qt.CopyAction)
            event.accept()
            icon = QIcon("loaded.png")
            for url in event.mimeData().urls():
                if url.isLocalFile():
                    fi = QFileInfo(url.toLocalFile())
                    if fi.isDir():
                        it = QDirIterator(
                            fi.fileName(),
                            QDir.Files,
                            QDirIterator.Subdirectories,
                        )
                        while it.hasNext():
                            item = QListWidgetItem()
                            item.setData(PathRole, it.next())
                            self.addItem(item)
                    elif fi.isFile():
                        item = QListWidgetItem()
                        item.setData(PathRole, url.toLocalFile())
                        self.addItem(item)

        else:
            event.ignore()
예제 #5
0
    async def dropEventLocalFile(self, ipfsop, url):
        """
        Handle a drop event with a file:// URL
        """

        maxFileSize = megabytes(64)
        try:
            path = url.toLocalFile()
            fileInfo = QFileInfo(path)

            if fileInfo.isFile():
                file = QFile(path)

                if file.open(QIODevice.ReadOnly):
                    size = file.size()

                    if size and size < maxFileSize:
                        logUser.info('Importing file: {0}'.format(path))
                        entry = await ipfsop.addPath(path)
                        if entry:
                            self.tracker.clipboardProcess(entry['Hash'])

                    file.close()
            if fileInfo.isDir():
                # Don't check for directory size
                async def entryAdded(entry):
                    logUser.info('{path}: imported'.format(
                        path=entry.get('Name')))

                entry = await ipfsop.addPath(path, callback=entryAdded)
                if entry:
                    self.tracker.clipboardProcess(entry['Hash'])
        except Exception:
            pass
예제 #6
0
    def on_item_double_clicked(self, item):
        iteminfo = QFileInfo(item.text())

        if iteminfo.isDir():
            self.currentDir.cd(item.text())
            self.on_execute_clicked()
            self.Path.setText(self.currentDir.absolutePath())
        else:
            QtGui.QDesktopServices.openUrl(QUrl.fromLocalFile(item.text()))
예제 #7
0
    def onActivated(self, index):
        path = self.model().filePath(index)
        fileInfo = QFileInfo(path)
        if (fileInfo.isDir()):
            prefs = preferences.Preferences.instance()
            prefs.setMapsDirectory(fileInfo.canonicalFilePath())
            return

        self.mMainWindow.openFile(path)
예제 #8
0
 def dropEvent(self, event):
     event.ignore()
     return
     if event.source():
         QTreeView.dropEvent(self, event)
     else:
         ix = self.indexAt(event.pos())
         if not self.model().isDir(ix):
             ix = ix.parent()
         pathDir = self.model().filePath(ix)
         if not pathDir:
             pathDir = self.model().filePath(self.rootIndex())
         m = event.mimeData()
         if m.hasUrls():
             urlLocals = [url for url in m.urls() if url.isLocalFile()]
             accepted = False
             for urlLocal in urlLocals:
                 path = urlLocal.toLocalFile()
                 info = QFileInfo(path)
                 n_path = QDir(pathDir).filePath(info.fileName())
                 o_path = info.absoluteFilePath()
                 if n_path == o_path:
                     continue
                 if info.isDir():
                     if QDir(n_path).exists():
                         reply = QMessageBox.question(
                             self, '提示', '所选的分组中存在同名文件夹,是否全部覆盖?',
                             QMessageBox.Yes | QMessageBox.No)
                         if reply == QMessageBox.Yes:
                             shutil.rmtree(n_path)
                             shutil.copytree(o_path, n_path)
                     else:
                         print(o_path)
                         for file in os.walk(o_path):
                             print(file)
                         shutil.copytree(o_path, n_path)
                         self.strategy_filters.append(
                             os.path.split(n_path)[1])
                         self._model.setNameFilters(self.strategy_filters)
                 else:
                     qfile = QFile(o_path)
                     fname = qfile.fileName()
                     if not fname.endswith('.py'):
                         QMessageBox.warning(self, "提示", "暂不支持该类型文件",
                                             QMessageBox.Yes)
                     if QFile(n_path).exists():
                         reply = QMessageBox.question(
                             self, '提示', '所选的分组中存在同名文件,是否覆盖?',
                             QMessageBox.Yes | QMessageBox.No)
                         if reply == QMessageBox.Yes:
                             shutil.copy(o_path, n_path)
                     # qfile.rename(n_path)
                 accepted = True
             if accepted:
                 event.acceptProposedAction()
예제 #9
0
    def changeRoot(self, index):

        path = self.model.filePath(self.rootIndex())
        new_path = self.model.filePath(index)

        absolute_path = os.path.join(path, new_path)

        file_info = QFileInfo(absolute_path)
        if file_info.isDir():
            self.model.setRootPath(absolute_path)
            self.setRootIndex(self.model.index(absolute_path))

            self.rootChanged.emit(absolute_path)
예제 #10
0
def get_path_datasize(path):
    file_info = QFileInfo(path)
    data_size = 0

    if file_info.isDir():
        data_size, files_count = get_directory_size(
            file_info.absoluteFilePath())
        # logger.info("path (folder) %s %u elements size now=%u (%s)",
        #            file_info.absoluteFilePath(), files_count, data_size, pretty_bytes(data_size))
    else:
        # logger.info("path (file) %s size=%u", file_info.path(), file_info.size())
        data_size = file_info.size()
        files_count = 1

    return data_size, files_count
예제 #11
0
    def ValidateSave(self) -> bool:
        """Checks if a valid footprint name and folder are selected

            Returns:
                bool: true if the selected folder exists
            """
        name = self.ui.le_Name.text()
        folder = QDir(self.ui.le_Path.text())

        folderInfo = QFileInfo(folder.absolutePath())

        if (folderInfo.isDir() and folderInfo.isWritable()):
            return folder.exists() and name != ""
        else:
            return False
예제 #12
0
 def _ensure_writable_location(self, dstDir):
     while True:
         dstDirInfo = QFileInfo(dstDir)
         if ( dstDirInfo.isDir() and dstDirInfo.isWritable() ):
             return dstDir
         else:
             # Display error messagebox
             msgBox = QtWidgets.QMessageBox(self)
             msgBox.setWindowTitle(_translate("MessageBox", "PyCirkuit - Error",  "Message Box title"))
             msgBox.setIcon(QtWidgets.QMessageBox.Critical)
             msgBox.setText(_translate("MessageBox", "The exporting destination directory is not writable.", "Message box text." ))
             msgBox.setInformativeText(_translate("MessageBox", "Please enter a suitable directory to write into.",  "Message Box text"))
             msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
             msgBox.exec()
             # Ask user to choose another directory
             dstDir = self._ask_writable_dir(dstDirInfo.canonicalPath())[0]
예제 #13
0
    def deleteFile(self):
        index = self.selectionModel().currentIndex()
        path = self.model.filePath(index)
        if path:
            fileInfo = QFileInfo(path)
            if fileInfo.isFile():
                if not self.ask_dialog(
                        "Do you wan't to delete the selected file?"):
                    return
                file = QFile(path)
                file.remove()

            elif fileInfo.isDir():
                if not self.ask_dialog(
                        "Do you wan't to delete the selected directory?"):
                    return
                directory = QDir(path)
                directory.removeRecursively()
예제 #14
0
def getMetadataForFileList(filenames):
    '''Takes a list of filenames, returns a list of metadata associated with
    all files in that list that are readable tracks'''

    metadata = []
    for filename in filenames:
        info = QFileInfo(filename)
        if info.isDir() and info.isExecutable():
            print(filename)
            dir = QDir(filename)
            print(dir.entryList(QDir.AllEntries | QDir.NoDotAndDotDot))
            metadata.extend(
                getMetadataForFileList([
                    i.filePath()
                    for i in dir.entryInfoList(QDir.AllEntries
                                               | QDir.NoDotAndDotDot)
                ]))
        elif info.isFile() and info.isReadable():
            print(filename)
            metadata.extend(processFile(filename))
    return metadata
예제 #15
0
 def choose_mountpoint(self):
     while True:
         path = QFileDialog.getExistingDirectory(
             self,
             QCoreApplication.translate("GlobalSettingsWidget",
                                        "Choose a mountpoint"),
             str(pathlib.Path.home()),
         )
         if not path:
             return
         path_info = QFileInfo(path)
         if not path_info.isDir() or not path_info.isWritable():
             show_error(
                 self,
                 QCoreApplication.translate(
                     "GlobalSettingsWidget",
                     "The choosen folder is not writable."),
             )
         else:
             self.line_edit_mountpoint.setText(path_info.absoluteFilePath())
             return
예제 #16
0
    def set_data(self, _file):
        ff = QFileInfo(_file)
        self.short_title(ff.fileName())
        self.ui.lsize.setText(naturalsize(ff.size(), format="%.1f "))

        if ff.isDir():
            self.ui.litems.show()
            self.ui.label_3.show()
            self.ui.litems.setText(str(len(glob(_file + "/*"))))
        else:
            self.ui.label_3.hide()
            self.ui.litems.hide()

        self.ui.lcreated.setText(ff.created().toString())
        self.ui.lmodified.setText(ff.lastModified().toString())
        self.ui.laccessed.setText(ff.lastRead().toString())
        self.ui.luser.setText(ff.owner())
        self.ui.luid.setText(str(ff.ownerId()))
        self.ui.lgroup.setText(str(ff.group()))
        self.ui.lgid.setText(str(ff.groupId()))
        self.ui.lpath.setText(ff.path())
예제 #17
0
 def createRequest(self, op, request, outgoingData=None):
     """
     Public method to create a request.
     
     @param op the operation to be performed
         (QNetworkAccessManager.Operation)
     @param request reference to the request object (QNetworkRequest)
     @param outgoingData reference to an IODevice containing data to be sent
         (QIODevice)
     @return reference to the created reply object (QNetworkReply)
     """
     if op == QNetworkAccessManager.GetOperation:
         fileInfo = QFileInfo(request.url().toLocalFile())
         if not fileInfo.isDir() or \
            not fileInfo.isReadable() or \
            not fileInfo.exists():
             return None
         from .FileReply import FileReply
         return FileReply(request.url(), self.parent())
     else:
         return None
예제 #18
0
 def createRequest(self, op, request, outgoingData=None):
     """
     Public method to create a request.
     
     @param op the operation to be performed
         (QNetworkAccessManager.Operation)
     @param request reference to the request object (QNetworkRequest)
     @param outgoingData reference to an IODevice containing data to be sent
         (QIODevice)
     @return reference to the created reply object (QNetworkReply)
     """
     if op == QNetworkAccessManager.GetOperation:
         fileInfo = QFileInfo(request.url().toLocalFile())
         if not fileInfo.isDir() or \
            not fileInfo.isReadable() or \
            not fileInfo.exists():
             return None
         from .FileReply import FileReply
         return FileReply(request.url(), self.parent())
     else:
         return None
예제 #19
0
 def __loadFlashCookiesFromPath(self, path):
     """
     Private slot to load the Flash cookies from a path.
     
     @param path Flash cookies path
     @type str
     """
     if path.endswith("#AppContainer"):
         # specific to IE and Windows
         return
     
     path = path.replace("\\", "/")
     solDir = QDir(path)
     entryList = solDir.entryList()
     for entry in entryList:
         if entry == "." or entry == "..":
             continue
         entryInfo = QFileInfo(path + "/" + entry)
         if entryInfo.isDir():
             self.__loadFlashCookiesFromPath(entryInfo.filePath())
         else:
             self.__insertFlashCookie(entryInfo.filePath())
예제 #20
0
    def __loadFlashCookiesFromPath(self, path):
        """
        Private slot to load the Flash cookies from a path.
        
        @param path Flash cookies path
        @type str
        """
        if path.endswith("#AppContainer"):
            # specific to IE and Windows
            return

        path = path.replace("\\", "/")
        solDir = QDir(path)
        entryList = solDir.entryList()
        for entry in entryList:
            if entry == "." or entry == "..":
                continue
            entryInfo = QFileInfo(path + "/" + entry)
            if entryInfo.isDir():
                self.__loadFlashCookiesFromPath(entryInfo.filePath())
            else:
                self.__insertFlashCookie(entryInfo.filePath())