PyXR

c:\projects\bitpim\src \ prototypes_samsung.py



0001 ### BITPIM
0002 ###
0003 ### Copyright (C) 2006 Joe Pham <djpham@bitpim.org>
0004 ###
0005 ### This program is free software; you can redistribute it and/or modify
0006 ### it under the terms of the BitPim license as detailed in the LICENSE file.
0007 ###
0008 ### $Id: prototypes_samsung.py 4527 2007-12-26 03:09:36Z djpham $
0009 
0010 """The various types used in protocol descriptions specific to Samsung phones"""
0011 
0012 import calendar
0013 import datetime
0014 import time
0015 
0016 import prototypes
0017 
0018 class DateTime(prototypes.UINTlsb):
0019     _daylight=None
0020     def __init__(self, *args, **kwargs):
0021         if DateTime._daylight is None:
0022             DateTime._daylight=time.localtime()[-1]
0023         super(DateTime, self).__init__(*args, **kwargs)
0024         kwargs.update({ 'sizeinbytes': 4 })
0025         if self._ismostderived(DateTime):
0026             self._update(args, kwargs)
0027 
0028     def _update(self, args, kwargs):
0029         for k in 'constant', 'default', 'value':
0030             if kwargs.has_key(k):
0031                 kwargs[k]=self._converttoint(kwargs[k])
0032         if len(args)==0:
0033             pass
0034         elif len(args)==1:
0035             args=(self._converttoint(args[0]),)
0036         else:
0037             raise TypeError("expected (year,month,day,hour,minute) as arg")
0038 
0039         super(DateTime, self)._update(args, kwargs)
0040         self._complainaboutunusedargs(DateTime, kwargs)
0041         assert self._sizeinbytes==4
0042 
0043     _time_delta=315514800.0
0044     def _converttoint(self, date):
0045         assert len(date)==5
0046         _timetuple=datetime.datetime(*date).timetuple()[:-1]+(DateTime._daylight,)
0047         return int(calendar.timegm(_timetuple)-self._time_delta)
0048 
0049     def getvalue(self):
0050         """Unpack 32 bit value into date/time
0051         @rtype: tuple
0052         @return: (year, month, day, hour, minute)
0053         """
0054         val=super(DateTime, self).getvalue()
0055         return time.gmtime(val+self._time_delta)[:5]
0056     @classmethod
0057     def now(_):
0058         return time.localtime()[:5]
0059 
0060 class DateTime1(DateTime):
0061     # similar to DateTime, except getvalue includes seconds
0062     def __init__(self, *args, **kwargs):
0063         super(DateTime1, self).__init__(*args, **kwargs)
0064         kwargs.update({ 'sizeinbytes': 4 })
0065         if self._ismostderived(DateTime1):
0066             self._update(args, kwargs)
0067 
0068     def getvalue(self):
0069         """Unpack 32 bit value into date/time
0070         @rtype: tuple
0071         @return: (year, month, day, hour, minute, second)
0072         """
0073         val=prototypes.UINTlsb.getvalue(self)
0074         return time.gmtime(val+self._time_delta)[:6]
0075 
0076 class DateTime2(DateTime1):
0077     # similar to DateTime, with different time delta
0078     _time_delta=315532800.0
0079     def __init__(self, *args, **kwargs):
0080         super(DateTime2, self).__init__(*args, **kwargs)
0081         kwargs.update({ 'sizeinbytes': 4 })
0082         if self._ismostderived(DateTime2):
0083             self._update(args, kwargs)
0084 
0085 
0086 class ExpiringTime(prototypes.UINTlsb):
0087     # Implement a weird expiring time used by Samsung calendar events
0088     def __init__(self, *args, **kwargs):
0089         super(ExpiringTime, self).__init__(*args, **kwargs)
0090         dict={ 'sizeinbytes': 4 }
0091         dict.update(kwargs)
0092         if self._ismostderived(ExpiringTime):
0093             self._update(args, dict)
0094 
0095     def _update(self, args, kwargs):
0096         for k in 'constant', 'default', 'value':
0097             if kwargs.has_key(k):
0098                 kwargs[k]=self._converttoint(kwargs[k])
0099         if len(args)==0:
0100             pass
0101         elif len(args)==1:
0102             args=(self._converttoint(args[0]),)
0103         else:
0104             raise TypeError("expected (hour, minute, duration) as arg")
0105 
0106         super(ExpiringTime, self)._update(args, kwargs)
0107         self._complainaboutunusedargs(ExpiringTime, kwargs)
0108         assert self._sizeinbytes==4
0109 
0110     _delta=3786843600L
0111     def _converttoint(self, v):
0112         assert len(v)==2
0113         hour, min=v
0114         return hour*3600+min*60+self._delta
0115 

Generated by PyXR 0.9.4