Skip to content

Instantly share code, notes, and snippets.

@samundra
Created November 25, 2013 06:14
Show Gist options
  • Save samundra/7637068 to your computer and use it in GitHub Desktop.
Save samundra/7637068 to your computer and use it in GitHub Desktop.
Nepalicalendar unity indicator
#!/usr/bin/python
import sys
import gtk
import appindicator
import urllib2
import re
import datetime
from xml.dom.minidom import parseString
from Calculator import *
from preference import *
#from pref_window import *
#from gi.overrides.Gtk import MenuItem
from nepali_calendar import NepaliDateConverter
class LoadShedding:
def __init__(self):
self.ind = appindicator.Indicator("loadshedding-routine", "tray-message", appindicator.CATEGORY_APPLICATION_STATUS)
self.ind.set_status(appindicator.STATUS_ACTIVE)
self.ind.set_attention_icon("indicator-messages-new")
self.menu_setup()
self.ind.set_menu(self.menu)
def menu_setup(self):
self.menu = gtk.Menu()
# List of routines for the current day
self.routines = []
self.quit_item = gtk.ImageMenuItem(gtk.STOCK_QUIT)
self.preferences = gtk.MenuItem("Preferences");
self.routine_item = gtk.MenuItem("Show Routine")
self.sep1 = gtk.SeparatorMenuItem()
self.sep2 = gtk.SeparatorMenuItem()
self.sep3 = gtk.SeparatorMenuItem()
self.quit_item.connect("activate", self.quit)
self.preferences.connect("activate", self.action_preferences)
self.routine_item.connect("activate", self.load_routine)
self.preferences.show()
self.routine_item.show()
self.quit_item.show()
self.sep1.show()
self.sep2.show()
self.sep3.show()
# Append the load-shedding routines as menu items
self.menu.append(self.routine_item)
self.menu.append(self.sep1)
self.add_dy_menu()
self.menu.append(self.sep2)
self.menu.append(self.preferences)
self.menu.append(self.sep3)
self.menu.append(self.quit_item)
''' Adds the dynamic menu generated from xml '''
def add_dy_menu(self):
now = datetime.datetime.now()
curDate = gtk.MenuItem()
cLabel = gtk.Label()
labelDay = now.strftime("%Y-%m-%d")+" ("+ now.strftime("%A")+")"
np_date_converter = NepaliDateConverter()
cLabel.set_label(np_date_converter.contents_func())
curDate.add(cLabel)
curDate.show()
self.menu.append(curDate)
if(self.parse_xml()):
for items in self.routines:
item = gtk.MenuItem()
sLabel = gtk.Label()
sLabel.set_label(items)
item.add(sLabel)
item.show()
self.menu.append(item)
def main(self):
''' Main Entry point for the program '''
try:
gtk.set_interactive(False)
gtk.main()
except KeyboardInterrupt:
pass
def action_preferences(self, widget):
'''
Show the preferences window
'''
base = PreferenceWindow()
base.main()
self.menu_setup()
# self.ind.app_indicator_set_status()
def quit(self, widget):
sys.exit(0)
def load_routine(self, widget):
self.parse_xml()
def get_group_number(self):
configs = json.load(open("config.txt"))
return configs['GROUP']
def parse_xml(self):
MY_GROUP = self.get_group_number() # Group number
#print MY_GROUP
''' Parses the routine xml and keeps the routine in memory '''
from xml.dom import minidom
self.xmldoc = minidom.parse('routine.xml')
itemlist = self.xmldoc.getElementsByTagName('group')
self.routines.append("GROUP : "+str(MY_GROUP))
for s in itemlist :
groupName = int(s.getAttribute('name'))
if(groupName==MY_GROUP):
day = s.getElementsByTagName('day')
for dt in day:
dayName = str(dt.getAttribute('name')).lower()
now = datetime.datetime.now()
currDay = str(now.strftime("%A")).lower()
if(currDay==dayName):
self.routines.append(str(dt.childNodes[1].firstChild.nodeValue))
self.routines.append(str(dt.childNodes[3].firstChild.nodeValue))
return True
return False
def ad2bs(self):
now = datetime.datetime.now()
np_date = NepaliDateConverter()
eng_date = [(int(now.strftime("%Y")),int(now.strftime("%m")),int(now.strftime("%d")))]
nep_date = np_date.ad2bs(eng_date)
return nep_date
if __name__ == "__main__":
indicator = LoadShedding()
indicator.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment