timezone-provider: Turn into preloadable
This commit is contained in:
@@ -7,9 +7,10 @@ from .desktop_provider import desktop_provider
|
||||
from .disk_provider import disk_provider
|
||||
from .internet_provider import internet_provider
|
||||
from .language_provider import language_provider
|
||||
from .timezone_provider import timezone_provider
|
||||
|
||||
providers = [language_provider, internet_provider,
|
||||
disk_provider, desktop_provider, choices_provider]
|
||||
providers = [language_provider, internet_provider, disk_provider,
|
||||
desktop_provider, timezone_provider, choices_provider]
|
||||
|
||||
|
||||
class PreloadManager:
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from time import time
|
||||
|
||||
from gi.repository import GnomeDesktop, GObject, GWeather
|
||||
|
||||
from .config import config
|
||||
from .preloadable import Preloadable
|
||||
|
||||
|
||||
class Timezone(GObject.Object):
|
||||
__gtype_name__ = __qualname__
|
||||
@@ -40,18 +44,30 @@ def _recurse_location(location, timezone_map):
|
||||
print(f'Developer hint: Unknown timezone {id} {child.get_name()}')
|
||||
|
||||
|
||||
### public methods ###
|
||||
class TimezoneProvider(Preloadable):
|
||||
def __init__(self):
|
||||
Preloadable.__init__(self, self._get_timezones)
|
||||
|
||||
def get_current_timezone():
|
||||
timezone = GnomeDesktop.WallClock().get_timezone()
|
||||
return timezone.get_identifier()
|
||||
def _get_timezones(self):
|
||||
current_timezone = GnomeDesktop.WallClock().get_timezone()
|
||||
config.set('timezone', current_timezone.get_identifier())
|
||||
|
||||
timezone_map = dict()
|
||||
for timezone in GWeather.Location().get_world().get_timezones():
|
||||
id = timezone.get_identifier()
|
||||
timezone_map[id] = Timezone(id)
|
||||
|
||||
for child in _get_location_children(GWeather.Location().get_world()):
|
||||
if not child.has_timezone(): # skips UTC and Etc/GMT+12
|
||||
_recurse_location(child, timezone_map)
|
||||
|
||||
self.timezones = sorted(timezone_map.values(), key=lambda t: t.name)
|
||||
|
||||
### public methods ###
|
||||
|
||||
def get_timezones(self):
|
||||
self.assert_preloaded()
|
||||
return self.timezones
|
||||
|
||||
|
||||
def get_timezones():
|
||||
timezones = {timezone.get_identifier(): Timezone(timezone.get_identifier())
|
||||
for timezone in GWeather.Location().get_world().get_timezones()}
|
||||
for child in _get_location_children(GWeather.Location().get_world()):
|
||||
if not child.has_timezone(): # skips UTC and Etc/GMT+12
|
||||
_recurse_location(child, timezones)
|
||||
|
||||
return sorted(timezones.values(), key=lambda t: t.name)
|
||||
timezone_provider = TimezoneProvider()
|
||||
|
||||
@@ -6,7 +6,7 @@ from gi.repository import Gtk
|
||||
from .format_provider import get_formats
|
||||
from .global_state import global_state
|
||||
from .system_calls import set_system_formats, set_system_timezone
|
||||
from .timezone_provider import get_timezones
|
||||
from .timezone_provider import timezone_provider
|
||||
from .widgets import ProgressRow
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ class FilterPage(Gtk.Box):
|
||||
self.list_model.splice(0, 0, get_formats())
|
||||
case FilterType.timezone:
|
||||
self.filter = self._timezone_filter
|
||||
self.list_model.splice(0, 0, get_timezones())
|
||||
self.list_model.splice(0, 0, timezone_provider.get_timezones())
|
||||
|
||||
self.search_entry.connect("search-changed", self._filter)
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ from gi.repository import Gtk
|
||||
from .config import config
|
||||
from .format_provider import initialize_formats
|
||||
from .global_state import global_state
|
||||
from .timezone_provider import get_current_timezone
|
||||
|
||||
|
||||
@Gtk.Template(resource_path='/com/github/p3732/os-installer/ui/pages/locale.ui')
|
||||
@@ -21,10 +20,6 @@ class LocalePage(Gtk.Box):
|
||||
if not config.has('formats'):
|
||||
initialize_formats()
|
||||
|
||||
if not config.has('timezone'):
|
||||
timezone = get_current_timezone()
|
||||
config.set('timezone', timezone)
|
||||
|
||||
config.subscribe('formats', self._update_formats)
|
||||
config.subscribe('timezone', self._update_timezone)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user