#!/usr/bin/python2.5
# - coding: utf-8 -*-

# Copyright (c) 2007-2008 Renato Chencarek. All rights reserved.
#
# Author: Renato Chencarek <renato.chencarek@gmail.com>
#
# Modified for 'feedhandler' by Thomas Perl <thpinfo.com> 2009-08-25
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


import sys
import os
import subprocess

import dbus
import dbus.service
import dbus.glib

import gtk
import gobject
import hildon

main_loop = gobject.MainLoop()

class FeedHandler(dbus.service.Object):
    DBUS_SERVICE_NAME = "org.maemo.garage.feedhandler"
    DBUS_OBJ_PATH     = "/org/maemo/garage/feedhandler"
    DBUS_IFACE        = "org.maemo.garage.feedhandler"

    def __init__(self):
        self.session_bus = dbus.SessionBus()
        self.bn = dbus.service.BusName(self.DBUS_SERVICE_NAME,
                                       bus=self.session_bus)

        dbus.service.Object.__init__(self, self.bn, self.DBUS_OBJ_PATH)

    @dbus.service.method(DBUS_IFACE)
    def mime_open(self, url):
	global main_loop

        selector = hildon.hildon_touch_selector_new_text()

        # TODO: Read supported applications from .desktop files
        selector.append_text('RSS feed reader')
        selector.append_text('gPodder Podcast Client')

        w = hildon.PickerDialog(gtk.Window())
        w.set_title('Subscribe to this feed using')
        w.set_selector(selector)

        if w.run() == gtk.RESPONSE_OK:
            selected = selector.get_current_text()
        else:
            selected = None

        w.destroy()

        if selected == 'RSS feed reader':
            service_name = "com.nokia.osso_rss_feed_reader_refresh"
            obj_path = "/com/nokia/osso_rss_feed_reader_refresh"
            session_bus = dbus.SessionBus()
            try:
                obj = session_bus.get_object(service_name, obj_path)
                iface = dbus.Interface(obj, service_name)
                iface.mime_open(url)
            except:
                # TODO: Show information to the user that it didn't work
                pass
        elif selected == 'gPodder Podcast Client':
            command = ['gpodder', '--maemo', '--subscribe', url]
            subprocess.Popen(command)
            # TODO: Check if gPodder really accepted this

        main_loop.quit()

if __name__ == "__main__":
    gtk.gdk.threads_init()

    f = FeedHandler()

    if len(sys.argv) == 2:
        gobject.timeout_add(100, f.mime_open, sys.argv[1])

    main_loop.run()


