commit 091c7dcd0bef1d8ff852c48c7f97ab28114b2eb9 Author: Evgeny Date: Thu Jul 29 07:51:07 2021 +0300 Initial commit diff --git a/README_ru.md b/README_ru.md new file mode 100644 index 0000000..954ec43 --- /dev/null +++ b/README_ru.md @@ -0,0 +1,72 @@ +# Функции (колбеки) жизненного цикла + +* `onResume()` - вызывается при каждом возрате на рабочий стол; +* `onAlarm()` - вывызвается при возврате на рабочий стол при условии, что с прошлого вызова прошло больше 30 минут; +* `onTick()` - вызывается каждую секунду пока лаунчер находится на экране. + +Для большинства сетевых скриптов (загрузка и показ значений) следует использовать `onAlarm`. Использование других функций может привести к блокировке вашего IP. + +# Сетевые функции + +* `net:getText(url)` - функция для получения текстовых данных по сети (JSON, XML, plain text). + +Функция не возвращает никакого значения, а вместо этого вызывает колбек `onNetworkResult(string)`. В нем следует обрабатывать результат. + +# Функции показа данных + +* `aio:showText(string)` - выводит в виджет обычный текст; повторный вызов стирает предыдущий текст; +* `aio:showLines(table)` - выводит список строк, в качестве аргумента принимает таблицу строк; +* `aio:showLinesWithAuthors(table, table)` - выводит список строк с отправителем (на манер почтового виджета); первая таблица - сами строки, вторая - соответствующие им отправители; таблицы должны быть одинакового размера; +* `aio:showProgressBar(text, currentValue, maxValue)` - показывает прогресс бар; +* `aio:showToast(string)` - показывает информационное сообщение в стиле Android; +* `aio:openBrowser(string)` - открывает указанный URL в бразуере или в приложении, умеющем обрабатывать данный тип URL. + +# Функции обработки данных + +* `json:getValue(string, string)` - получает указанное значение из JSON-строки; первый аргумент - JSON-строка, второй - инструкция для получения значения. + +В отличие классических парзеров JSON, эта функция предназначена не для парзинга, а именно для извлечения одиночных значений. Например, есть следующий JSON: + +``` +{ + "type": "success", + "value": { + "id": 344, + "joke": "Aliens DO indeed exist. They just know better than to visit a planet that Chuck Norris is on.", + "categories": [] + } +} +``` + +Необходимо излечь из него строку "joke". По тексту JSON видно, что эта строка содержится внутри объекта "value", а сам этот объект находится внутри основного объекта JSON. Другими словами чтобы излечь нужную строку необходимо "открыть" основной объект JSON, затем "открыть" объект "value" и излечь из него строку "joke". В коде это будет выглядеть так: + +``` +local joke = json:getValue(result, "object object:value string:joke") +``` + +При этом полный текст скрипта выглядит так: + +``` +function onAlarm() + net:getText("http://api.icndb.com/jokes/random") +end + +function onNetworkResult(result) + local joke = json:getValue(result, "object object:value string:joke") + aio:showText(joke) +end +``` + +Обратите внимание, что последним элементом строки всегда должна идти инструкция для извлечения примитивных типов данных: + +* `string:имя` +* `int:имя` +* `double:имя` + +Также вместо `object` можно использовать `array` если в JSON находится массив. + +# Колбеки обработки нажатий + +* `onClick(number)` - этот колбек будет вызван когда пользователь нажмет на элемент виджета; number - это порядковый номер элемента. + +Допустим скрипт использует функцию `aio:showLines` чтобы показать несколько строк. При нажатии первой строки будет вызван `onClick` с аргументом 1, второй - с аргументом 2 и так далее. При использовании функции `aio:showText` колбек всегда будет вызываться с аргументом 1. diff --git a/btc-widget.lua b/btc-widget.lua new file mode 100644 index 0000000..85c3d0e --- /dev/null +++ b/btc-widget.lua @@ -0,0 +1,8 @@ +function onAlarm() + net:getText("https://api.blockchain.info/ticker") +end + +function onNetworkResult(result) + local price = json:getValue(result, "object object:USD string:last") + aio:showText("BTC = "..price.." USD") +end diff --git a/clock-widget.lua b/clock-widget.lua new file mode 100644 index 0000000..21712ae --- /dev/null +++ b/clock-widget.lua @@ -0,0 +1,4 @@ +function onTick() + local timeStr = os.date('%Y-%m-%d %H:%M:%S') + aio:showText(timeStr) +end diff --git a/github_trending-widget.lua b/github_trending-widget.lua new file mode 100644 index 0000000..562491e --- /dev/null +++ b/github_trending-widget.lua @@ -0,0 +1,35 @@ +name = "GitHub Trending" +description = "GitHub trending repositories (trending-github.com)" +scriptType = "widget" +author = "Evgeny Zobnin (zobnin@gmail.com)" +version = "1.0" + +function onAlarm() + net:getText("https://api.trending-github.com/github/repositories") +end + +function onNetworkResult(result) + local names = { + json:getValue(result, "array object:0 string:name"), + json:getValue(result, "array object:1 string:name"), + json:getValue(result, "array object:2 string:name"), + } + + local descriptions = { + json:getValue(result, "array object:0 string:description"), + json:getValue(result, "array object:1 string:description"), + json:getValue(result, "array object:2 string:description"), + } + + urls = { + json:getValue(result, "array object:0 string:url"), + json:getValue(result, "array object:1 string:url"), + json:getValue(result, "array object:2 string:url"), + } + + aio:showLinesWithAuthors(names, descriptions) +end + +function onClick(idx) + aio:openBrowser(urls[idx]) +end diff --git a/hello_world-widget.lua b/hello_world-widget.lua new file mode 100644 index 0000000..d03b849 --- /dev/null +++ b/hello_world-widget.lua @@ -0,0 +1,3 @@ +function onResume() + aio:showText("Hello world!") +end diff --git a/icndb-widget.lua b/icndb-widget.lua new file mode 100644 index 0000000..3ec126f --- /dev/null +++ b/icndb-widget.lua @@ -0,0 +1,8 @@ +function onAlarm() + net:getText("http://api.icndb.com/jokes/random") +end + +function onNetworkResult(result) + local joke = json:getValue(result, "object object:value string:joke") + aio:showText(joke) +end diff --git a/isdayoff_ru-widget.lua b/isdayoff_ru-widget.lua new file mode 100644 index 0000000..370fd24 --- /dev/null +++ b/isdayoff_ru-widget.lua @@ -0,0 +1,14 @@ +function onAlarm() + local dateStr = os.date('%Y%m%d') + net:getText("https://isdayoff.ru/"..dateStr) +end + +function onNetworkResult(result) + if result == "0" then + aio:showText("Сегодня рабочий день") + elseif result == "1" then + aio:showText("Сегодня выходной") + else + aio:showText("Ошибка") + end +end diff --git a/progress_test-widget.lua b/progress_test-widget.lua new file mode 100644 index 0000000..85cabf4 --- /dev/null +++ b/progress_test-widget.lua @@ -0,0 +1,3 @@ +function onResume() + aio:showProgressBar("Test", 50, 100) +end diff --git a/public_ip-widget.lua b/public_ip-widget.lua new file mode 100644 index 0000000..584f3e8 --- /dev/null +++ b/public_ip-widget.lua @@ -0,0 +1,7 @@ +function onAlarm() + net:getText("https://api.ipify.org") +end + +function onNetworkResult(result) + aio:showText(result) +end diff --git a/random-joke-widget.lua b/random-joke-widget.lua new file mode 100644 index 0000000..f937e00 --- /dev/null +++ b/random-joke-widget.lua @@ -0,0 +1,9 @@ +function onAlarm() + net:getText("https://official-joke-api.appspot.com/random_joke") +end + +function onNetworkResult(result) + local setup = json:getValue(result, "object string:setup") + local punchline = json:getValue(result, "object string:punchline") + aio:showLines({setup, punchline}) +end diff --git a/year_progress-widget.lua b/year_progress-widget.lua new file mode 100644 index 0000000..f0427b1 --- /dev/null +++ b/year_progress-widget.lua @@ -0,0 +1,6 @@ +function onResume() + local yearDays = 365 + local currentDay = os.date("*t").yday + local percent = math.floor(currentDay / (yearDays / 100)) + aio:showProgressBar("Year progress: "..percent.."%", currentDay, yearDays) +end