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.


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ú Eines ▸ Macros ▸ Executa una macro.

        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("")
        ' PathSubstitution service exhibits information to infer
        ' <UserProfile|Share>/Scripts/python locations from
        Set obj = sm.createInstance("")
        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():
            def substitute(var_name):
                ctx = uno.getComponentContext()
                ps = ctx.getServiceManager().createInstanceWithContext(
                    '', ctx)
                return ps.getSubstituteVariableValue(var_name)
            def Share():
                inst = uno.fileUrlToSystemPath(Session.substitute("$(prog)"))
                return os.path.normpath(inst.replace('program', "Share"))
            def SharedScripts():
                return ''.join([Session.Share(), os.sep, "Scripts"])
            def SharedPythonScripts():
                return ''.join([Session.SharedScripts(), os.sep, 'python'])
            @property  # alternativa a la variable «$(username)»
            def UserName(self): return getpass.getuser()
            def UserProfile(self):
                return uno.fileUrlToSystemPath(Session.substitute("$(user)"))
            def UserScripts(self):
                return ''.join([self.UserProfile, os.sep, 'Scripts'])
            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()
            Set _ps = CreateUnoService("")
        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

Ens cal la vostra ajuda!