From eb118bf32a2ad2042918f3f28486223c7af887a2 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sun, 28 Apr 2024 21:07:43 +0400 Subject: [PATCH] Move useless scripts to samples --- community/bdpn-search.lua | 42 +- community/sudoku-widget.lua | 2 +- {community => samples}/currencies-widget.lua | 0 {community => samples}/currency-search.lua | 0 {community => samples}/currency-widget-ru.lua | 390 +++++++++--------- .../tasker-widget-control.lua | 0 6 files changed, 218 insertions(+), 216 deletions(-) rename {community => samples}/currencies-widget.lua (100%) rename {community => samples}/currency-search.lua (100%) rename {community => samples}/currency-widget-ru.lua (97%) rename {community => samples}/tasker-widget-control.lua (100%) diff --git a/community/bdpn-search.lua b/community/bdpn-search.lua index 1ce7ce1..7286413 100644 --- a/community/bdpn-search.lua +++ b/community/bdpn-search.lua @@ -4,38 +4,40 @@ -- type = "search" -- lang = "ru" -- author = "Andrey Gavrilov" --- version = "1.0" - -local num = "" +-- version = "1.1" function on_search(input) - num = input:match("^n (.+)") + local num = input:match("^(+?7?%d%d%d%d%d%d%d%d%d%d+)$") if not num then return end - search:show({"Оператор "..num}) + show_operator(num) end -function on_click() +function show_operator(num) + local json = require "json" local uri = "http://rosreestr.subnets.ru/?get=num&format=json&num=" .. num:gsub("%D", "") - http:get(uri) - return false -end - -function on_network_result(result) - local json = require "json" - local t = json.decode(result) - if not t.error then - if not t["0"].country then - if not t["0"].moved2operator then - search:show({t["0"].operator, t["0"].region}) + local tab = {} + local result = shttp:get(uri) + if not result.error then + local t = json.decode(result.body) + if not t.error then + if not t["0"].country then + if not t["0"].moved2operator then + table.insert(tab, t["0"].operator) + else + table.insert(tab, t["0"].moved2operator) + end + table.insert(tab, t["0"].region) else - search:show({t["0"].moved2operator, t["0"].region}) + table.insert(tab, t["0"].country) + table.insert(tab, t["0"].description) end else - search:show({t["0"].country, t["0"].description}) + table.insert(tab, t.error) end else - search:show({t.error}) + table.insert(tab, result.error) end + search:show_lines({table.concat(tab, ", ")}, {aio:colors().button}) end diff --git a/community/sudoku-widget.lua b/community/sudoku-widget.lua index 96bb643..a8ded2a 100644 --- a/community/sudoku-widget.lua +++ b/community/sudoku-widget.lua @@ -1,6 +1,6 @@ -- name = "Sudoku" -- description = "Sudoku games" --- type = "Game" +-- type = "widget" -- author = "Andrey Gavrilov" -- version = "1.0" diff --git a/community/currencies-widget.lua b/samples/currencies-widget.lua similarity index 100% rename from community/currencies-widget.lua rename to samples/currencies-widget.lua diff --git a/community/currency-search.lua b/samples/currency-search.lua similarity index 100% rename from community/currency-search.lua rename to samples/currency-search.lua diff --git a/community/currency-widget-ru.lua b/samples/currency-widget-ru.lua similarity index 97% rename from community/currency-widget-ru.lua rename to samples/currency-widget-ru.lua index 78466a0..93215e3 100644 --- a/community/currency-widget-ru.lua +++ b/samples/currency-widget-ru.lua @@ -1,195 +1,195 @@ --- name = "Курс валюты" --- description = "Виджет курса валюты. Нажмите на виджет, чтобы изменить валюту. Базовая валюта и дата меняются в контекстном меню." --- data_source = "https://exchangerate.host/" --- type = "widget" --- author = "Andrey Gavrilov" --- version = "2.0" --- lang = "ru" - -local json = require "json" -local color = require "md_colors" -local text_color = ui:get_colors().secondary_text -local equals = " = " - --- константы -- -local curs = {"usd", "eur", "gbp", "chf", "aed", "cny", "inr", "btc", "other"} -local curs_n = {"Доллар США", "Евро", "Фунт стерлингов", "Швейцарский франк", "Дирхам ОАЭ", "Китайский юань", "Индийская рупия", "Биткойн", "Другая"} -local base_curs = {"rub", "usd", "other_b"} -local base_curs_n = {"Российский рубль", "Доллар США", "Другая"} - --- переменные -- -local dialog_id = "" -local cur_idx = 1 -local cur = curs[cur_idx] -local base_cur_idx = 1 -local base_cur = base_curs[base_cur_idx] -local date = "" -local line = "" -local tab = {} -local amount = "1" -local rate = 0 - -function on_alarm() - date = os.date("%Y-%m-%d") - get_rates(date) -end - -function get_rates(date) - http:get("https://api.exchangerate.host/fluctuation?start_date="..prev_date(date).."&end_date="..date.."&symbols="..string.upper(base_cur).."&base="..string.upper(cur).."&amount="..amount) -end - -function on_network_result(result) - t = json.decode(result) - if t.rates[string.upper(base_cur)].end_rate == nil then - date = prev_date(date) - get_rates(date) - return - end - rate = round(t.rates[string.upper(base_cur)].end_rate,4) - local change = round(-t.rates[string.upper(base_cur)].change_pct*100,2) - line = amount.." "..string.upper(cur).." "..equals.." "..divide_number(rate," ").." "..string.upper(base_cur)..get_formatted_change_text(change) - tab = {{"ᐊ", amount, string.upper(cur), equals, divide_number(rate," "), string.upper(base_cur), get_formatted_change_text(change), "ᐅ"}} - ui:show_table(tab, 7) - ui:set_title(ui:get_default_title().." ("..date:gsub("(%d+)-(%d+)-(%d+)", "%3.%2.%1")..")") -end - -function on_click(idx) - if idx == 1 then - date = prev_date(date) - get_rates(date) - ui:show_toast("Загрузка") - elseif idx == 2 then - dialog_id ="amount" - ui:show_edit_dialog("Введите количество", "", amount) - elseif idx == 3 then - dialog_id = "cur" - ui:show_radio_dialog("Выберите валюту", curs_n, cur_idx) - elseif idx == 6 then - dialog_id = "base_cur" - ui:show_radio_dialog("Выберите базовую валюту", base_curs_n, base_cur_idx) - elseif idx == 8 then - date = next_date(date) - get_rates(date) - ui:show_toast("Загрузка") - else - dialog_id = "date" - ui:show_edit_dialog("Введите дату курса", "Формат даты - 31.12.2020. Пустое значение - текущая дата", date:gsub("(%d+)-(%d+)-(%d+)", "%3.%2.%1")) - end -end - -function on_long_click(idx) - item_idx = idx - - ui:show_context_menu({ - {"share-alt","Поделиться"}, - {"copy","Копировать"}, - {"redo","Перезагрузить"} - }) -end - -function on_dialog_action(data) - if data == -1 then - return - end - if dialog_id == "date" then - if get_date(date:gsub("(%d+)-(%d+)-(%d+)", "%3.%2.%1")) == get_date(data) then - return - end - date = get_date(data) - elseif dialog_id == "cur" then - if data == cur_idx and cur == curs[data] then - return - end - cur_idx = data - if curs[data] == "other" then - dialog_id = "other" - ui:show_edit_dialog("Введите валюту", "", string.lower(cur)) - return - end - cur = string.upper(curs[data]) - elseif dialog_id == "base_cur" then - if data == base_cur_idx and base_cur == base_curs[data] then - return - end - base_cur_idx = data - if base_curs[data] == "other_b" then - dialog_id = "other_b" - ui:show_edit_dialog("Введите базовую валюту", "", string.lower(base_cur)) - return - end - base_cur = string.upper(base_curs[data]) - elseif dialog_id == "other" then - if data == cur then - return - end - cur = string.upper(data) - elseif dialog_id == "other_b" then - if data == base_cur then - return - end - base_cur = string.upper(data) - elseif dialog_id == "amount" then - if amount == data:gsub(",",".") then - return - end - amount = data:gsub(",","."):gsub("-","") - if amount == "" then - amount = "1" - end - end - get_rates(date) -end - -function on_context_menu_click(menu_idx) - if menu_idx == 2 then - system:copy_to_clipboard(rate) - elseif menu_idx == 1 then - system:share_text(date:gsub("(%d+)-(%d+)-(%d+)", "%3.%2.%1").." "..line:gsub("(.+)<.+>(.+)<.+>(.+)<.+>(.+)<.+>", "%1%2%3%4")) - elseif menu_idx == 3 then - cur_idx = 1 - cur = string.upper(curs[cur_idx]) - base_cur_idx = 1 - base_cur = string.upper(base_curs[base_cur_idx]) - amount = "1" - get_rates(os.date("%Y-%m-%d")) - ui:show_toast("Начальные установки") - end -end - --- утилиты -- -function get_formatted_change_text(change) - if change > 0 then - return " +"..change.."%" - elseif change < 0 then - return " "..change.."%" - else - return " "..change.."%" - end -end - -function prev_date(date) - local y, m, d = date:match("(%d+)-(%d+)-(%d+)") - return os.date("%Y-%m-%d", os.time{year=y, month=m, day=d} - (60*60*24)) -end - -function next_date(date) - local y, m, d = date:match("(%d+)-(%d+)-(%d+)") - return os.date("%Y-%m-%d", os.time{year=y, month=m, day=d} + (60*60*24)) -end - -function divide_number(n, str) - local left,num,right = string.match(n,'^([^%d]*%d)(%d*)(.-)$') - return left..(num:reverse():gsub('(%d%d%d)','%1'..str):reverse())..right -end - -function get_date(date) - local d, m, Y = date:match("(%d+).(%d+).(%d+)") - local d0, m0, Y0 = os.date("%d.%m.%Y"):match("(%d+).(%d+).(%d+)") - local time = os.time{day=d or 0, month=m or 0, year=Y or 0} - local time0 = os.time{day=d0, month=m0, year=Y0} - local str = string.format("%04d-%02d-%02d", Y or 0, m or 0, d or 0) - if not (str == os.date("%Y-%m-%d", time) and time <= time0 - 24*60*60) then - str = os.date("%Y-%m-%d") - end - return str -end +-- name = "Курс валюты" +-- description = "Виджет курса валюты. Нажмите на виджет, чтобы изменить валюту. Базовая валюта и дата меняются в контекстном меню." +-- data_source = "https://exchangerate.host/" +-- type = "widget" +-- author = "Andrey Gavrilov" +-- version = "2.0" +-- lang = "ru" + +local json = require "json" +local color = require "md_colors" +local text_color = ui:get_colors().secondary_text +local equals = " = " + +-- константы -- +local curs = {"usd", "eur", "gbp", "chf", "aed", "cny", "inr", "btc", "other"} +local curs_n = {"Доллар США", "Евро", "Фунт стерлингов", "Швейцарский франк", "Дирхам ОАЭ", "Китайский юань", "Индийская рупия", "Биткойн", "Другая"} +local base_curs = {"rub", "usd", "other_b"} +local base_curs_n = {"Российский рубль", "Доллар США", "Другая"} + +-- переменные -- +local dialog_id = "" +local cur_idx = 1 +local cur = curs[cur_idx] +local base_cur_idx = 1 +local base_cur = base_curs[base_cur_idx] +local date = "" +local line = "" +local tab = {} +local amount = "1" +local rate = 0 + +function on_alarm() + date = os.date("%Y-%m-%d") + get_rates(date) +end + +function get_rates(date) + http:get("https://api.exchangerate.host/fluctuation?start_date="..prev_date(date).."&end_date="..date.."&symbols="..string.upper(base_cur).."&base="..string.upper(cur).."&amount="..amount) +end + +function on_network_result(result) + t = json.decode(result) + if t.rates[string.upper(base_cur)].end_rate == nil then + date = prev_date(date) + get_rates(date) + return + end + rate = round(t.rates[string.upper(base_cur)].end_rate,4) + local change = round(-t.rates[string.upper(base_cur)].change_pct*100,2) + line = amount.." "..string.upper(cur).." "..equals.." "..divide_number(rate," ").." "..string.upper(base_cur)..get_formatted_change_text(change) + tab = {{"ᐊ", amount, string.upper(cur), equals, divide_number(rate," "), string.upper(base_cur), get_formatted_change_text(change), "ᐅ"}} + ui:show_table(tab, 7) + ui:set_title(ui:get_default_title().." ("..date:gsub("(%d+)-(%d+)-(%d+)", "%3.%2.%1")..")") +end + +function on_click(idx) + if idx == 1 then + date = prev_date(date) + get_rates(date) + ui:show_toast("Загрузка") + elseif idx == 2 then + dialog_id ="amount" + ui:show_edit_dialog("Введите количество", "", amount) + elseif idx == 3 then + dialog_id = "cur" + ui:show_radio_dialog("Выберите валюту", curs_n, cur_idx) + elseif idx == 6 then + dialog_id = "base_cur" + ui:show_radio_dialog("Выберите базовую валюту", base_curs_n, base_cur_idx) + elseif idx == 8 then + date = next_date(date) + get_rates(date) + ui:show_toast("Загрузка") + else + dialog_id = "date" + ui:show_edit_dialog("Введите дату курса", "Формат даты - 31.12.2020. Пустое значение - текущая дата", date:gsub("(%d+)-(%d+)-(%d+)", "%3.%2.%1")) + end +end + +function on_long_click(idx) + item_idx = idx + + ui:show_context_menu({ + {"share-alt","Поделиться"}, + {"copy","Копировать"}, + {"redo","Перезагрузить"} + }) +end + +function on_dialog_action(data) + if data == -1 then + return + end + if dialog_id == "date" then + if get_date(date:gsub("(%d+)-(%d+)-(%d+)", "%3.%2.%1")) == get_date(data) then + return + end + date = get_date(data) + elseif dialog_id == "cur" then + if data == cur_idx and cur == curs[data] then + return + end + cur_idx = data + if curs[data] == "other" then + dialog_id = "other" + ui:show_edit_dialog("Введите валюту", "", string.lower(cur)) + return + end + cur = string.upper(curs[data]) + elseif dialog_id == "base_cur" then + if data == base_cur_idx and base_cur == base_curs[data] then + return + end + base_cur_idx = data + if base_curs[data] == "other_b" then + dialog_id = "other_b" + ui:show_edit_dialog("Введите базовую валюту", "", string.lower(base_cur)) + return + end + base_cur = string.upper(base_curs[data]) + elseif dialog_id == "other" then + if data == cur then + return + end + cur = string.upper(data) + elseif dialog_id == "other_b" then + if data == base_cur then + return + end + base_cur = string.upper(data) + elseif dialog_id == "amount" then + if amount == data:gsub(",",".") then + return + end + amount = data:gsub(",","."):gsub("-","") + if amount == "" then + amount = "1" + end + end + get_rates(date) +end + +function on_context_menu_click(menu_idx) + if menu_idx == 2 then + system:copy_to_clipboard(rate) + elseif menu_idx == 1 then + system:share_text(date:gsub("(%d+)-(%d+)-(%d+)", "%3.%2.%1").." "..line:gsub("(.+)<.+>(.+)<.+>(.+)<.+>(.+)<.+>", "%1%2%3%4")) + elseif menu_idx == 3 then + cur_idx = 1 + cur = string.upper(curs[cur_idx]) + base_cur_idx = 1 + base_cur = string.upper(base_curs[base_cur_idx]) + amount = "1" + get_rates(os.date("%Y-%m-%d")) + ui:show_toast("Начальные установки") + end +end + +-- утилиты -- +function get_formatted_change_text(change) + if change > 0 then + return " +"..change.."%" + elseif change < 0 then + return " "..change.."%" + else + return " "..change.."%" + end +end + +function prev_date(date) + local y, m, d = date:match("(%d+)-(%d+)-(%d+)") + return os.date("%Y-%m-%d", os.time{year=y, month=m, day=d} - (60*60*24)) +end + +function next_date(date) + local y, m, d = date:match("(%d+)-(%d+)-(%d+)") + return os.date("%Y-%m-%d", os.time{year=y, month=m, day=d} + (60*60*24)) +end + +function divide_number(n, str) + local left,num,right = string.match(n,'^([^%d]*%d)(%d*)(.-)$') + return left..(num:reverse():gsub('(%d%d%d)','%1'..str):reverse())..right +end + +function get_date(date) + local d, m, Y = date:match("(%d+).(%d+).(%d+)") + local d0, m0, Y0 = os.date("%d.%m.%Y"):match("(%d+).(%d+).(%d+)") + local time = os.time{day=d or 0, month=m or 0, year=Y or 0} + local time0 = os.time{day=d0, month=m0, year=Y0} + local str = string.format("%04d-%02d-%02d", Y or 0, m or 0, d or 0) + if not (str == os.date("%Y-%m-%d", time) and time <= time0 - 24*60*60) then + str = os.date("%Y-%m-%d") + end + return str +end diff --git a/community/tasker-widget-control.lua b/samples/tasker-widget-control.lua similarity index 100% rename from community/tasker-widget-control.lua rename to samples/tasker-widget-control.lua