#!/bin/env python3

import subprocess
import urllib.parse

from gi.repository import GLib
from pydbus import SessionBus

terminal_cmd = ["st", "-e"]


class FMService(object):
    """
    <node>
        <interface name='org.freedesktop.FileManager1'>
            <method name='ShowFolders'>
                <arg type='as' name='URIs' direction='in'/>
                <arg type='s' name='StartupId' direction='in'/>
            </method>
            <method name='ShowItems'>
                <arg type='as' name='URIs' direction='in'/>
                <arg type='s' name='StartupId' direction='in'/>
            </method>
            <method name='ShowItemProperties'>
                <arg type='as' name='URIs' direction='in'/>
                <arg type='s' name='StartupId' direction='in'/>
            </method>
        </interface>
    </node>
    """

    def ShowItems(self, uris, startup_id):
        uri = urllib.parse.unquote(uris[0]).replace("file://", "")
        subprocess.Popen([*terminal_cmd, "lf", uri])

    def ShowFolders(self, uris, startup_id):
        self.ShowItems(uris, startup_id)

    def ShowItemProperties(self, uris, startup_id):
        self.ShowItems(uris, startup_id)


session_bus = SessionBus()
session_bus.publish("org.freedesktop.FileManager1", FMService())
loop = GLib.MainLoop()
loop.run()