From b10a8dd128818d21a37d46b09738a39c3c2863be Mon Sep 17 00:00:00 2001 From: Amit Chaudhary Date: Mon, 3 Jun 2024 07:47:02 +0530 Subject: [PATCH] add option to use 24h time format --- data/io.github.amit9838.mousam.gschema.xml | 11 ++++++----- src/config.py | 10 +++++++++- src/frontendForecast.py | 4 ++++ src/frontendHourlyDetails.py | 8 +++++--- src/frontendUiDrawDayNight.py | 13 ++++++++++--- src/windowPreferences.py | 17 +++++++++++++++++ 6 files changed, 51 insertions(+), 12 deletions(-) diff --git a/data/io.github.amit9838.mousam.gschema.xml b/data/io.github.amit9838.mousam.gschema.xml index 6908760..eda1fac 100644 --- a/data/io.github.amit9838.mousam.gschema.xml +++ b/data/io.github.amit9838.mousam.gschema.xml @@ -17,15 +17,13 @@ Use Gradient Background Apply gradient background on main window corresponding to weather condition - false Use Inch for precipitation - - + false - Launch the app in maximized mode. + Use 24h hour clock 1160 @@ -35,7 +33,10 @@ 818 Main window height - + + false + Launch the app in maximized mode. + "metric" Mesaurement sysytem to use - metric,imperial diff --git a/src/config.py b/src/config.py index 119cdf2..8a44c15 100644 --- a/src/config.py +++ b/src/config.py @@ -17,6 +17,7 @@ def init_settings(self): "selected_city": "selected-city", "is_using_dynamic_bg": "use-gradient-bg", "is_using_inch_for_prec": "use-inch-for-prec", + "is_using_24h_clock": "use-24h-clock", "window_width": "window-width", "window_height": "window-height", "window_maximized": "window-maximized", @@ -55,6 +56,14 @@ def is_using_inch_for_prec(self): def is_using_inch_for_prec(self, value): self.settings.set_boolean(self._settings_map["is_using_inch_for_prec"], value) + @property + def is_using_24h_clock(self): + return self.settings.get_boolean(self._settings_map["is_using_24h_clock"]) + + @is_using_24h_clock.setter + def is_using_24h_clock(self, value): + self.settings.set_boolean(self._settings_map["is_using_24h_clock"], value) + @property def window_width(self): return self.settings.get_int(self._settings_map["window_width"]) @@ -71,7 +80,6 @@ def window_height(self): def window_height(self, value): self.settings.set_int(self._settings_map["window_height"], value) - @property def window_maximized(self): return self.settings.get_boolean(self._settings_map["window_maximized"]) diff --git a/src/frontendForecast.py b/src/frontendForecast.py index 82726f4..444122a 100644 --- a/src/frontendForecast.py +++ b/src/frontendForecast.py @@ -112,6 +112,10 @@ def page_stacks(self, page_name): ts = hourly_data.time.get('data')[idx+idx_offset] date_time = datetime.fromtimestamp(ts) dt_label = date_time.strftime("%I:%M %p") + + if settings.is_using_24h_clock: + dt_label = date_time.strftime("%H:%M") + temp_max_text = hourly_data.temperature_2m.get("data")[idx+idx_offset] temp_min_text = 0 weather_code = hourly_data.weathercode.get("data")[idx+idx_offset] diff --git a/src/frontendHourlyDetails.py b/src/frontendHourlyDetails.py index c4efd7e..6daf652 100644 --- a/src/frontendHourlyDetails.py +++ b/src/frontendHourlyDetails.py @@ -190,9 +190,11 @@ def create_stack_page(self, page_name): label_timestamp = Gtk.Label(label="") label_timestamp.set_css_classes(["text-6", "bold-2", "light-6"]) - tm = datetime.datetime.fromtimestamp(hourly_data.time.get("data")[i]) - tm = tm.strftime("%I:%M %p") - label_timestamp.set_text(tm) + time_stamp = datetime.datetime.fromtimestamp(hourly_data.time.get("data")[i]) + time_label = time_stamp.strftime("%I:%M %p") + if settings.is_using_24h_clock: + time_label = time_stamp.strftime("%H:%M") + label_timestamp.set_text(time_label) if i == nearest_current_time_idx: label_timestamp.set_text(_("Now")) diff --git a/src/frontendUiDrawDayNight.py b/src/frontendUiDrawDayNight.py index 99badc9..88cc6b3 100644 --- a/src/frontendUiDrawDayNight.py +++ b/src/frontendUiDrawDayNight.py @@ -7,6 +7,7 @@ import cairo from datetime import datetime from .utils import get_cords, get_time_difference +from .config import settings class DrawDayNight: @@ -79,12 +80,18 @@ def on_draw(self, widget, cr, width, height, data): t_data = get_time_difference(*get_cords()) target_time = t_data.get("target_time") - formatted_date_time = datetime.fromtimestamp(target_time).strftime("%I:%M %p") - text = formatted_date_time - # Calculate the position for text placement text_x = center_x - 30 text_y = center_y + 15 + + date_time = datetime.fromtimestamp(target_time) + formatted_date_time= date_time.strftime("%I:%M %p") + + if settings.is_using_24h_clock: + formatted_date_time= date_time.strftime("%H:%M") + text_x += 7 + + text = formatted_date_time # Move the text cursor to the calculated position context.move_to(text_x, text_y) diff --git a/src/windowPreferences.py b/src/windowPreferences.py index 506c42c..e0874b6 100644 --- a/src/windowPreferences.py +++ b/src/windowPreferences.py @@ -43,6 +43,20 @@ def __init__(self, application, **kwargs): gradient_row.add_suffix(self.g_switch_box) self.appearance_grp.add(gradient_row) + # Use 24h Clock Format + use_24h_clock_row = Adw.ActionRow.new() + use_24h_clock_row.set_activatable(True) + use_24h_clock_row.set_title(_("24 Hour Time Format")) + use_24h_clock_row.set_subtitle(_("Use 24 hour Time format (Refresh required)")) + + self.g_switch_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL,valign=Gtk.Align.CENTER) + self.launch_max_switch = Gtk.Switch() + self.launch_max_switch.set_active(settings.is_using_24h_clock) + self.launch_max_switch.connect("state-set",self._on_click_use_24h_clock) + self.g_switch_box.append(self.launch_max_switch) + use_24h_clock_row.add_suffix(self.g_switch_box) + self.appearance_grp.add(use_24h_clock_row) + # Units and measurement self.measurement_group = Adw.PreferencesGroup.new() self.measurement_group.set_margin_top(20) @@ -92,6 +106,9 @@ def _use_gradient_bg(self,widget,state): def _on_click_launch_maximixed(self,widget,state): settings.should_launch_maximized = state + def _on_click_use_24h_clock(self,widget,state): + settings.is_using_24h_clock = state + def _change_unit(self,widget,value): if settings.unit != value: settings.unit = value