[pkg-fso-commits] [SCM] FSO frameworkd Debian packaging branch, master, updated. milestone4-368-g700ab82
Jan Luebbe
jluebbe at debian.org
Mon Feb 2 18:51:41 UTC 2009
The following commit has been merged in the master branch:
commit c6c9001f33a332b92e31ce81a169fa2d9efa5a01
Author: Jan Luebbe <jluebbe at debian.org>
Date: Fri Dec 19 00:18:51 2008 +0100
otimed: use network database to install a time zone file
diff --git a/framework/subsystems/ogsmd/gsm/const.py b/framework/subsystems/ogsmd/gsm/const.py
index a940f23..c1273a8 100644
--- a/framework/subsystems/ogsmd/gsm/const.py
+++ b/framework/subsystems/ogsmd/gsm/const.py
@@ -1120,9 +1120,9 @@ def parseNetworks( filename ):
line = line.decode( "UTF-8" ).rstrip()
if not line: # empty line, flush and reset
if network:
- networks[( network["MCC"], network["MNC"] )] = network
- del network["MCC"]
- del network["MNC"]
+ networks[( network["mcc"], network["mnc"] )] = network
+ del network["mcc"]
+ del network["mnc"]
common_header = []
common = {}
network_header = []
@@ -1132,7 +1132,7 @@ def parseNetworks( filename ):
continue
if line[0] == "#": # header
data = line[1:].split("\t")
- data = [x.strip() for x in data]
+ data = [x.strip().lower() for x in data]
if data[0]:
common_header = data
elif data[1]:
@@ -1146,13 +1146,13 @@ def parseNetworks( filename ):
common = dict( zip( common_header, data ) )
elif data[1]: # new network, flush old
if network:
- networks[( network["MCC"], network["MNC"] )] = network
- del network["MCC"]
- del network["MNC"]
+ networks[( network["mcc"], network["mnc"] )] = network
+ del network["mcc"]
+ del network["mnc"]
if not common: raise "Missing common info near line %i" % linenumber
if not network_header: raise "Missing network header near line %i" % linenumber
network = dict( zip( network_header, data[1:] ) )
- if not (network["MCC"]+network["MNC"]).isdigit(): raise "Invaild MCC or MNC near line %i" % linenumber
+ if not (network["mcc"]+network["mnc"]).isdigit(): raise "Invaild MCC or MNC near line %i" % linenumber
network.update( common )
elif data[2]:
if not common: raise "Missing common info near line %i" % linenumber
diff --git a/framework/subsystems/otimed/otimed.py b/framework/subsystems/otimed/otimed.py
index 847e721..665aab3 100644
--- a/framework/subsystems/otimed/otimed.py
+++ b/framework/subsystems/otimed/otimed.py
@@ -16,6 +16,7 @@ __version__ = "0.2.0"
from datetime import datetime, timedelta
from math import sqrt
+import shutil
import socket
import struct
import time
@@ -36,6 +37,15 @@ def getOutput(cmd):
def toSeconds( delta ):
return delta.days*24*60*60+delta.seconds+delta.microseconds*0.000001
+def drop_dbus_result( *args ):
+ if args:
+ logger.warning( "unhandled dbus result: %s", args )
+
+def log_dbus_error( desc ):
+ def dbus_error( e, desc = desc ):
+ logger.error( "%s (%s %s: %s)" % ( desc, e.__class__.__name__, e.get_dbus_name(), e.get_dbus_message() ) )
+ return dbus_error
+
#============================================================================#
class TimeSource( object ):
#============================================================================#
@@ -111,6 +121,62 @@ class NTPTimeSource( TimeSource ):
logger.warning( "NTP: no timestamp received" )
#============================================================================#
+class ZoneSource( object ):
+#============================================================================#
+ def __init__( self, bus ):
+ self.zone = None
+ self.mccmnc = None
+ self.isocode = None
+ self.bus = bus
+ self.bus.add_signal_receiver(
+ self._handleNetworkStatusChanged,
+ "Status",
+ "org.freesmartphone.GSM.Network",
+ None,
+ None
+ )
+ proxy = bus.get_object( "org.freesmartphone.ogsmd", "/org/freesmartphone/GSM/Server" )
+ self.gsmdata = dbus.Interface( proxy, "org.freesmartphone.GSM.Data" )
+
+ def _handleNetworkStatusChanged( self, status ):
+ if "code" in status:
+ code = str( status["code"] )
+ if self.mccmnc == code:
+ return
+ self.mccmnc = code
+ mcc = code[:3]
+ mnc = code[3:]
+ logger.debug( "GSM: MCC=%s MNC=%s", mcc, mnc )
+ self.gsmdata.GetNetworkInfo(
+ mcc, mnc,
+ reply_handler=self._handleNetworkInfoReply,
+ error_handler=log_dbus_error( "error while calling org.freesmartphone.GSM.Data.GetNetworkInfo" )
+ )
+ else:
+ self.zone = None
+ logger.debug( "GSM: no network code" )
+
+ def _handleNetworkInfoReply( self, info ):
+ if "iso" in info:
+ if self.isocode == info["iso"]:
+ return
+ self.isocode = info["iso"]
+ logger.debug( "GSM: ISO-Code %s", info["iso"] )
+ for line in open( "/usr/share/zoneinfo/zone.tab", "r" ):
+ data = line.rstrip().split( "\t" )
+ if self.isocode == data[0]:
+ self.zone = data[2]
+ break
+ logger.info( "GSM: Zone %s", self.zone )
+ try:
+ shutil.copyfile( "/usr/share/zoneinfo/"+self.zone, "/etc/localtime" )
+ except:
+ logger.warning( "failed to install time zone file to /etc/localtime" )
+ else:
+ self.zone = None
+ logger.debug( "GSM: no ISO-Code for this network" )
+
+#============================================================================#
class Time( dbus.service.Object ):
#============================================================================#
def __init__( self, bus ):
@@ -119,9 +185,11 @@ class Time( dbus.service.Object ):
self.interface = "org.freesmartphone.Time"
self.bus = bus
- self.sources = []
- self.sources.append( GPSTimeSource( self.bus ) )
- self.sources.append( NTPTimeSource( self.bus ) )
+ self.timesources = []
+ self.timesources.append( GPSTimeSource( self.bus ) )
+ self.timesources.append( NTPTimeSource( self.bus ) )
+
+ self.zonesource = ZoneSource( self.bus )
self.interval = 90
self.updateTimeout = gobject.timeout_add_seconds( self.interval, self._handleUpdateTimeout )
@@ -129,7 +197,7 @@ class Time( dbus.service.Object ):
def _handleUpdateTimeout( self ):
logger.debug( "checking time sources" )
offsets = []
- for source in self.sources:
+ for source in self.timesources:
if not source.offset is None:
offsets.append( toSeconds( source.offset ) )
@@ -145,7 +213,7 @@ class Time( dbus.service.Object ):
if sd < 15.0 < mean:
logger.info( "adjusting clock by %f seconds" % mean )
d = timedelta( seconds=mean )
- for source in self.sources:
+ for source in self.timesources:
if not source.offset is None:
source.offset = source.offset - d
t = datetime.utcnow() + d
--
FSO frameworkd Debian packaging
More information about the pkg-fso-commits
mailing list