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