from roxiadebug import *
from setting import setting
import config
## Index
INDEX,DATE,DAY,MONTH,YEAR, HOLIDAY, HOUR, MINUTER, INTERVAL,CNT, RINGPATH, RINGNAME,MESS = range(13)
record = 'index', 'date','day','month','year', 'holiday', 'hour', 'minuter', 'interval', 'cnt', 'ringpath', 'ringname','mess'
class NamedListMetaClass(type):
def __init__(cls, cls_name, bases, attrs):
# cls -> cls_nameÀ» °®´Â class
members = attrs['members']
member_list = members.split()
setattr(cls, '__slots__', ())
def property_factory(index):
def property_get(self):
return self[index]
def property_set(self, v):
self[index] = v
return property_get, property_set
for i, member in enumerate(member_list):
setattr(cls, member, property(*property_factory(i)))
super(NamedListMetaClass, cls).__init__(cls_name, bases, attrs)
def __call__(self, *args):
# self: class
instance = super(NamedListMetaClass, self).__call__(args)
return instance
class AlarmItem(list):
__metaclass__ = NamedListMetaClass
members = 'index date day month year holiday hour minuter interval cnt ringpath ringname mess'
def __init__(self, args):
if not args:
import time,ntptime
year,month,day,hour, min, sec, date = time.localtime(setting.current_time)[:7]
lst = ['0',_('Disable'),str(day),str(month),str(year),'1',str(hour),str(min),'1','1','','','']
list.__init__(self, lst)
elif len(args) == 1:
list.__init__(self, *args)
else:
list.__init__(self, args)
def is_valid(self):
return self[0] or self[1] or self[2] or self[3] or self[4]
class AlarmDB:
def __init__(self):
self.db = []
try:
self.load_db()
except:
pass
def new_item(self, item=None):
if item: AlarmItem(item)
return AlarmItem()
def is_empty(self):
return len(self.db) == 0
def is_empty_for_call(self):
for item in self.db:
if item[NUMBER] or item[MOBILE]:
return False
return True
def has_name(self, name):
name = name.lower()
for item in self.db:
if item[1].lower() == name:
return True
return False
def has_number(self, number):
for item in self.db:
if number in (item[INDEX]):
return True
return False
def load_db(self):
for line in file('alarm.txt'):
try:
item = line[:-1].split('\t')
self.db.append(AlarmItem(item))
except:
pass
self.sort()
def find(self, number):
if not number:
return -1
for i, item in enumerate(self.db):
if number in (item[NUMBER], item[MOBILE], item[FAX]):
return i
return -1
def get_item(self, i):
return self.db[i]
def find_by_char(self, name, index_tables):
name = name.lower()
for i, index in enumerate(index_tables):
item = self.db[index]
if name <= item[0].lower():
if item[0].lower().startswith(name):
return i
return -1
return -1
def find_by_name_near(self, name, index_tables=None):
name = name.lower()
if index_tables == None:
for i, item in enumerate(self.db):
if name <= item[0].lower():
return i
else:
for i, index in enumerate(index_tables):
item = self.db[index]
if name <= item[0].lower():
return i
return -1
def get_item_by_number(self, number):
index = self.find(number)
if index < 0:
return None
return self.get_item(index)
def find_by_item(self, item):
return self.db.index(item)
def count(self):
return len(self.db)
def insert_item(self, item):
self.db.append(item)
self.sort()
self.save()
def sort(self):
def sort_func(x, y):
xname = x[0] or x[1] or x[2] or x[3]
yname = y[0] or y[1] or y[2] or y[3]
xname = xname.lower()
yname = yname.lower()
return cmp(xname, yname)
self.db.sort(sort_func)
def remove(self, index):
#assert 0 <= index < len(self.db)
item = self.db[index]
del self.db[index]
self.save()
def get_sym_name(self, index):
item = self.db[index]
return item[0] or item[1] or item[2] or item[3]
def get_names(self):
list = []
for item in self.db:
s = ''
#s = '%s ' % item[1]
#s = s[0:10] + '[%02d:%02d - %d %s - %s] ' % (eval(item[6]),eval(item[7]),eval(item[9]),_('Times'),_('Wakeup'))
ap_str = ''
if config.datetime_24hour:
s = '%s %02d:%02d, %d%s %s, %d%s %s, %s' % (ap_str, eval(item[6]),eval(item[7]),eval(item[8]),_('Minutes'),_('Interval'),eval(item[9]),_('Times'),_('Count'),item[1])
list.append(s)
else:
hour = eval(item[6])
if hour >= 12:
ap_str = _('PM')
else:
ap_str = _('AM')
if hour == 0 or hour == 12:
hour = 12
else:
hour = hour % 12
s = '%s %02d:%02d, %d%s %s, %d%s %s, %s' % (ap_str, hour,eval(item[7]),eval(item[8]),_('Minutes'),_('Interval'),eval(item[9]),_('Times'),_('Count'),item[1])
list.append(s)
return list
def save(self):
fp = open('alarm.txt','w')
for item in self.db:
fp.write('\t'.join(item) + '\n')
def reset(self):
self.db = []
self.save()
def __del__(self):
pass
#print 'Alarmdb destroy'
alarmdb = AlarmDB()
if __name__ == '__main__':
alarmdb.save()