def __init__(self): if dbus.SessionBus().request_name('es.atareao.MyWeatherIndicator') != dbus.bus.REQUEST_NAME_REPLY_PRIMARY_OWNER: print("application already running") exit(0) # self.last_notification = 0 self.actualization_time = 0 self.current_conditions = None self.current_conditions2 = None self.preferences_out = False self.forecast_out = False # self.notification = Notify.Notification.new('','', None) self.indicator = appindicator.Indicator.new('My-Weather-Indicator', 'My-Weather-Indicator', appindicator.IndicatorCategory.APPLICATION_STATUS) self.notification2 = Notify.Notification.new('','', None) self.indicator2 = appindicator.Indicator.new('My-Weather-Indicator2', 'My-Weather-Indicator', appindicator.IndicatorCategory.APPLICATION_STATUS) # self.create_menu() self.create_menu2() # while internet_on() == False: wait(1) print(comun.CONFIG_FILE,os.path.exists(comun.CONFIG_FILE)) if not os.path.exists(comun.CONFIG_FILE): configuration = Configuration() configuration.reset() latitude,longitude = ipaddress.get_current_location() city = geocodeapi.get_inv_direction(latitude,longitude) configuration.set('latitude',latitude) configuration.set('longitude',longitude) if city is not None: configuration.set('location',city['city']) configuration.save() cm=preferences.CM() if cm.run() == Gtk.ResponseType.ACCEPT: cm.save_preferences() else: exit(0) cm.hide() cm.destroy() self.WW1 = None self.WW2 = None self.load_preferences() self.actualization_time = 0 self.seclast = 60 self.work() ''' while(datetime.now().second !=0): wait(0.1) utcnow = datetime.utcnow() if self.WW1 is not None: self.WW1.set_datetime(utcnow) if self.WW2 is not None: self.WW2.set_datetime(utcnow) ''' GLib.timeout_add(500, self.update_widgets) GLib.timeout_add(60000, self.work)
def save_preferences(self): configuration = Configuration() if self.checkbutton11.get_active() and\ (len(self.entry11.get_text()) == 0 or self.latitude is None or self.latitude == 0 or self.longitude is None or self.longitude == 0): self.latitude, self.longitude = ipaddress.get_current_location() ans = geocodeapi.get_inv_direction(self.latitude, self.longitude) if ans is not None and 'locality' in ans.keys(): self.location = ans['locality'] if self.checkbutton21.get_active() and\ (len(self.entry21.get_text()) == 0 or self.latitude2 is None or self.latitude2 == 0 or self.longitude2 is None or self.longitude2 == 0): self.latitude2, self.longitude2 = ipaddress.get_current_location() ans = geocodeapi.get_inv_direction(self.latitude2, self.longitude2) if ans is not None and 'locality' in ans.keys(): self.location2 = ans['locality'] if len(self.entry11.get_text()) > 0: self.location = self.entry11.get_text() if len(self.entry21.get_text()) > 0: self.location2 = self.entry21.get_text() configuration.set('first-time', False) configuration.set('version', comun.VERSION) configuration.set('main-location', self.checkbutton11.get_active()) configuration.set('autolocation', self.checkbutton10.get_active()) configuration.set('location', self.location) configuration.set('latitude', self.latitude) configuration.set('longitude', self.longitude) configuration.set('show-temperature', self.checkbutton12.get_active()) configuration.set('show-notifications', self.checkbutton13.get_active()) configuration.set('widget1', self.checkbutton14.get_active()) configuration.set('onwidget1hide', self.checkbutton15.get_active()) configuration.set('onwidget1top', self.checkbutton16.get_active()) configuration.set('showintaskbar1', self.checkbutton17.get_active()) configuration.set('onalldesktop1', self.checkbutton18.get_active()) configuration.set('skin1', get_selected_value_in_combo(self.comboboxskin1)) # configuration.set('second-location', self.checkbutton21.get_active()) configuration.set('location2', self.location2) configuration.set('latitude2', self.latitude2) configuration.set('longitude2', self.longitude2) configuration.set('show-temperature2', self.checkbutton22.get_active()) configuration.set('show-notifications2', self.checkbutton23.get_active()) configuration.set('widget2', self.checkbutton24.get_active()) configuration.set('onwidget2hide', self.checkbutton25.get_active()) configuration.set('onwidget2top', self.checkbutton26.get_active()) configuration.set('showintaskbar2', self.checkbutton27.get_active()) configuration.set('onalldesktop2', self.checkbutton28.get_active()) configuration.set('skin2', get_selected_value_in_combo(self.comboboxskin2)) # if self.radiobutton251.get_active(): configuration.set('weather-service', 'yahoo') elif self.radiobutton253.get_active(): configuration.set('weather-service', 'openweathermap') # wwokey = self.wwokey.get_text() if len(wwokey) > 0: wwo = WorldWeatherOnlineService(key=wwokey) if wwo.test_connection(): configuration.set('wwo-key', wwokey) if self.radiobutton252.get_active(): configuration.set('weather-service', 'worldweatheronline') else: if self.radiobutton252.get_active(): configuration.set('weather-service', 'openweathermap') wukey = self.wukey.get_text() if len(wukey) > 0: wu = UndergroundWeatherService(key=wukey) if wu.test_connection(): configuration.set('wu-key', wukey) if self.radiobutton254.get_active(): configuration.set('weather-service', 'wunderground') else: if self.radiobutton254.get_active(): configuration.set('weather-service', 'openweathermap') configuration.set( 'temperature', get_selected_value_in_combo(self.combobox3)) configuration.set( 'pressure', get_selected_value_in_combo(self.combobox32)) configuration.set( 'visibility', get_selected_value_in_combo(self.combobox33)) configuration.set( 'wind', get_selected_value_in_combo(self.combobox31)) configuration.set( 'rain', get_selected_value_in_combo(self.combobox34)) configuration.set( 'snow', get_selected_value_in_combo(self.combobox35)) configuration.set( '24h', get_selected_value_in_combo(self.combobox36)) configuration.set( 'refresh', get_selected_value_in_combo(self.combobox45)) configuration.set('icon-light', self.radiobutton31.get_active()) print('Saving...') configuration.save() # filestart = os.path.join( os.getenv("HOME"), ".config/autostart/my-weather-indicator-autostart.desktop") if self.checkbutton1.get_active(): if not os.path.exists(os.path.dirname(filestart)): os.makedirs(os.path.dirname(filestart)) shutil.copyfile(comun.AUTOSTART, filestart) else: if os.path.exists(filestart): os.remove(filestart)
def update_menu(self, index): if not internet_on(): print('--- Not internet connection ---') if self.icon_light: icon = os.path.join( comun.ICONDIR, weatherservice.CONDITIONS['not available']['icon-light']) else: icon = os.path.join( comun.ICONDIR, weatherservice.CONDITIONS['not available']['icon-dark']) self.indicators[index].set_icon(icon) self.indicators[index].set_label('', '') msg = weatherservice.CONDITIONS['not available']['text'] msg += '\n' + _('Not Internet connection') image = os.path.join( comun.IMAGESDIR, weatherservice.CONDITIONS['not available']['image']) self.notifications[index].update( 'My-Weather-Indicator', msg, image) self.notifications[index].show() return print('--- Updating data in location %s ---' % (index)) if self.preferences[index]['autolocation']: lat, lon = ipaddress.get_current_location() location = geocodeapi.get_inv_direction(lat, lon)['city'] if location is None: location = '' print(lat, lon, location) if self.preferences[index]['latitude'] != lat and\ self.preferences[index]['longitude'] != lon: self.preferences[index]['latitude'] = lat self.preferences[index]['longitude'] = lon self.preferences[index]['location'] = location if self.ws == 'worldweatheronline': self.weatherservices[index] =\ worldweatheronlineapi.WorldWeatherOnlineService( longitude=self.preferences[index]['longitude'], latitude=self.preferences[index]['latitude'], units=self.units, key=self.key) self.menus[index]['evolution'].hide() elif self.ws == 'openweathermap': self.weatherservices[index] =\ wopenweathermapapi.OWMWeatherService( longitude=self.preferences[index]['longitude'], latitude=self.preferences[index]['latitude'], units=self.units) self.menus[index]['evolution'].show() elif self.ws == 'wunderground': self.weatherservices[index] =\ wundergroundapi.UndergroundWeatherService( longitude=self.preferences[index]['longitude'], latitude=self.preferences[index]['latitude'], units=self.units, key=self.key) self.menus[index]['evolution'].hide() print('****** Updating weather') weather = self.weatherservices[index].get_weather() print('****** Updated weather') print(self.weathers[index]) if weather is None or (weather['ok'] is False and ( self.weathers[index] is not None and self.weathers[index]['ok'] is True)): return temporal_current_conditions = weather['current_conditions'] if len(temporal_current_conditions) != 0: self.current_conditions[index] = temporal_current_conditions self.weathers[index] = weather ######################################################## if self.preferences[index]['location']: self.menus[index]['location'].set_label( _('Location') + ': ' + self.preferences[index]['location']) self.menus[index]['temperature'].set_label(_('Temperature') + ': \ {0}{1:c}'.format(self.current_conditions[index]['temperature'], 176)) self.menus[index]['humidity'].set_label( _('Humidity') + ': ' + self.current_conditions[index]['humidity']) self.menus[index]['feels_like'].set_label(_('Feels like') + ': \ {0}{1:c}'.format(self.current_conditions[index]['feels_like'], 176)) self.menus[index]['dew_point'].set_label(_('Dew Point') + ': \ {0}{1:c}'.format(self.current_conditions[index]['dew_point'], 176)) self.menus[index]['wind'].set_label( _('Wind') + ': ' + self.current_conditions[index]['wind_condition']) if self.current_conditions[index]['wind_icon']: image = Gtk.Image.new_from_file( os.path.join(comun.IMAGESDIR, self.current_conditions[index]['wind_icon'])) self.menus[index]['wind'].set_image(image) self.menus[index]['condition'].set_label( self.current_conditions[index]['condition_text']) self.menus[index]['condition'].set_image( Gtk.Image.new_from_file(os.path.join( comun.IMAGESDIR, self.current_conditions[index]['condition_image']))) if self.widgets[index] is not None: self.widgets[index].set_location( self.preferences[index]['location']) self.widgets[index].set_weather(weather) self.menus[index]['dawn'].set_label( _('Dawn') + ': ' + self.current_conditions[index]['dawn']) self.menus[index]['sunrise'].set_label( _('Sunrise') + ': ' + self.current_conditions[index]['sunrise']) self.menus[index]['sunset'].set_label( _('Sunset') + ': ' + self.current_conditions[index]['sunset']) self.menus[index]['dusk'].set_label( _('Dusk') + ': ' + self.current_conditions[index]['dusk']) self.menus[index]['moon_phase'].set_label( self.current_conditions[index]['moon_phase']) self.menus[index]['moon_phase'].set_image( Gtk.Image.new_from_file( os.path.join(comun.IMAGESDIR, self.current_conditions[index]['moon_icon']))) # pressure = ( self.current_conditions[index]['pressure'] is not None) visibility = ( self.current_conditions[index]['visibility'] is not None) cloudiness = ( self.current_conditions[index]['cloudiness'] is not None) # solarradiation = ( # self.current_conditions[index]['solarradiation'] is not None) UV = ( self.current_conditions[index]['UV'] is not None) precip_today = ( self.current_conditions[index]['precip_today'] is not None) self.menus[index]['pressure'].set_visible(pressure) self.menus[index]['visibility'].set_visible(visibility) self.menus[index]['cloudiness'].set_visible(cloudiness) self.menus[index]['uv'].set_visible(UV) self.menus[index]['precipitation'].set_visible(precip_today) if pressure: self.menus[index]['pressure'].set_label( ('%s: %s') % (_('Pressure'), self.current_conditions[index]['pressure'])) if visibility: value = self.current_conditions[index]['visibility'] self.menus[index]['visibility'].set_label( ('%s: %s') % (_('Visibility'), value)) if cloudiness: value = self.current_conditions[index]['cloudiness'] self.menus[index]['cloudiness'].set_label( ('%s: %s') % (_('Cloudiness'), value)) if UV: value = self.current_conditions[index]['UV'] self.menus[index]['uv'].set_label( ('%s: %s') % (_('UV'), value)) if precip_today: value = self.current_conditions[index]['precip_today'] self.menus[index]['precipitation'].set_label( ('%s: %s') % (_('Precipitation'), value)) if self.preferences[index]['show-temperature'] is True: value = self.current_conditions[index]['temperature'] self.indicators[index].set_label( '{0}{1:c}'.format(value, 176), '') else: self.indicators[index].set_label('', '') if self.preferences[index]['show'] is True: self.indicators[index].set_status( appindicator.IndicatorStatus.ACTIVE) else: self.indicators[index].set_status( appindicator.IndicatorStatus.PASSIVE) if self.icon_light: icon = os.path.join( comun.ICONDIR, self.current_conditions[index]['condition_icon_light']) else: icon = os.path.join( comun.ICONDIR, self.current_conditions[index]['condition_icon_dark']) self.indicators[index].set_icon(icon) if self.preferences[index]['show-notifications'] is True: msg = _('Conditions in') + ' ' msg += self.preferences[index]['location'] + '\n' msg += _('Temperature') + ': ' +\ self.current_conditions[index]['temperature'] + '\n' msg += _('Humidity') + ': ' + \ self.current_conditions[index]['humidity'] + '\n' msg += _('Wind') + ': ' +\ self.current_conditions[index]['wind_condition'] + '\n' msg += self.current_conditions[index]['condition_text'] image = os.path.join( comun.IMAGESDIR, self.current_conditions[index]['condition_image']) self.notifications[index].update( 'My-Weather-Indicator', msg, image) self.notifications[index].show() while Gtk.events_pending(): Gtk.main_iteration() print('--- End of updating data in location %s ---' % (index)) self.last_update_time = time.time()
def load_preferences(self): if not os.path.exists(comun.CONFIG_FILE): if internet_on(): configuration = Configuration() configuration.reset() latitude, longitude = ipaddress.get_current_location() city = geocodeapi.get_inv_direction( latitude, longitude)['city'] if city is None: city = '' configuration.set('latitude', latitude) configuration.set('longitude', longitude) configuration.set('location', city) configuration.save() cm = preferences.CM() if cm.run() == Gtk.ResponseType.ACCEPT: cm.save_preferences() else: exit(0) cm.hide() cm.destroy() configuration = Configuration() self.first_time = configuration.get('first-time') self.refresh = configuration.get('refresh') self.version = configuration.get('version') # self.preferences[0] = {} self.preferences[0]['show'] = configuration.get('main-location') self.preferences[0]['autolocation'] = configuration.get('autolocation') self.preferences[0]['location'] = configuration.get('location') self.preferences[0]['latitude'] = configuration.get('latitude') self.preferences[0]['longitude'] = configuration.get('longitude') self.preferences[0]['show-temperature'] =\ configuration.get('show-temperature') self.preferences[0]['show-notifications'] =\ configuration.get('show-notifications') self.preferences[0]['widget'] = configuration.get('widget1') # self.preferences[1] = {} self.preferences[1]['show'] = configuration.get('second-location') self.preferences[1]['autolocation'] = False self.preferences[1]['location'] = configuration.get('location2') self.preferences[1]['latitude'] = configuration.get('latitude2') self.preferences[1]['longitude'] = configuration.get('longitude2') self.preferences[1]['show-temperature'] =\ configuration.get('show-temperature2') self.preferences[1]['show-notifications'] =\ configuration.get('show-notifications2') self.preferences[1]['widget'] = configuration.get('widget2') # temperature = configuration.get('temperature') pressure = configuration.get('pressure') visibility = configuration.get('visibility') wind = configuration.get('wind') snow = configuration.get('snow') rain = configuration.get('rain') ampm = not configuration.get('24h') self.units = weatherservice.Units(temperature=temperature, wind=wind, pressure=pressure, visibility=visibility, snow=snow, rain=rain, ampm=ampm) self.ws = configuration.get('weather-service') if self.ws == 'yahoo': self.key = '' for i in range(INDICATORS): if self.preferences[i]['show']: self.weatherservices[i] = wyahooapi.YahooWeatherService( longitude=self.preferences[i]['longitude'], latitude=self.preferences[i]['latitude'], units=self.units) self.menus[i]['evolution'].hide() elif self.ws == 'worldweatheronline': self.key = configuration.get('wwo-key') for i in range(INDICATORS): if self.preferences[i]['show']: self.weatherservices[i] =\ worldweatheronlineapi.WorldWeatherOnlineService( longitude=self.preferences[i]['longitude'], latitude=self.preferences[i]['latitude'], units=self.units, key=self.key) self.menus[i]['evolution'].hide() elif self.ws == 'openweathermap': self.key = '' for i in range(INDICATORS): if self.preferences[i]['show']: self.weatherservices[i] =\ wopenweathermapapi.OWMWeatherService( longitude=self.preferences[i]['longitude'], latitude=self.preferences[i]['latitude'], units=self.units) self.menus[i]['evolution'].show() elif self.ws == 'wunderground': self.key = configuration.get('wu-key') for i in range(INDICATORS): if self.preferences[i]['show']: self.weatherservices[i] =\ wundergroundapi.UndergroundWeatherService( longitude=self.preferences[i]['longitude'], latitude=self.preferences[i]['latitude'], units=self.units, key=self.key) self.menus[i]['evolution'].hide() # self.icon_light = configuration.get('icon-light') # utcnow = datetime.utcnow() for i in range(INDICATORS): if self.preferences[i]['show'] and\ self.preferences[i]['widget']: if self.widgets[i] is not None: self.widgets[i].hide() self.widgets[i].destroy() self.widgets[i] = None self.widgets[i] = WeatherWidget(self.indicators[i], i) self.widgets[i].set_datetime(utcnow) self.widgets[i].set_location(self.preferences[i]['location']) self.widgets[i].connect('pinit', self.on_pinit, i) elif self.widgets[i] is not None: self.widgets[i].hide() self.widgets[i].destroy() self.widgets[i] = None print(1) self.update_weather() self.start_looking_for_internet()
def set_menu(self): print('--- Updating data in location 1 ---') if self.autolocation: lat,lon = ipaddress.get_current_location() self.location = ipaddress.get_address_from_ip() if self.latitude != lat and self.longitude != lon: self.latitude = lat self.longitude = lon if self.ws == 'yahoo': self.weatherservice1 = wyahooapi.YahooWeatherService( longitude = self.longitude, latitude = self.latitude, units = self.units) self.menu_evolution.hide() elif self.ws == 'worldweatheronline': self.weatherservice1 = worldweatheronlineapi.WorldWeatherOnlineService( longitude = self.longitude, latitude = self.latitude, units = self.units, key = self.key) self.menu_evolution.hide() elif self.ws == 'openweathermap': self.weatherservice1 = wopenweathermapapi.OWMWeatherService( longitude = self.longitude, latitude = self.latitude, units = self.units) self.menu_evolution.show() elif self.ws == 'wunderground': self.weatherservice1 = wundergroundapi.UndergroundWeatherService( longitude = self.longitude, latitude = self.latitude, units = self.units, key = self.key) self.menu_evolution.hide() print('****** Updating weather') weather = self.weatherservice1.get_weather() print('****** Updated weather') if weather is None: return temporal_current_conditions = weather['current_conditions'] conditions_changed = False if len(temporal_current_conditions)!=0: self.current_conditions = temporal_current_conditions self.weather1 = weather ######################################################## if self.location: self.menu_location.set_label(_('Location')+': '+self.location) self.menu_temperature.set_label(_('Temperature')+': {0}{1:c}'.format(self.current_conditions['temperature'],176)) print('**** New temperature: {0}{1:c}'.format(self.current_conditions['temperature'],176)) self.menu_humidity.set_label(_('Humidity')+': '+self.current_conditions['humidity']) self.menu_feels_like.set_label(_('Feels like')+': {0}{1:c}'.format(self.current_conditions['feels_like'],176)) self.menu_dew_point.set_label(_('Dew Point')+': {0}{1:c}'.format(self.current_conditions['dew_point'],176)) # self.menu_wind.set_label(_('Wind')+': '+self.current_conditions['wind_condition']) if self.current_conditions['wind_icon']: image = Gtk.Image.new_from_file(os.path.join(comun.IMAGESDIR,self.current_conditions['wind_icon'])) self.menu_wind.set_image(image) self.menu_condition.set_label(self.current_conditions['condition_text']) afile = os.path.join(comun.IMAGESDIR,self.current_conditions['condition_image']) self.menu_condition.set_image(Gtk.Image.new_from_file(os.path.join(comun.IMAGESDIR,self.current_conditions['condition_image']))) filename = os.path.join(comun.WIMAGESDIR,self.current_conditions['condition_image']) if self.WW1 is not None: self.WW1.set_location(self.location) self.WW1.set_weather(weather) self.menu_dawn.set_label(_('Dawn')+': '+self.current_conditions['dawn']) self.menu_sunrise.set_label(_('Sunrise')+': '+self.current_conditions['sunrise']) self.menu_sunset.set_label(_('Sunset')+': '+self.current_conditions['sunset']) self.menu_dusk.set_label(_('Dusk')+': '+self.current_conditions['dusk']) self.menu_moon_phase.set_label(self.current_conditions['moon_phase']) self.menu_moon_phase.set_image(Gtk.Image.new_from_file(os.path.join(comun.IMAGESDIR,self.current_conditions['moon_icon']))) # pressure = (self.current_conditions['pressure'] != None) visibility = (self.current_conditions['visibility'] != None) cloudiness = (self.current_conditions['cloudiness'] != None) solarradiation = (self.current_conditions['solarradiation'] != None) UV = (self.current_conditions['UV'] != None) precip_today = (self.current_conditions['precip_today'] != None) self.menu_pressure.set_visible(pressure) self.menu_visibility.set_visible(visibility) self.menu_cloudiness.set_visible(cloudiness) self.menu_uv.set_visible(UV) self.menu_precipitation.set_visible(precip_today) if pressure: self.menu_pressure.set_label(('%s: %s')%(_('Pressure'),self.current_conditions['pressure'])) if visibility: self.menu_visibility.set_label(('%s: %s')%(_('Visibility'),self.current_conditions['visibility'])) if cloudiness: self.menu_cloudiness.set_label(('%s: %s')%(_('Cloudiness'),self.current_conditions['cloudiness'])) if UV: self.menu_uv.set_label(('%s: %s')%(_('UV'),self.current_conditions['UV'])) if precip_today: self.menu_precipitation.set_label(('%s: %s')%(_('Precipitation'),self.current_conditions['precip_today'])) ######################################################## if self.show_temperature == True: self.indicator.set_label('{0}{1:c}'.format(self.current_conditions['temperature'],176),'') else: self.indicator.set_label('','') if self.main_location == True: self.indicator.set_status(appindicator.IndicatorStatus.ACTIVE) else: self.indicator.set_status(appindicator.IndicatorStatus.PASSIVE) if self.icon_light: self.indicator.set_icon(os.path.join(comun.ICONDIR,self.current_conditions['condition_icon_light'])) else: self.indicator.set_icon(os.path.join(comun.ICONDIR,self.current_conditions['condition_icon_dark'])) ######################################################## if self.show_notifications == True: msg = _('Conditions in')+' '+self.location+'\n' msg += _('Temperature')+': '+self.current_conditions['temperature']+'\n' msg += _('Humidity')+': '+self.current_conditions['humidity']+'\n' msg += _('Wind')+': '+self.current_conditions['wind_condition']+'\n' msg += self.current_conditions['condition_text'] self.notification.update('My-Weather-Indicator',msg,os.path.join(comun.IMAGESDIR,self.current_conditions['condition_image'])) self.notification.show() while Gtk.events_pending(): Gtk.main_iteration() print('--- End of updating data in location 1 ---')
def __init__(self): if dbus.SessionBus().request_name('es.atareao.MyWeatherIndicator') !=\ dbus.bus.REQUEST_NAME_REPLY_PRIMARY_OWNER: print("application already running") exit(0) # self.weather_updater = 0 self.widgets_updater = 0 self.menus = [] self.indicators = [] self.notifications = [] self.widgets = [] self.weatherservices = [] self.weathers = [] self.current_conditions = [] self.preferences = [] # Iniciate variables for i in range(INDICATORS): self.menus.append(None) self.indicators.append(None) self.notifications.append(None) self.widgets.append(None) self.weatherservices.append(None) self.weathers.append(None) self.current_conditions.append(None) self.preferences.append(None) # status = appindicator.IndicatorCategory.APPLICATION_STATUS self.notifications[0] = Notify.Notification.new('', '', None) self.indicators[0] = appindicator.Indicator.new( 'My-Weather-Indicator', 'My-Weather-Indicator', status) self.notifications[1] = Notify.Notification.new('', '', None) self.indicators[1] = appindicator.Indicator.new( 'My-Weather-Indicator2', 'My-Weather-Indicator', status) # for i in range(INDICATORS): self.create_menu(i) # ''' while internet_on() == False: print('Waiting for internet') time_start = time.time() time_end = (time_start + 1) while time_end > time.time(): while Gtk.events_pending(): Gtk.main_iteration() time.sleep(0.3) ''' if not os.path.exists(comun.CONFIG_FILE) and internet_on(): configuration = Configuration() configuration.reset() latitude, longitude = ipaddress.get_current_location() city = geocodeapi.get_inv_direction(latitude, longitude)['city'] if city is None: city = '' configuration.set('latitude', latitude) configuration.set('longitude', longitude) configuration.set('location', city) configuration.save() cm = preferences.CM() if cm.run() == Gtk.ResponseType.ACCEPT: cm.save_preferences() else: exit(0) cm.hide() cm.destroy() for i in range(INDICATORS): self.widgets[i] = None self.load_preferences()
def update_menu(self, index): if not internet_on(): if self.icon_light: icon = os.path.join( comun.ICONDIR, weatherservice.CONDITIONS['not available']['icon-light']) else: icon = os.path.join( comun.ICONDIR, weatherservice.CONDITIONS['not available']['icon-dark']) self.indicators[index].set_icon(icon) self.indicators[index].set_label('', '') msg = weatherservice.CONDITIONS['not available']['text'] msg += '\n'+_('Not Internet connection') image = os.path.join( comun.IMAGESDIR, weatherservice.CONDITIONS['not available']['image']) self.notifications[index].update( 'My-Weather-Indicator', msg, image) self.notifications[index].show() return print('--- Updating data in location %s ---' % (index)) if self.preferences[index]['autolocation']: lat, lon = ipaddress.get_current_location() location = geocodeapi.get_inv_direction(lat, lon)['city'] if location is None: location = '' print(lat, lon, location) if self.preferences[index]['latitude'] != lat and\ self.preferences[index]['longitude'] != lon: self.preferences[index]['latitude'] = lat self.preferences[index]['longitude'] = lon self.preferences[index]['location'] = location if self.ws == 'yahoo': self.weatherservices[index] =\ wyahooapi.YahooWeatherService( longitude=self.preferences[index]['longitude'], latitude=self.preferences[index]['latitude'], units=self.units) self.menus[index]['evolution'].hide() elif self.ws == 'worldweatheronline': self.weatherservices[index] =\ worldweatheronlineapi.WorldWeatherOnlineService( longitude=self.preferences[index]['longitude'], latitude=self.preferences[index]['latitude'], units=self.units, key=self.key) self.menus[index]['evolution'].hide() elif self.ws == 'openweathermap': self.weatherservices[index] =\ wopenweathermapapi.OWMWeatherService( longitude=self.preferences[index]['longitude'], latitude=self.preferences[index]['latitude'], units=self.units) self.menus[index]['evolution'].show() elif self.ws == 'wunderground': self.weatherservices[index] =\ wundergroundapi.UndergroundWeatherService( longitude=self.preferences[index]['longitude'], latitude=self.preferences[index]['latitude'], units=self.units, key=self.key) self.menus[index]['evolution'].hide() print('****** Updating weather') weather = self.weatherservices[index].get_weather() print('****** Updated weather') if weather is None: return temporal_current_conditions = weather['current_conditions'] conditions_changed = False if len(temporal_current_conditions) != 0: self.current_conditions[index] = temporal_current_conditions self.weathers[index] = weather ######################################################## if self.preferences[index]['location']: self.menus[index]['location'].set_label( _('Location') + ': ' + self.preferences[index]['location']) self.menus[index]['temperature'].set_label(_('Temperature') + ': \ {0}{1:c}'.format(self.current_conditions[index]['temperature'], 176)) self.menus[index]['humidity'].set_label( _('Humidity') + ': ' + self.current_conditions[index]['humidity']) self.menus[index]['feels_like'].set_label(_('Feels like')+': \ {0}{1:c}'.format(self.current_conditions[index]['feels_like'], 176)) self.menus[index]['dew_point'].set_label(_('Dew Point') + ': \ {0}{1:c}'.format(self.current_conditions[index]['dew_point'], 176)) self.menus[index]['wind'].set_label( _('Wind') + ':' + self.current_conditions[index]['wind_condition']) if self.current_conditions[index]['wind_icon']: image = Gtk.Image.new_from_file( os.path.join(comun.IMAGESDIR, self.current_conditions[index]['wind_icon'])) self.menus[index]['wind'].set_image(image) self.menus[index]['condition'].set_label( self.current_conditions[index]['condition_text']) afile = os.path.join( comun.IMAGESDIR, self.current_conditions[index]['condition_image']) self.menus[index]['condition'].set_image( Gtk.Image.new_from_file(os.path.join( comun.IMAGESDIR, self.current_conditions[index]['condition_image']))) filename = os.path.join( comun.WIMAGESDIR, self.current_conditions[index]['condition_image']) if self.widgets[index] is not None: self.widgets[index].set_location( self.preferences[index]['location']) self.widgets[index].set_weather(weather) self.menus[index]['dawn'].set_label( _('Dawn')+': '+self.current_conditions[index]['dawn']) self.menus[index]['sunrise'].set_label( _('Sunrise')+': '+self.current_conditions[index]['sunrise']) self.menus[index]['sunset'].set_label( _('Sunset')+': '+self.current_conditions[index]['sunset']) self.menus[index]['dusk'].set_label( _('Dusk')+': '+self.current_conditions[index]['dusk']) self.menus[index]['moon_phase'].set_label( self.current_conditions[index]['moon_phase']) self.menus[index]['moon_phase'].set_image( Gtk.Image.new_from_file( os.path.join(comun.IMAGESDIR, self.current_conditions[index]['moon_icon']))) # pressure = ( self.current_conditions[index]['pressure'] is not None) visibility = ( self.current_conditions[index]['visibility'] is not None) cloudiness = ( self.current_conditions[index]['cloudiness'] is not None) solarradiation = ( self.current_conditions[index]['solarradiation'] is not None) UV = ( self.current_conditions[index]['UV'] is not None) precip_today = ( self.current_conditions[index]['precip_today'] is not None) self.menus[index]['pressure'].set_visible(pressure) self.menus[index]['visibility'].set_visible(visibility) self.menus[index]['cloudiness'].set_visible(cloudiness) self.menus[index]['uv'].set_visible(UV) self.menus[index]['precipitation'].set_visible(precip_today) if pressure: self.menus[index]['pressure'].set_label( ('%s: %s') % (_('Pressure'), self.current_conditions[index]['pressure'])) if visibility: value = self.current_conditions[index]['visibility'] self.menus[index]['visibility'].set_label( ('%s: %s') % (_('Visibility'), value)) if cloudiness: value = self.current_conditions[index]['cloudiness'] self.menus[index]['cloudiness'].set_label( ('%s: %s') % (_('Cloudiness'), value)) if UV: value = self.current_conditions[index]['UV'] self.menus[index]['uv'].set_label( ('%s: %s') % (_('UV'), value)) if precip_today: value = self.current_conditions[index]['precip_today'] self.menus[index]['precipitation'].set_label( ('%s: %s') % (_('Precipitation'), value)) if self.preferences[index]['show-temperature'] is True: value = self.current_conditions[index]['temperature'] self.indicators[index].set_label( '{0}{1:c}'.format(value, 176), '') else: self.indicators[index].set_label('', '') if self.preferences[index]['show'] is True: self.indicators[index].set_status( appindicator.IndicatorStatus.ACTIVE) else: self.indicators[index].set_status( appindicator.IndicatorStatus.PASSIVE) if self.icon_light: icon = os.path.join( comun.ICONDIR, self.current_conditions[index]['condition_icon_light']) else: icon = os.path.join( comun.ICONDIR, self.current_conditions[index]['condition_icon_dark']) self.indicators[index].set_icon(icon) if self.preferences[index]['show-notifications'] is True: msg = _('Conditions in')+' ' msg += self.preferences[index]['location'] + '\n' msg += _('Temperature')+': ' +\ self.current_conditions[index]['temperature'] + '\n' msg += _('Humidity') + ': ' + \ self.current_conditions[index]['humidity'] + '\n' msg += _('Wind') + ': ' +\ self.current_conditions[index]['wind_condition']+'\n' msg += self.current_conditions[index]['condition_text'] image = os.path.join( comun.IMAGESDIR, self.current_conditions[index]['condition_image']) self.notifications[index].update( 'My-Weather-Indicator', msg, image) self.notifications[index].show() while Gtk.events_pending(): Gtk.main_iteration() print('--- End of updating data in location %s ---' % (index))
def __init__(self): if dbus.SessionBus().request_name('es.atareao.MyWeatherIndicator') !=\ dbus.bus.REQUEST_NAME_REPLY_PRIMARY_OWNER: print("application already running") exit(0) # self.weather_updater = 0 self.widgets_updater = 0 self.menus = [] self.indicators = [] self.notifications = [] self.widgets = [] self.weatherservices = [] self.weathers = [] self.current_conditions = [] self.preferences = [] self.last_update_time = 0 # Iniciate variables for i in range(INDICATORS): self.menus.append(None) self.indicators.append(None) self.notifications.append(None) self.widgets.append(None) self.weatherservices.append(None) self.weathers.append(None) self.current_conditions.append(None) self.preferences.append(None) # status = appindicator.IndicatorCategory.APPLICATION_STATUS self.notifications[0] = Notify.Notification.new('', '', None) self.indicators[0] = appindicator.Indicator.new( 'My-Weather-Indicator', 'My-Weather-Indicator', status) self.notifications[1] = Notify.Notification.new('', '', None) self.indicators[1] = appindicator.Indicator.new( 'My-Weather-Indicator2', 'My-Weather-Indicator', status) # for i in range(INDICATORS): self.create_menu(i) # if not os.path.exists(comun.CONFIG_FILE): if internet_on(): configuration = Configuration() configuration.reset() latitude, longitude = ipaddress.get_current_location() city = geocodeapi.get_inv_direction( latitude, longitude)['city'] if city is None: city = '' configuration.set('latitude', latitude) configuration.set('longitude', longitude) configuration.set('location', city) configuration.save() cm = preferences.CM() if cm.run() == Gtk.ResponseType.ACCEPT: cm.save_preferences() else: exit(0) cm.hide() cm.destroy() for i in range(INDICATORS): self.widgets[i] = None self.load_preferences()
def load_preferences(self): if not os.path.exists(comun.CONFIG_FILE): if internet_on(): configuration = Configuration() configuration.reset() latitude, longitude = ipaddress.get_current_location() city = geocodeapi.get_inv_direction( latitude, longitude)['city'] if city is None: city = '' configuration.set('latitude', latitude) configuration.set('longitude', longitude) configuration.set('location', city) configuration.save() cm = preferences.CM() if cm.run() == Gtk.ResponseType.ACCEPT: cm.save_preferences() else: exit(0) cm.hide() cm.destroy() configuration = Configuration() self.first_time = configuration.get('first-time') self.refresh = configuration.get('refresh') self.version = configuration.get('version') # self.preferences[0] = {} self.preferences[0]['show'] = configuration.get('main-location') self.preferences[0]['autolocation'] = configuration.get('autolocation') self.preferences[0]['location'] = configuration.get('location') self.preferences[0]['latitude'] = configuration.get('latitude') self.preferences[0]['longitude'] = configuration.get('longitude') self.preferences[0]['show-temperature'] =\ configuration.get('show-temperature') self.preferences[0]['show-notifications'] =\ configuration.get('show-notifications') self.preferences[0]['widget'] = configuration.get('widget1') # self.preferences[1] = {} self.preferences[1]['show'] = configuration.get('second-location') self.preferences[1]['autolocation'] = False self.preferences[1]['location'] = configuration.get('location2') self.preferences[1]['latitude'] = configuration.get('latitude2') self.preferences[1]['longitude'] = configuration.get('longitude2') self.preferences[1]['show-temperature'] =\ configuration.get('show-temperature2') self.preferences[1]['show-notifications'] =\ configuration.get('show-notifications2') self.preferences[1]['widget'] = configuration.get('widget2') # temperature = configuration.get('temperature') pressure = configuration.get('pressure') visibility = configuration.get('visibility') wind = configuration.get('wind') snow = configuration.get('snow') rain = configuration.get('rain') ampm = not configuration.get('24h') self.units = weatherservice.Units(temperature=temperature, wind=wind, pressure=pressure, visibility=visibility, snow=snow, rain=rain, ampm=ampm) self.ws = configuration.get('weather-service') if self.ws == 'yahoo': self.key = '' for i in range(INDICATORS): if self.preferences[i]['show']: self.weatherservices[i] = wyahooapi.YahooWeatherService( longitude=self.preferences[i]['longitude'], latitude=self.preferences[i]['latitude'], units=self.units) self.menus[i]['evolution'].hide() elif self.ws == 'worldweatheronline': self.key = configuration.get('wwo-key') for i in range(INDICATORS): if self.preferences[i]['show']: self.weatherservices[i] =\ worldweatheronlineapi.WorldWeatherOnlineService( longitude=self.preferences[i]['longitude'], latitude=self.preferences[i]['latitude'], units=self.units, key=self.key) self.menus[i]['evolution'].hide() elif self.ws == 'openweathermap': self.key = '' for i in range(INDICATORS): if self.preferences[i]['show']: self.weatherservices[i] =\ wopenweathermapapi.OWMWeatherService( longitude=self.preferences[i]['longitude'], latitude=self.preferences[i]['latitude'], units=self.units) self.menus[i]['evolution'].show() elif self.ws == 'wunderground': self.key = configuration.get('wu-key') for i in range(INDICATORS): if self.preferences[i]['show']: self.weatherservices[i] =\ wundergroundapi.UndergroundWeatherService( longitude=self.preferences[i]['longitude'], latitude=self.preferences[i]['latitude'], units=self.units, key=self.key) self.menus[i]['evolution'].hide() # self.icon_light = configuration.get('icon-light') # utcnow = datetime.utcnow() for i in range(INDICATORS): if self.preferences[i]['show'] and\ self.preferences[i]['widget']: if self.widgets[i] is not None: self.widgets[i].hide() self.widgets[i].destroy() self.widgets[i] = None self.widgets[i] = WeatherWidget( self.indicators[i], i) self.widgets[i].set_datetime(utcnow) self.widgets[i].set_location(self.preferences[i]['location']) self.widgets[i].connect('pinit', self.on_pinit, i) elif self.widgets[i] is not None: self.widgets[i].hide() self.widgets[i].destroy() self.widgets[i] = None print(1) self.update_weather() self.start_looking_for_internet()