From eec83ff3454440044f684512f9b6a181696bf38e Mon Sep 17 00:00:00 2001 From: Evgeny Date: Wed, 25 Aug 2021 10:51:14 +0300 Subject: [PATCH] remove show_grid function #2 --- main/uptimerobot-widget.lua | 17 +- ru/calendar-ru-widget.lua | 395 +++++++++++++++++++++--------------- samples/apps-sample.lua | 17 +- 3 files changed, 258 insertions(+), 171 deletions(-) diff --git a/main/uptimerobot-widget.lua b/main/uptimerobot-widget.lua index 3fb81eb..6ea850f 100644 --- a/main/uptimerobot-widget.lua +++ b/main/uptimerobot-widget.lua @@ -48,7 +48,7 @@ function on_network_result(result) strings_tab[k] = v.friendly_name..": "..format_status(v.status) end - ui:show_grid(strings_tab, 2) + ui:show_table(table_to_tables(strings_tab, 2)) end -- utils @@ -59,3 +59,18 @@ function format_status(status) return ""..statuses[status].."" end + +function table_to_tables(tab, num) + local out_tab = {} + local row = {} + + for k,v in ipairs(tab) do + table.insert(row, v) + if k % num == 0 then + table.insert(out_tab, row) + row = {} + end + end + + return out_tab +end diff --git a/ru/calendar-ru-widget.lua b/ru/calendar-ru-widget.lua index a65c174..f21d5af 100644 --- a/ru/calendar-ru-widget.lua +++ b/ru/calendar-ru-widget.lua @@ -1,171 +1,228 @@ --- name = "Календарь" --- description = "Производственный календарь" --- data_source = "https://isdayoff.ru/" --- type = "widget" --- lang = "ru" --- author = "Andrey Gavrilov" --- version = "1.0" +-- name = "Календарь" +-- description = "Производственный календарь с праздниками" +-- data_source = "" +-- type = "widget" +-- author = "Andrey Gavrilov" +-- version = "1.0" +-- language = "ru" + +local color = require "md_colors" +local json = require "json" + +local days = {} +local tab = {} +local line = "" +local text = "" + +local pr_text_color = ui:get_primary_text_color() +local sec_text_color = ui:get_secondary_text_color() +local year = os.date("*t").year +local month = os.date("*t").month +local day = os.date("*t").day + +function on_alarm() + is_days_off(year,month) +end + +function is_days_off(y,m) + http:get("https://isdayoff.ru/today?pre=1&covid=1", "today") + http:get("https://isdayoff.ru/api/getdata?year="..y.."&month="..m.."&pre=1&delimeter=-&covid=1", "month") +end + +function on_network_result_month(result) + days = result:split("-") + tab = get_cal(year,month) + ui:show_table(table_to_tables(tab,8),0, true, line) + ui:set_title(ui:get_default_title().." ("..string.format("%02d.%04d",month,year)..")") +end + +function on_network_result_today(result) + line = "Сегодня " + if result == "0" then + line = line.."рабочий" + elseif result == "4" then + line = line.."рабочий" + elseif result == "1" then + line = line.."нерабочий" + elseif result == "2" then + line = line.."предпраздничный" + end + line = line.." день" +end + +function on_network_result_day(result) + local t = json.decode(result) + if #t.saints ~= 0 then + text = text.."

Святые" + end + for i = 1, #t.saints do + text = text.."
• "..t.saints[i].title + end + if #t.ikons ~= 0 then + text = text.."

Иконы" + end + for i = 1, #t.ikons, 1 do + text = text.."
• "..t.ikons[i].title + end + if #t.holidays ~= 0 then + text = text.."

