123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- #
- # This file is part of the LibreOffice project.
- #
- # This Source Code Form is subject to the terms of the Mozilla Public
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
- #
- # This file incorporates work covered by the following license notice:
- #
- # Licensed to the Apache Software Foundation (ASF) under one or more
- # contributor license agreements. See the NOTICE file distributed
- # with this work for additional information regarding copyright
- # ownership. The ASF licenses this file to you under the Apache
- # License, Version 2.0 (the "License"); you may not use this file
- # except in compliance with the License. You may obtain a copy of
- # the License at http://www.apache.org/licenses/LICENSE-2.0 .
- #
- import traceback
- from os import sep as FileSeparator
- '''
- This class delivers static convenience methods
- to use with ucb SimpleFileAccess service.
- You can also instantiate the class, to encapsulate
- some functionality of SimpleFileAccess. The instance
- keeps a reference to an XSimpleFileAccess and an
- XFileIdentifierConverter, saves the permanent
- overhead of querying for those interfaces, and delivers
- convenience methods for using them.
- These Convenience methods include mainly Exception-handling.
- '''
- class FileAccess(object):
- def __init__(self, xmsf):
- #get the file identifier converter
- self.filenameConverter = xmsf.createInstance(
- "com.sun.star.ucb.FileContentProvider")
- self.xInterface = xmsf.createInstance(
- "com.sun.star.ucb.SimpleFileAccess")
- @classmethod
- def deleteLastSlashfromUrl(self, _sPath):
- if _sPath.endswith("/"):
- return _sPath[:-1]
- else:
- return _sPath
- '''
- Further information on arguments value see in OO Developer Guide,
- chapter 6.2.7
- @param xMSF
- @param sPath
- @param xSimpleFileAccess
- @return the respective path of the office application.
- A probable following "/" at the end is trimmed.
- '''
- @classmethod
- def getOfficePath(self, xMSF, sPath, xSimpleFileAccess):
- try:
- ResultPath = ""
- xInterface = xMSF.createInstance("com.sun.star.util.PathSettings")
- ResultPath = str(getattr(xInterface, sPath))
- ResultPath = self.deleteLastSlashfromUrl(ResultPath)
- return ResultPath
- except Exception:
- traceback.print_exc()
- return ""
- @classmethod
- def getFolderTitles(self, xMSF, FilterName, FolderName, resDict=None):
- #Returns and ordered dict containing the template's name and path
- locLayoutFiles = []
- try:
- xDocInterface = xMSF.createInstance(
- "com.sun.star.document.DocumentProperties")
- xInterface = xMSF.createInstance(
- "com.sun.star.ucb.SimpleFileAccess")
- nameList = xInterface.getFolderContents(FolderName, False)
- if FilterName is None or FilterName == "":
- FilterName = None
- else:
- FilterName += "-"
- locLayoutDict = {}
- for i in nameList:
- fileName = self.getFilename(i)
- if FilterName is None or fileName.startswith(FilterName):
- xDocInterface.loadFromMedium(i, tuple())
- if resDict is None:
- title = xDocInterface.Title
- else:
- if xDocInterface.Title in resDict:
- # localise string at runtime
- title = resDict[xDocInterface.Title]
- else:
- title = xDocInterface.Title
- locLayoutDict[title] = i
- #sort the dictionary and create a list containing the
- #keys list and the values list
- keysList = sorted(locLayoutDict.keys())
- valuesList= []
- for i in keysList:
- valuesList.append(locLayoutDict[i])
- locLayoutFiles.append(keysList)
- locLayoutFiles.append(valuesList)
- except Exception:
- traceback.print_exc()
- return locLayoutFiles
- @classmethod
- def getTitle(self, xMSF, _sFile):
- sTitle = ""
- try:
- xDocInterface = xMSF.createInstance(
- "com.sun.star.document.DocumentProperties")
- noArgs = []
- xDocInterface.loadFromMedium(_sFile, noArgs)
- sTitle = xDocInterface.getTitle()
- except Exception:
- traceback.print_exc()
- return sTitle
- def getPath(self, parentURL, childURL):
- string = ""
- if childURL is not None and childURL != "":
- string = "/" + childURL
- return self.filenameConverter.getSystemPathFromFileURL(
- parentURL + string)
- def copy(self, source, target):
- try:
- self.xInterface.copy(source, target)
- return True
- except Exception:
- traceback.print_exc()
- return False
- def exists(self, filename, default):
- try:
- return self.xInterface.exists(filename)
- except Exception:
- traceback.print_exc()
- return default
- def delete(self, filename):
- try:
- self.xInterface.kill(filename)
- return True
- except Exception:
- traceback.print_exc()
- return False
- # lists the files in a given directory
- # @param dir
- # @param includeFolders
- # @return
- def listFiles(self, folder, includeFolders):
- try:
- return self.xInterface.getFolderContents(folder, includeFolders)
- except Exception:
- traceback.print_exc()
- return [""]
- def getSize(self, url):
- try:
- return self.xInterface.getSize(url)
- except Exception:
- traceback.print_exc()
- return -1
- def getURL(self, parentURL, childPath):
- if len(childPath) > 0 and childPath[0] == "/":
- path = parentURL + childPath
- else:
- path = parentURL + "/" + childPath
- return path
- @classmethod
- def getFilename(self, path, pathSeparator = "/"):
- return path.split(pathSeparator)[-1]
- '''
- if the path points to file, gives the directory in which the file is.
- '''
- @classmethod
- def getParentDir(self, url):
- while url[-1] == "/":
- url = url[:-1]
- return url[:url.rfind("/")]
- @classmethod
- def connectURLs(self, urlFolder, urlFilename):
- stringFolder = ""
- stringFileName = urlFilename
- if not urlFolder.endswith("/"):
- stringFolder = "/"
- if urlFilename.startswith("/"):
- stringFileName = urlFilename[1:]
- return urlFolder + stringFolder + stringFileName
- # @param filename
- # @return the extension of the given filename.
- @classmethod
- def getExtension(self, filename):
- p = filename.find(".")
- if (p == -1):
- return ""
- else:
- while (True):
- filename = filename[(p+1):]
- p = filename.find(".")
- if (p == -1):
- break
- return filename
- @classmethod
- def filename(self, name, ext, i):
- return name + ("" if (i == 0) else str(i)) + ("" if (ext == "") else ("." + ext))
|