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.
Exemples:
Amb l'intèrpret de Python.
>>> from <the_module> import Session
>>> print(Session.SharedPythonScripts()) # static method
>>> print(Session().UserName) # propietat de l'objecte
>>> input(Session().UserProfile) # propietat de l'objecte
Des del menú
.
from <the_module> import Session
def demo_session():
import screen_io as ui
ui.MsgBox(Session.Share(),title='Installation Share') # static method
ui.Print(Session.SharedPythonScripts()) # static method
s = Session() # creació de la instància
ui.MsgBox(s.UserName,title='Hola') # propietat de l'objecte
ui.Print(s.UserPythonScripts) # propietat de l'objecte
g_exportedScripts = (demo_session,) # macros públiques
Amb el LibreOffice Basic.
Sub Session_example()
Dim s As New Session ' instance of Session class
Print "Shared scripts location:", s.SharedScripts
MsgBox s.UserName,,"Hola"
Print s.UserScripts, Chr(13), s.UserPythonScripts
End Sub ' Session_example
Amb el COM/OLE i el llenguatge VBScript
' El gestor de serveis sempre és el punt d'entrada
' 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"
Classe Session del Python:
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 # alternativa a la variable «$(username)»
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 del LibreOffice Basic:
Option Explicit
Option Compatible
Option ClassModule
Private _ps As Object ' membre privat
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 ' nom del compte d'usuari
userName = _ps.getSubstituteVariableValue("$(username)")
End Property ' Session.userName
Public Property Get UserProfile() As String ' camí del perfil d'usuari al sistema
userProfile = ConvertFromURL(_ps.getSubstituteVariableValue("$(user)"))
End Property ' Session.userProfile
Public Property Get UserScripts() As String ' camí dels scripts d'usuari al sistema
userScripts = userProfile() & GetPathSeparator() &"Scripts"
End Property ' Session.userScripts
Public Property Get UserPythonScripts() As String ' camí dels scripts d'usuari en Python al sistema
userPythonScripts = userScripts() & GetPathSeparator() &"python"
End Property ' Session.userPythonScripts