Православные праздники" + end + for i = 1, #t.holidays, 1 do + text = text.."
• "..t.holidays[i].title + end + ui:show_dialog(string.format("%02d.%02d.%04d", day, month, year).."\n"..os.date("*t", get_time(year,month,day)).yday.." день года", text) +end + +function on_click(i) + text = "События" + if i == 1 then + local time = get_time(begin_month(year,month))-24*60*60 + local y,m,d = get_day(time) + year = y + month = m + elseif i == 8 then + local time = get_time(end_month(year,month))+24*60*60 + local y,m,d = get_day(time) + year = y + month = m + elseif i > 1 and i < 8 then + ui:show_edit_dialog("Введите месяц и год", "Формат - 12.2020. Пустое значение - текущий месяц", string.format("%02d.%04d", month, year)) + elseif (i-1)%8 ~= 0 and tab[i] ~= " " then + day = tonumber(tab[i]:match(">(%d+)<")) + http:get("https://azbyka.ru/days/api/day/"..string.format("%04d-%02d-%02d", year, month, day)..".json", "day") + return + else + return + end + is_days_off(year,month) +end + +function on_dialog_action(data) + if data == -1 then + return + elseif data == "" then + local date = os.date("*t") + if year == date.year and month == date.month then + return + end + year = date.year + month = date.month + is_days_off(year,month) + return + elseif not check_date(data) then + return + else + local m,y = data:match("(%d+)%.(%d+)") + if year == tonumber(y) and month == tonumber(m) then + return + end + end + local m,y = data:match("(%d+)%.(%d+)") + year = tonumber(y) + month = tonumber(m) + is_days_off(year,month) +end + +function get_cal(y,m) + local from = get_time(begin_month(y,m)) + local tab = { + "ᐊ #", + "Пн", + "Вт", + "Ср", + "Чт", + "Пт", + "Сб", + "Вс ᐅ" + } + table.insert(tab,""..weeknumber(get_day(from)).."") + for i =1, weekday(get_day(from))-1,1 do + table.insert(tab," ") + end + local to = get_time(end_month(y,m)) + local k=0 + for time = from,to,24*60*60 do + k=k+1 + local y,m,d = get_day(time) + table.insert(tab, format_day(d,k)) + if weekday(get_day(time))==7 and time ~= to then + table.insert(tab, ""..weeknumber(get_day(time+24*60*60)).."") + end + end + for i = weekday(get_day(to))+1,7,1 do + table.insert(tab," ") + end + return tab +end + +function weeknumber(y,m,d) + local yday = os.date("*t",os.time{day=d,month=m,year=y}).yday + local wday = weekday(y,m,1) + return math.floor((yday+10-wday)/7) +end + +function weekday(y,m,d) + local wday = os.date("*t",os.time{day=d,month=m,year=y}).wday-1 + if wday == 0 then wday = 7 end + return wday +end + +function begin_month(y,m) + local time = os.time{day=1,month=m,year=y} + local date = os.date("*t",time) + return date.year,date.month,date.day +end + +function end_month(y,m) + local time = os.time{day=1,month=m,year=y}+31*24*60*60 + local date = os.date("*t",time) + local time = os.time{day=1,month=date.month,year=date.year}-24*60*60 + local date = os.date("*t",time) + return date.year,date.month,date.day +end + +function get_day(t) + local date = os.date("*t",t) + return date.year,date.month,date.day +end + +function get_time(y,m,d) + return os.time{day=d,month=m,year=y} +end + +function format_day(d,k) + local dd = d + if days[k] == "2" then + dd = ""..dd.."" + elseif days[k] == "1" then + dd = ""..dd.."" + elseif days[k] == "4" then + dd = ""..dd.."" + else + dd = ""..dd.."" + end + if year == os.date("*t").year and month == os.date("*t").month and d == os.date("*t").day then + dd = ""..dd.."" + end + return dd + end + +function check_date(date) + local m, Y = date:match("(%d+).(%d+)") + local time = os.time{day=1, month=m or 0, year=Y or 0} + local str = string.format("%02d.%04d", m or 0, Y or 0) + return str == os.date("%m.%Y", time) +end -local color = require "md_colors" - -local days = {} -local tab = {} - -local pr_text_color = ui:get_primary_text_color() -local sec_text_color = ui:get_secondary_text_color() -local year = os.date("*t").year -local month = os.date("*t").month - -function on_alarm() - is_days_off(year,month) -end - -function is_days_off(y,m) - http:get("https://isdayoff.ru/api/getdata?year="..y.."&month="..m.."&pre=1&delimeter=-&covid=1") -end - -function on_network_result(result) - days = result:split("-") - tab = get_cal(year,month) - ui:show_grid(tab, 8, true) - ui:set_title(ui:get_default_title().." ("..string.format("%02d.%04d",month,year)..")") -end - -function on_click(i) - if i == 1 then - local time = get_time(begin_month(year,month))-24*60*60 - local y,m,d = get_day(time) - year = y - month = m - elseif i == 8 then - local time = get_time(end_month(year,month))+24*60*60 - local y,m,d = get_day(time) - year = y - month = m - elseif i > 1 and i < 8 then - ui:show_edit_dialog("Введите месяц и год", "Формат - 12.2020. Пустое значение - текущий месяц", string.format("%02d.%04d", month, year)) - elseif (i-1)%8 ~= 0 and tab[i] ~= " " then - ui:show_toast(os.date("*t", get_time(year,month,tab[i]:match(">(%d+)<"))).yday) - return - else - return - end - is_days_off(year,month) -end - -function on_dialog_action(data) - if data == -1 then - return - elseif data == "" then - local date = os.date("*t") - if year == date.year and month == date.month then - return - end - year = date.year - month = date.month - is_days_off(year,month) - return - elseif not check_date(data) then - return - else - local m,y = data:match("(%d+)%.(%d+)") - if year == tonumber(y) and month == tonumber(m) then - return - end - end - local m,y = data:match("(%d+)%.(%d+)") - year = tonumber(y) - month = tonumber(m) - is_days_off(year,month) -end - -function get_cal(y,m) - local from = get_time(begin_month(y,m)) - local tab = { - "< #", - "Пн", - "Вт", - "Ср", - "Чт", - "Пт", - "Сб", - "Вс >" - } - table.insert(tab,""..weeknumber(get_day(from)).."") - for i =1, weekday(get_day(from))-1,1 do - table.insert(tab," ") - end - local to = get_time(end_month(y,m)) - local k=0 - for time = from,to,24*60*60 do - k=k+1 - local y,m,d = get_day(time) - table.insert(tab, format_day(d,k)) - if weekday(get_day(time))==7 and time ~= to then - table.insert(tab, ""..weeknumber(get_day(time+24*60*60)).."") - end - end - for i = weekday(get_day(to))+1,7,1 do - table.insert(tab," ") - end - return tab -end - -function weeknumber(y,m,d) - local yday = os.date("*t",os.time{day=d,month=m,year=y}).yday - local wday = weekday(y,m,1) - return math.floor((yday+10-wday)/7) -end - -function weekday(y,m,d) - local wday = os.date("*t",os.time{day=d,month=m,year=y}).wday-1 - if wday == 0 then wday = 7 end - return wday -end - -function begin_month(y,m) - local time = os.time{day=1,month=m,year=y} - local date = os.date("*t",time) - return date.year,date.month,date.day -end - -function end_month(y,m) - local time = os.time{day=1,month=m,year=y}+31*24*60*60 - local date = os.date("*t",time) - local time = os.time{day=1,month=date.month,year=date.year}-24*60*60 - local date = os.date("*t",time) - return date.year,date.month,date.day -end - -function get_day(t) - local date = os.date("*t",t) - return date.year,date.month,date.day -end - -function get_time(y,m,d) - return os.time{day=d,month=m,year=y} -end - -function format_day(d,k) - local day = d - if days[k] == "2" then - day = ""..day.."" - elseif days[k] == "1" then - day = ""..day.."" - elseif days[k] == "4" then - day = ""..day.."" - else - day = ""..day.."" - end - if year == os.date("*t").year and month == os.date("*t").month and d == os.date("*t").day then - day = ""..day.."" - end - return day - end - -function check_date(date) - local m, Y = date:match("(%d+).(%d+)") - local time = os.time{day=1, month=m or 0, year=Y or 0} - local str = string.format("%02d.%04d", m or 0, Y or 0) - return str == os.date("%m.%Y", time) +function table_to_tables(tab, num) + local out_tab = {} + local row = {} + for k,v in ipairs(tab) do + table.insert(row, v) + if k % num == 0 then + table.insert(out_tab, row) + row = {} + end + end + return out_tab end diff --git a/samples/apps-sample.lua b/samples/apps-sample.lua index b3023f6..cf1ce12 100644 --- a/samples/apps-sample.lua +++ b/samples/apps-sample.lua @@ -14,7 +14,7 @@ function on_resume() apps_names[k] = get_formatted_name(v) end - ui:show_grid(slice(apps_names, 1, 9), 3) + ui:show_table(table_to_tables(slice(apps_names, 1, 9), 3)) end function on_click(idx) @@ -26,3 +26,18 @@ end function get_formatted_name(pkg) return ""..apps:get_name(pkg).."" end + +function table_to_tables(tab, num) + local out_tab = {} + local row = {} + + for k,v in ipairs(tab) do + table.insert(row, v) + if k % num == 0 then + table.insert(out_tab, row) + row = {} + end + end + + return out_tab +end