Initial commit
This commit is contained in:
72
README_ru.md
Normal file
72
README_ru.md
Normal file
@@ -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.
|
||||||
8
btc-widget.lua
Normal file
8
btc-widget.lua
Normal file
@@ -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
|
||||||
4
clock-widget.lua
Normal file
4
clock-widget.lua
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
function onTick()
|
||||||
|
local timeStr = os.date('%Y-%m-%d %H:%M:%S')
|
||||||
|
aio:showText(timeStr)
|
||||||
|
end
|
||||||
35
github_trending-widget.lua
Normal file
35
github_trending-widget.lua
Normal file
@@ -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
|
||||||
3
hello_world-widget.lua
Normal file
3
hello_world-widget.lua
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
function onResume()
|
||||||
|
aio:showText("Hello world!")
|
||||||
|
end
|
||||||
8
icndb-widget.lua
Normal file
8
icndb-widget.lua
Normal file
@@ -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
|
||||||
14
isdayoff_ru-widget.lua
Normal file
14
isdayoff_ru-widget.lua
Normal file
@@ -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
|
||||||
3
progress_test-widget.lua
Normal file
3
progress_test-widget.lua
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
function onResume()
|
||||||
|
aio:showProgressBar("Test", 50, 100)
|
||||||
|
end
|
||||||
7
public_ip-widget.lua
Normal file
7
public_ip-widget.lua
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
function onAlarm()
|
||||||
|
net:getText("https://api.ipify.org")
|
||||||
|
end
|
||||||
|
|
||||||
|
function onNetworkResult(result)
|
||||||
|
aio:showText(result)
|
||||||
|
end
|
||||||
9
random-joke-widget.lua
Normal file
9
random-joke-widget.lua
Normal file
@@ -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
|
||||||
6
year_progress-widget.lua
Normal file
6
year_progress-widget.lua
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user