# coding: koi8-r #==================================================== # Cycle - calendar for women # Distributed under GNU Public License # Author: Oleg S. Gints (altgo@users.sourceforge.net) # Home page: http://cycle.sourceforge.net #=================================================== import warnings # deprecated since release 2.3 warnings.filterwarnings("ignore", category=DeprecationWarning, message='.*rotor module', module=__name__) import wx import os, os.path , cPickle, md5 import cal_year try: import rotor except: import p_rotor as rotor def Save_Cycle(name='cycle', passwd='123', file='cycle'): """ Save the contents of our document to disk. """ objSave=[] m=md5.new() m.update(passwd) rt=rotor.newrotor(m.digest()) objSave.append(['period', cal_year.cycle.period]) objSave.append(['by_average', cal_year.cycle.by_average]) objSave.append(['disp', cal_year.cycle.disp]) objSave.append(['first_week_day', cal_year.cycle.first_week_day]) objSave.append(['note', cal_year.cycle.note]) for d in cal_year.cycle.begin: objSave.append(['begin',[d.GetDay(), d.GetMonth(), d.GetYear()]]) for d in cal_year.cycle.last: objSave.append(['last',[d.GetDay(), d.GetMonth(), d.GetYear()]]) for d in cal_year.cycle.tablet: objSave.append(['tablet',[d.GetDay(), d.GetMonth(), d.GetYear()]]) for d in cal_year.cycle.colour_set.keys(): objSave.append(['colour', [d, cal_year.cycle.colour_set[d].Get()] ]) tmp=rt.encrypt( 'Cycle'+cPickle.dumps(objSave) ) tmp="UserName="+cPickle.dumps(name)+"==="+tmp p, f_name=get_f_name(file) if not os.path.exists(p): os.mkdir(p,0700) f=open(f_name,"wb") f.write(tmp) f.close() # print "All data saved to disk" def Load_Cycle(name='cycle', passwd='123', file='cycle'): p, f_name=get_f_name(file) if os.path.isfile(f_name): m=md5.new() m.update(passwd) rt=rotor.newrotor(m.digest()) f=open(f_name,"rb") tmp=f.read() if tmp[:len("UserName=")] == "UserName=": #new format n=tmp.find("===")+len("===") tmp=tmp[n:] #remove username tmp=rt.decrypt(tmp) f.close() if tmp[0:5]!='Cycle': # print 'Password is invalid' return False else: tmp=tmp[5:] #remove control word 'Cycle' objLoad=cPickle.loads(tmp) set_color_default() for type, d in objLoad: # print "Load: ", type, d if type=='period': cal_year.cycle.period=int(d) elif type=='by_average': cal_year.cycle.by_average=int(d) elif type=='disp': cal_year.cycle.disp=int(d) elif type=='first_week_day': cal_year.cycle.first_week_day=int(d) elif type=='begin': dt=wx.DateTimeFromDMY(d[0], d[1], d[2]) cal_year.cycle.begin.append(dt) elif type=='last': dt=wx.DateTimeFromDMY(d[0], d[1], d[2]) cal_year.cycle.last.append(dt) elif type=='tablet': dt=wx.DateTimeFromDMY(d[0], d[1], d[2]) cal_year.cycle.tablet.append(dt) elif type=='note': cal_year.cycle.note=d.copy() elif type=='colour': # d=['item', (r,g,b)] c = wx.Colour(d[1][0], d[1][1], d[1][2]) if cal_year.cycle.colour_set.has_key(d[0]): cal_year.cycle.colour_set[d[0]] = c else: cal_yaar.cycle.colour_set.update({d[0]:c}) # print "Load OK" return True #------------------------------------------------------- def get_f_name(name=""): if '__WXMSW__' in wx.PlatformInfo: p=os.path.join(os.getcwd(),"data") else: p=os.path.expanduser("~/.cycle") f_name=os.path.join(p,name) return p, f_name #------------------------------------------------------- def set_color_default(): cal_year.cycle.colour_set={'begin':wx.NamedColour('RED'), 'prog begin':wx.NamedColour('PINK'), 'conception':wx.NamedColour('MAGENTA'), 'safe sex':wx.NamedColour('WHEAT'), 'fertile':wx.NamedColour('GREEN YELLOW'), 'ovule':wx.NamedColour('SPRING GREEN'), '1-st tablet':wx.NamedColour('GOLD'), 'pause':wx.NamedColour('LIGHT BLUE'), 'next 1-st tablet':wx.NamedColour('PINK')}