ReaderFooter: Don't duplicate a 12h clock time format option (#6973)

* ReaderFooter:
	* Honor the global twelve_hour_clock setting, instead of
	  duplicating a local one.
	  (Re #6969)

* os.date is a thin wrapper around strftime, so we might be able to get
away with some not-quite-standard extensions...

These are *definitely* supported on Linux, but are *NOT* the glibc
extension (that'd be e.g., %-I), so, hopefully, they're somewhat
portable...

They are also supported on BSD/macOS.
They are *not* supported by the MS UCRT. That means MinGW-w64, too.
This *appears* to be supported on current Bionic (it might even support
said glibc format altering extensions).

* And of course, Windows is terrible, so, make this terribly ugly to not
break it there...

* Turns out BSD also supports the dash trim format extension, so, leave
the trimming to the libc, and handle the special-casing in a way that
doesn't create stupid locals.

* Random unrelated cleanup ^^.

(https://gitter.im/koreader/koreader?at=5fd24be492aa1c4ef5d11f31)

* Update the testsuite

(Because the default used to be 24h clock).

Changed the default to 24h clock ;p.

* Explain why we don't try to fix it in Lua
reviewable/pr6985/r1
NiLuJe 3 years ago committed by GitHub
parent 3142f98e20
commit 32bf53cfdf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -177,7 +177,7 @@ local footerTextGeneratorMap = {
time = function(footer)
local symbol_type = footer.settings.item_prefix or "icons"
local prefix = symbol_prefix[symbol_type].time
local clock = util.secondsToHour(os.time(), footer.settings.time_format == "12")
local clock = util.secondsToHour(os.time(), G_reader_settings:isTrue("twelve_hour_clock"))
if not prefix then
return clock
else
@ -1287,43 +1287,6 @@ function ReaderFooter:addToMainMenu(menu_items)
},
},
},
{
text = _("Time format"),
sub_item_table = {
{
text_func = function()
local footer = {}
footer.settings = {}
footer.settings.time_format = "24"
footer.settings.item_prefix = self.settings.item_prefix or "icons"
return T(_("24-hour (%1)"),footerTextGeneratorMap.time(footer))
end,
checked_func = function()
return self.settings.time_format == "24" or self.settings.time_format == nil
end,
callback = function()
self.settings.time_format = "24"
self:refreshFooter(true)
end,
},
{
text_func = function()
local footer = {}
footer.settings = {}
footer.settings.time_format = "12"
footer.settings.item_prefix = self.settings.item_prefix or "icons"
return T(_("12-hour (%1)"),footerTextGeneratorMap.time(footer))
end,
checked_func = function()
return self.settings.time_format == "12"
end,
callback = function()
self.settings.time_format = "12"
self:refreshFooter(true)
end,
},
}
},
{
text = _("Duration format"),
sub_item_table = {

@ -37,7 +37,7 @@ local function buildEntry(input_time, input_file)
-- we fallback to it no sidecar file)
last_read_ts = DocSettings:getLastSaveTime(file_path) or input_time
end
return util.secondsToDate(last_read_ts, G_reader_settings:nilOrTrue("twelve_hour_clock"))
return util.secondsToDate(last_read_ts, G_reader_settings:isTrue("twelve_hour_clock"))
end,
callback = function()
local ReaderUI = require("apps/reader/readerui")

@ -77,10 +77,10 @@ common_settings.time = {
text = _("12-hour clock"),
keep_menu_open = true,
checked_func = function()
return G_reader_settings:nilOrTrue("twelve_hour_clock")
return G_reader_settings:isTrue("twelve_hour_clock")
end,
callback = function()
G_reader_settings:flipNilOrTrue("twelve_hour_clock")
G_reader_settings:flipNilOrFalse("twelve_hour_clock")
end,
}
}

@ -640,7 +640,7 @@ function TouchMenu:updateItems()
self.page_info_left_chev:enableDisable(self.page > 1)
self.page_info_right_chev:enableDisable(self.page < self.page_num)
local time_info_txt = util.secondsToHour(os.time(), G_reader_settings:nilOrTrue("twelve_hour_clock"))
local time_info_txt = util.secondsToHour(os.time(), G_reader_settings:isTrue("twelve_hour_clock"))
local powerd = Device:getPowerDevice()
local batt_lvl = powerd:getCapacity()
local batt_symbol

@ -1,19 +0,0 @@
./apps/reader/modules/readerfooter.lua: UIManager.update_regions_func = function()
./apps/reader/modules/readerhighlight.lua: UIManager.update_regions_func = function()
./ui/widget/button.lua: UIManager.update_regions_func = function()
./ui/widget/iconbutton.lua: UIManager.update_regions_func = function()
./ui/widget/dictquicklookup.lua: UIManager.update_regions_func = function()
./ui/widget/scrolltextwidget.lua: UIManager.update_regions_func = function()
./ui/widget/touchmenu.lua: UIManager.update_regions_func = function()
./ui/widget/touchmenu.lua: UIManager.update_regions_func = function()
./ui/widget/virtualkeyboard.lua: UIManager.update_regions_func = function()
./ui/widget/virtualkeyboard.lua: UIManager.update_regions_func = function()
./ui/widget/virtualkeyboard.lua: UIManager.update_regions_func = nil
./ui/widget/toggleswitch.lua: UIManager.update_regions_func = function()
./ui/widget/configdialog.lua: UIManager.update_regions_func = function()
./ui/widget/configdialog.lua: UIManager.update_regions_func = function()
./ui/uimanager.lua: update_regions_func = nil,
./ui/uimanager.lua: if self.update_regions_func then
./ui/uimanager.lua: local update_regions = self.update_regions_func()
./ui/uimanager.lua: for _, update_region in ipairs(update_regions) do
./ui/uimanager.lua: self.update_regions_func = nil

@ -224,21 +224,40 @@ end
---- @int seconds number of seconds
---- @bool twelve_hour_clock
---- @treturn string hour string
function util.secondsToHour(seconds, twelve_hour_clock)
local time
if twelve_hour_clock then
if os.date("%p", seconds) == "AM" then
-- @translators This is the time in the morning in the 12-hour clock (%I is the hour, %M the minute).
time = os.date(_("%I:%M AM"), seconds)
--- @note: The MS CRT doesn't support either %l & %k, or the - format modifier (as they're not technically C99 or POSIX).
--- They are otherwise supported on Linux, BSD & Bionic, so, just special-case Windows...
--- We *could* arguably feed the os.date output to gsub("^0(%d)(.*)$", "%1%2"), but, while unlikely,
--- it's conceivable that a translator would put something other that the hour at the front of the string ;).
if jit.os == "Windows" then
function util.secondsToHour(seconds, twelve_hour_clock)
if twelve_hour_clock then
if os.date("%p", seconds) == "AM" then
-- @translators This is the time in the morning using a 12-hour clock (%I is the hour, %M the minute).
return os.date(_("%I:%M AM"), seconds)
else
-- @translators This is the time in the afternoon using a 12-hour clock (%I is the hour, %M the minute).
return os.date(_("%I:%M PM"), seconds)
end
else
-- @translators This is the time in the afternoon in the 12-hour clock (%I is the hour, %M the minute).
time = os.date(_("%I:%M PM"), seconds)
-- @translators This is the time using a 24-hour clock (%H is the hour, %M the minute).
return os.date(_("%H:%M"), seconds)
end
end
else
function util.secondsToHour(seconds, twelve_hour_clock)
if twelve_hour_clock then
if os.date("%p", seconds) == "AM" then
-- @translators This is the time in the morning using a 12-hour clock (%-I is the hour, %M the minute).
return os.date(_("%-I:%M AM"), seconds)
else
-- @translators This is the time in the afternoon using a 12-hour clock (%-I is the hour, %M the minute).
return os.date(_("%-I:%M PM"), seconds)
end
else
-- @translators This is the time using a 24-hour clock (%-H is the hour, %M the minute).
return os.date(_("%-H:%M"), seconds)
end
else
-- @translators This is the time in the 24-hour clock (%H is the hour, %M the minute).
time = os.date(_("%H:%M"), seconds)
end
return time
end
--- Converts timestamp to a date string

Loading…
Cancel
Save