update
This commit is contained in:
@@ -0,0 +1,226 @@
|
||||
#
|
||||
# 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))
|
||||
Reference in New Issue
Block a user