#!/usr/bin/env python3

from gi.repository import Gtk, GLib, Gdk
import json
import dbus
import cgi

i3dstatus = dbus.Interface(dbus.SessionBus().get_object(
                           'com.dubstepdish.i3dstatus',
                           '/com/dubstepdish/i3dstatus'),
                           'com.dubstepdish.i3dstatus')

truncate_length = 20
clipboard_format = '<span size="small" font="FontAwesome">\uf0ea</span> %text'

config = json.loads(i3dstatus.get_config('clipboard'))

if 'format' in config:
    clipboard_format = config['format']
if 'truncate-length' in config:
    truncate_length = config['truncate-length']

clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)


def format_clipboard_text(cb_text):
    cb_text = cgi.escape(cb_text.replace('\n', ''))

    if len(cb_text) > truncate_length:
        cb_text = cb_text[0:truncate_length].rstrip() + '…'

    cb_text = clipboard_format.replace('%text', cb_text)

    return cb_text


def on_owner_change(clipboard, event):
    cb_text = clipboard.wait_for_text()

    if not cb_text:
        # no clipboard, so clear the block
        i3dstatus.show_block({"name": "clipboard", "full_text": ""})
        return

    i3dstatus.show_block({"name": "clipboard",
                          "full_text": format_clipboard_text(cb_text),
                          "markup": "pango"
                          })

cb_text = clipboard.wait_for_text()

i3dstatus.show_block({
                "name": "clipboard",
                "full_text": format_clipboard_text(cb_text),
                "markup": "pango"
            })

clipboard.connect('owner-change', on_owner_change)

GLib.MainLoop().run()
