#!/usr/bin/python

import os, sys

#support running uninstalled
_dirname = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
if os.path.exists(os.path.join(_dirname, "CHANGELOG.md")):
    sys.path.insert(0, _dirname)

from optparse import OptionParser
import gettext
import time

from blueman.Constants import *
import gi
gi.require_version("Gtk", "3.0")

from blueman.bluez.Manager import Manager
from blueman.gui.DeviceSelectorDialog import DeviceSelectorDialog
from blueman.Functions import *
from blueman.main.Config import Config


class Browse:
    def __init__(self):
        setup_icon_path()

        usage = "Usage: %prog [options]"
        parser = OptionParser(usage)
        parser.add_option("-d", "--device", dest="device",
                          action="store", help=_("Browse this device"), metavar="ADDRESS")

        (options, args) = parser.parse_args()
        self.options = options
        self.args = args

        if options.device == None:
            dev = self.select_device()
            if not dev:
                exit()

            addr = dev.Address

        else:
            addr = options.device
        addr = addr.strip(" ")
        conf = Config("transfer")
        if conf.props.browse_command == None:
            conf.props.browse_command = DEF_BROWSE_COMMAND
        if "nautilus" in DEF_BROWSE_COMMAND:
            if not have("nautilus"):
                conf.props.browse_command = "thunar obex://[%d]"

        cmd = conf.props.browse_command.replace("%d", addr)
        args = cmd.split(" ")
        try:
            spawn(args, True)
        except Exception as e:
            dprint(e)
            d = Gtk.MessageDialog(None, buttons=Gtk.ButtonsType.OK, type=Gtk.MessageType.ERROR)
            d.props.text = _("Failed to launch \"%s\"") % args[0]
            d.props.secondary_text = "%s\n\n" % e + _("You can enter an alternate browser in service settings")
            d.run()
            d.destroy()

    def select_device(self):
        d = DeviceSelectorDialog()
        resp = d.run()
        d.destroy()
        if resp == Gtk.ResponseType.ACCEPT:
            sel = d.GetSelection()
            if sel:
                return sel[1]
            else:
                return None
        else:
            return None


Browse()
