Getting Session Information
Computing LibreOffice user profile and shared modules system file paths can be performed with Python or with Basic languages. BeanShell, Java, JavaScript and Python scripts locations can be derived from this information.
Exemplos:
Com o interpretador Python.
>>> from <the_module> import Session
>>> print(Session.SharedPythonScripts()) # método estático
>>> print(Session().UserName) # propriedade do objeto
>>> input(Session().UserProfile) # propriedade do objeto
No menu
.
from <the_module> import Session
def demo_session():
import screen_io as ui
ui.MsgBox(Session.Share(),title='Installation Share') # método estático
ui.Print(Session.SharedPythonScripts()) # método estático
s = Session() # criação de instância
ui.MsgBox(s.UserName,title='Hello') # propriedade do objeto
ui.Print(s.UserPythonScripts) # propriedade do objeto
g_exportedScripts = (demo_session,) # macros públicas
Com LibreOffice Basic
Sub Session_example()
Dim s As New Session ' instance of Session class
Print "Local de scripts partilhados:", s.SharedScripts
MsgBox s.UserName,,"Olá"
Print s.UserScripts, Chr(13), s.UserPythonScripts
End Sub ' Session_example
Using COM/OLE and Visual Basic Scripting language.
' The service manager is always the entry point
' If there is no office running then an office is started up
Set sm = WScript.CreateObject("com.sun.star.ServiceManager")
' PathSubstitution service exhibits information to infer
' <UserProfile|Share>/Scripts/python locations from
Set obj = sm.createInstance("com.sun.star.util.PathSubstitution")
MsgBox CreateObject("WScript.Network").UserName,, "Hello"
user = obj.getSubstituteVariableValue("$(user)")
MsgBox user & "/Scripts",, "User scripts location"
libO = Replace(obj.getSubstituteVariableValue("$(inst)"), "program/..", "Share")
MsgBox libO & "/Scripts",, "Shared scripts location"
Python Session class:
import getpass, os, os.path, uno
class Session():
@staticmethod
def substitute(var_name):
ctx = uno.getComponentContext()
ps = ctx.getServiceManager().createInstanceWithContext(
'com.sun.star.util.PathSubstitution', ctx)
return ps.getSubstituteVariableValue(var_name)
@staticmethod
def Share():
inst = uno.fileUrlToSystemPath(Session.substitute("$(prog)"))
return os.path.normpath(inst.replace('program', "Share"))
@staticmethod
def SharedScripts():
return ''.join([Session.Share(), os.sep, "Scripts"])
@staticmethod
def SharedPythonScripts():
return ''.join([Session.SharedScripts(), os.sep, 'python'])
@property # alternative to '$(username)' variable
def UserName(self): return getpass.getuser()
@property
def UserProfile(self):
return uno.fileUrlToSystemPath(Session.substitute("$(user)"))
@property
def UserScripts(self):
return ''.join([self.UserProfile, os.sep, 'Scripts'])
@property
def UserPythonScripts(self):
return ''.join([self.UserScripts, os.sep, "python"])
Unlike Basic, pathname normalization is performed with Python inside Session class.
Classe Session do LibreOffice Basic:
Option Explicit
Option Compatible
Option ClassModule
Private _ps As Object ' membro privado
Private Sub Class_Initialize()
GlobalScope.BasicLibraries.LoadLibrary("Tools")
Set _ps = CreateUnoService("com.sun.star.util.PathSubstitution")
End Sub ' Constructor
Private Sub Class_Terminate()
_ps = Nothing
End Sub ' Destructor
Public Property Get SharedScripts() As String
Dim inst As String, shr As String
inst = ConvertFromURL(_ps.getSubstituteVariableValue("$(prog)"))
shr = Tools.Strings.ReplaceString(inst,"Share","program")
SharedScripts = shr & GetPathSeparator() &"Scripts"
End Property ' Session.sharedScripts
Public Property Get SharedPythonScripts() As String
sharedPythonScripts = sharedScripts() & GetPathSeparator() &"python"
End Property ' Session.sharedPythonScripts
Public Property Get UserName() As String ' nome da conta do utilizador
userName = _ps.getSubstituteVariableValue("$(username)")
End Property ' Session.userName
Public Property Get UserProfile() As String ' caminho do perfil do utilizador no sistema
userProfile = ConvertFromURL(_ps.getSubstituteVariableValue("$(user)"))
End Property ' Session.userProfile
Public Property Get UserScripts() As String ' Caminho dos script do utilizador no sistema
userScripts = userProfile() & GetPathSeparator() &"Scripts"
End Property ' Session.userScripts
Public Property Get UserPythonScripts() As String ' User Python scripts system path
userPythonScripts = userScripts() & GetPathSeparator() &"python"
End Property ' Session.userPythonScripts