Created
November 25, 2013 06:14
-
-
Save samundra/7637068 to your computer and use it in GitHub Desktop.
Nepalicalendar unity indicator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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