#!/usr/bin/python3

import sys
import signal
import os
import locale
import gettext

import argparse
import logging
try:
    import gi
except ImportError:
    sys.exit("Missing pygobject")
try:
    gi.require_version('GLib', '2.0')
    gi.require_version('Gio', '2.0')
    gi.require_version('GObject', '2.0')
    gi.require_version('Gtk', '3.0')
    gi.require_version('Gdk', '3.0')
    gi.require_version('Tracker', '2.0')
    gi.require_version('WebKit2', '4.0')
except ValueError as e:
    sys.exit("Missing dependency: {}".format(e))
from gi.repository import Gio
import gnomenews

localedir = "/usr/share/locale"
srcdir = os.path.abspath(os.path.join(os.path.dirname(gnomenews.__file__), ".."))
if os.path.exists(os.path.join(srcdir, "gnome-news.doap")):
    print("Running from source tree, using local files")
    pkgdatadir = os.path.join(srcdir, "data")
    if not os.environ.get("GSETTINGS_SCHEMA_DIR"):
        os.environ["GSETTINGS_SCHEMA_DIR"] = pkgdatadir
else:
    pkgdatadir = "/usr/share/gnome-news"

def install_excepthook():
    """ Make sure we exit when an unhandled exception occurs. """
    from gi.repository import Gtk
    old_hook = sys.excepthook

    def new_hook(etype, evalue, etb):
        old_hook(etype, evalue, etb)
        while Gtk.main_level():
            Gtk.main_quit()
        sys.exit()
    sys.excepthook = new_hook

if __name__ == "__main__":
    install_excepthook()

    parser = argparse.ArgumentParser()
    parser.add_argument("-d", "--debug", action="store_true", default=False, dest="debug")
    args = parser.parse_args()
    if args.debug:
        logging.basicConfig(
            level=logging.DEBUG,
            format="%(asctime)s %(levelname)s\t%(message)s",
            datefmt="%H:%M:%S")
        os.environ["TRACKER_VERBOSITY"] = "3"
        # Gtk hates "-d" switch, so lets drop it
        if "-d" in sys.argv:
            sys.argv.remove("-d")
        if "--debug" in sys.argv:
            sys.argv.remove("--debug")
    else:
        logging.basicConfig(
            level=logging.WARN,
            format="%(asctime)s %(levelname)s\t%(message)s",
            datefmt="%H:%M:%S")

    locale.bindtextdomain("gnome-news", localedir)
    locale.textdomain("gnome-news")
    gettext.bindtextdomain("gnome-news", localedir)
    gettext.textdomain("gnome-news")

    resource = Gio.resource_load(os.path.join(pkgdatadir, "gnome-news.gresource"))
    Gio.Resource._register(resource)

    from gnomenews.application import Application

    app = Application()
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    exit_status = app.run(sys.argv)
    sys.exit(exit_status)
