#!/usr/bin/python3
import os
import sys
import subprocess
import dbus
import re
import atexit
import logging
import signal

NOTIFICATION_PIPE = '/tmp/notification.pipe'
PID_FILE = '/tmp/notify.pid'

def signal_handler_term():
    logging.warning("SIGTERM received, will stop")
    sys.exit(1)

def signal_handler_int():
    logging.warning("SIGINT received, will stop")
    sys.exit(1)
    
def translate(text):
    env = os.environ['LANG']
    if re.match('zh_CN',env):
        if text == 'install start':
            return '安装开始'
        elif text == 'install finish':
            return '安装结束'
    else:
        return text

def notify(iface,msg):
    msg = msg.rstrip()
    title = ' '
    content = ' '
    if msg =='install start':
        title = translate('install start')
        content = translate('install start')    
    elif msg == 'install finish':
        title = translate('install finish')
        content = translate('install start')
    #print(title,content)
    iface.Notify(' ',1,' ',title,content,[],{},3)

def main():
    bus = dbus.SessionBus()
    proxy_object = bus.get_object('org.freedesktop.Notifications','/org/freedesktop/Notifications')
    iface = dbus.Interface(proxy_object,dbus_interface='org.freedesktop.Notifications')
    f=open(NOTIFICATION_PIPE,'r')
    while True:
        msg = f.read()
        if len(msg)>0:
            bus = dbus.SessionBus()
            proxy_object = bus.get_object('org.freedesktop.Notifications','/org/freedesktop/Notifications')
            iface = dbus.Interface(proxy_object,dbus_interface='org.freedesktop.Notifications')
            notify(iface,msg)
            f.flush()


if __name__ == "__main__":
    signal.signal(signal.SIGTERM, signal_handler_term)
    signal.signal(signal.SIGINT,signal_handler_int)
    if os.path.exists(PID_FILE):
        logging.info("notify already exists, exiting...")
        sys.exit(0)
    else:
        # clean up pid file on exit
        with open(PID_FILE, "w+") as fp:
            fp.write("%s" % os.getpid())
        atexit.register(os.remove, PID_FILE)
    
    main()