Modul pro Conky zobrazující předpověď počasí pro ČR.

Skript modulu stačí vložit na konec již uveřejněného základního nastavení LUA skriptu a do tabulky ‚modul‘ zadat název modulu. Název modulu naleznete za nápovědou v proměnné:
local name = "pocasi"
Skript modulu:
function modul_pocasi()
------------------------------------------------------------
-- VLKODLAK
-- 2015 ver 0.1
------------------------------------------------------------
-- předpověď počasí na 5 dní
--
--##########################################################
--
-- pro svou činnost potřebuje: funkce
--[[
kurzor()
pozadi(poz,vyska)
conky_wget()
--]]
--
-- pro svou činnost potřebuje: globální tabulky (před hlavní funkcí - conky_main())
--[[
wget = {}
update = {
["pocasi"] = nil,
}
interval = {
["pocasi"] = 10,
}
klik_menu = {
["pocasi"] = 0,
}
--]]
--
-- pro svou činnost potřebuje: globální proměnné (před hlavní funkcí - conky_main())
--[[
pozadi_menu --nastavuje pozadí pro menu
pozadi_panel --nastavuje pozadí pro panel
pozadi_barva --nastavuje barvu pozadí
rozmer_panelu_x --rozměr panelu v pixelech, musí se shodovat s nastavením
--hodnoty 'minimum_size' v conky.rc
pocasi_obr --adresář s obrázky
pocasi_soubor --umístění a název souboru s daty
pocasi_hodnoty --data s předpovědí
pocasi_url --url adresa pro stahování dat
--]]
--
-- pro svou činnost potřebuje: nainstalované aplikace
--[[
wget --pro stažení dat
imlib2 --knihovna pro zobrazení obrázků (sudo apt-get install libimlib2)
--]]
------------------------------------------------------------
--proměnná pro identifikaci modulu
local name = "pocasi"
--vymazání tabulky pro stahování souborů
wget = {}
----------------------------------------
--podmínky pro interval dat modulu
----------------------------------------
if tonumber(update[tostring(name)]) == nil then--první průchod skriptem
--nastavení intervalu
update[tostring(name)] = updates + tonumber(interval[tostring(name)])
----------------------------------------
--tabulka pro nastavení modulu
pocasi_tab = {
["tl"] = 0,--pro aktualizaci dat po ručním stažení souboru
["akt"] = nil,--stav aktuálnosti dat
["soubor"] = 0,--pro přítomnost souboru s daty
["brana"] = 0, --dostupnost brány
["pozice_y"] = nil,--pozice 'y' pro modul
["vyber"] = nil, --pro výběr předpovědi
}
--smyčka pro nastavení pozice modulu
for a = 1,#modul.name do
local text = tostring(modul.name[a])
if string.match(text, "(%S*)") == tostring(name) then
pocasi_tab.pozice_y = a
break
end--if string.match(text, "(%S)") == tostring(name) then
end--for a = 1,#modul.name do
----------------------------------------
--definování tabulky pro data
pocasi = {} --hlavní tabulka
----------------------------------------
--test přítomnosti souboru
local data = io.popen("ls --full-time "..pocasi_soubor.." 2> /dev/null")
local line = data:read("*l")
data:close()
if line == nil then
pocasi_tab.soubor = 0 --soubor neexistuje
else
pocasi_tab.soubor = 1 --soubor je přítomen
end
----------------------------------------
--test aktuálnosti dat v přítomném souboru
if pocasi_tab.soubor == 1 then
for line in io.lines(pocasi_soubor) do
--uložení řádku s daty
z,k,vyber = string.find(line, "var%sdata%s%p%s([%S%s]*)</script>")
if vyber ~= nil then
pocasi_hodnoty = vyber
break
end--if vyber ~= nil then
end--for line in io.lines(pocasi_soubor) do
--podtabulka pro jednotlivé dny
for a = 1,6 do pocasi[tonumber(a)] = {} end
--datum ze souboru pro jednotlivé dny
if pocasi_hodnoty ~= nil then
z,k,den1 = string.find(pocasi_hodnoty,"(%d+_%d+)")
pocasi[1].datum = den1
z,k,den2 = string.find(pocasi_hodnoty,"(%d+_%d+)",k)
pocasi[2].datum = den2
z,k,den3 = string.find(pocasi_hodnoty,"(%d+_%d+)",k)
pocasi[3].datum = den3
z,k,den4 = string.find(pocasi_hodnoty,"(%d+_%d+)",k)
pocasi[4].datum = den4
z,k,den5 = string.find(pocasi_hodnoty,"(%d+_%d+)",k)
pocasi[5].datum = den5
z,k,den6 = string.find(pocasi_hodnoty,"(%d+_%d+)",k)
pocasi[6].datum = den6
--uložení a následné odstranění rekordů
rekordy = nil
z,k,rekordy = string.find(pocasi_hodnoty, "%p%p%p%p%p(%d+_%d+[%S]*)")
pocasi_hodnoty = string.gsub(pocasi_hodnoty, ""..rekordy.."" , "")
--systémový datum
local data = io.popen("date +%d%m")
local line = data:read("*l")
data:close()
local d = string.match(line,"(%d%d)%d%d")
local m = string.match(line,"%d%d(%d%d)")
if string.match(m,"(%d)%d") == "0" then m = string.gsub (m, "0", "") end
if string.match(d,"(%d)%d") == "0" then d = string.gsub (d, "0", "") end
local datum = d.."_"..m
--porovnání systémového a ze souboru získaného datumu
for a = 1,6 do
if tostring(pocasi[tonumber(a)].datum) == tostring(datum) then
pocasi_tab.akt = tonumber(a)
pocasi_tab.vyber = tonumber(a)
pocasi_tab.soubor = 2 --soubor existuje a data jsou použitelná
break
end
end--for a = 1,6 do
end--if hodnoty ~= nil then
end--if pocasi_tab.soubor == 1 then
--print(pocasi_tab.akt)
----------------------------------------
--data v souboru jsou aktuální
if pocasi_tab.soubor == 2 then
--načtení souboru pro uložení názvu dne
local data = io.open(pocasi_soubor, "r")
local info = data:read("*a")
data:close()
for a = 1,6 do
z,k,dny = string.find(info, "<b%sclass=%pday%p>(%S*)</b>",k)
pocasi[tonumber(a)].nazev = dny
local upravit = tostring(dny)
upravit = string.gsub (upravit, "ě", "e")
upravit = string.gsub (upravit, "í", "i")
upravit = string.gsub (upravit, "Ú", "U")
upravit = string.gsub (upravit, "ý", "y")
upravit = string.gsub (upravit, "ř", "r")
upravit = string.gsub (upravit, "Č", "C")
upravit = string.gsub (upravit, "á", "a")
pocasi[tonumber(a)].nazev_znaky = string.len(upravit)
end--for a = 1,6 do
--tabulka pro rozdělení informací na jednotlivé dny
informace_dny = {
'd_0([%S%s]*)d_1',
'd_1([%S%s]*)d_2',
'd_2([%S%s]*)d_3',
'd_3([%S%s]*)d_4',
'd_4([%S%s]*)d_5',
'd_5([%S%s]*)',
}
--uložení předpovědi do tabulky
for a = 1,6 do
z,k,data = string.find(pocasi_hodnoty,""..tostring(informace_dny[tonumber(a)]).."")
pocasi[tonumber(a)].info = data
--jasno, polojasno atd.
z,k,stav = string.find(pocasi[tonumber(a)].info,"s%p*(%S*)%p%p%pd")
pocasi[tonumber(a)].stav = stav
--teplota ve dne
z,k,tden = string.find(pocasi[tonumber(a)].info,"%p%p%p(%S*)%p%p%pn",k)
pocasi[tonumber(a)].tden = tden
--teplota v noci
z,k,tnoc = string.find(pocasi[tonumber(a)].info,"%p%p%p(%S*)%p%p%pb",k)
pocasi[tonumber(a)].tnoc = tnoc
--bio
z,k,bio = string.find(pocasi[tonumber(a)].info,"%p%p%p(%d)%p%p%pt",k)
pocasi[tonumber(a)].bio = bio
--textová předpověď
z,k,text = string.find(pocasi[tonumber(a)].info,"%p%p%p([%S%s]*)%p%p%pu",k)
--nahrazení znaků textové předpovědi
text = string.gsub (text, "\\u017e", "ž")
text = string.gsub (text, "\\u0159", "ř")
text = string.gsub (text, "\\u011b", "ě")
text = string.gsub (text, "\\u010c", "Č")
text = string.gsub (text, "\\u010d", "č")
text = string.gsub (text, "\\u0160", "Š")
text = string.gsub (text, "\\u00e1", "á")
text = string.gsub (text, "\\u00e9", "é")
text = string.gsub (text, "\\u0148", "ň")
text = string.gsub (text, "\\u0161", "š")
text = string.gsub (text, "\\u0165", "ť")
text = string.gsub (text, "\\u00ed", "í")
text = string.gsub (text, "\\u00b0", "°")
text = string.gsub (text, "\\u00fd", "ý")
text = string.gsub (text, "\\u00fa", "ú")
text = string.gsub (text, "\\/", "/")
pocasi[tonumber(a)].text = text
--rekordní teploty pro jednotlivé dny
--rok maximální teploty
z,k,rok_max = string.find(rekordy,""..tostring(pocasi[tonumber(a)].datum).."%p*%w*%p*%w*%p*(%d%d%d%d)")
pocasi[tonumber(a)].rekord_max_r = rok_max
--maximální teplota
z,k,t_max = string.find(rekordy,""..tostring(pocasi[tonumber(a)].datum).."%p*%w*%p*%w*%p*%d*%p*%w*%p%p%p(%p?%d+%p%d)")
t_max = string.gsub (t_max, "%p", ",") --nahrazení znaku
pocasi[tonumber(a)].rekord_max_t = t_max
--rok minimální teploty
z,k,rok_min = string.find(rekordy,""..tostring(pocasi[tonumber(a)].datum).."%p*%w*%p*%w*%p*%d*%p*%w*%p*%d+%p%d%p*%w*%p*%w*%p*(%d%d%d%d)")
pocasi[tonumber(a)].rekord_min_r = rok_min
--minimální teplota
z,k,t_min = string.find(rekordy,""..tostring(pocasi[tonumber(a)].datum).."%p*%w*%p*%w*%p*%d*%p*%w*%p*%d+%p%d%p*%w*%p*%w*%p*%d*%p*%w*%p%p%p(%p?%d+%p%d)")
pocasi[tonumber(a)].rekord_min_t = t_min
--smyčka pro rozdělení textu předpovědi
slova = {}--tabulka pro jednotlivá slova
pocasi[tonumber(a)].radky = {}--podabulka pro řádky
local info = pocasi[tonumber(a)].text
--naplnění tabulky 'slova'
for text in string.gmatch(info, "%S+%s?") do table.insert(slova, text) end
local delka = rozmer_panelu_x - 30 --odsazení od okrajů panelu (2*15=30)
local pocet_znaku = string.match(tonumber(delka/6),"%d+")
local delka_radku = nil
local s = 1
local text
local start = 1
repeat
if delka_radku == nil then
text = slova[tonumber(s)]
delka_radku = string.len(text)
s = s + 1
elseif tonumber(delka_radku) < tonumber(pocet_znaku) then
text = text..slova[tonumber(s)]
nahradit_text = tostring(text)
nahradit_text = string.gsub (nahradit_text, "ě", "e")
nahradit_text = string.gsub (nahradit_text, "š", "s")
nahradit_text = string.gsub (nahradit_text, "č", "c")
nahradit_text = string.gsub (nahradit_text, "ř", "r")
nahradit_text = string.gsub (nahradit_text, "ž", "z")
nahradit_text = string.gsub (nahradit_text, "ý", "y")
nahradit_text = string.gsub (nahradit_text, "á", "a")
nahradit_text = string.gsub (nahradit_text, "í", "i")
nahradit_text = string.gsub (nahradit_text, "é", "e")
nahradit_text = string.gsub (nahradit_text, "ú", "u")
nahradit_text = string.gsub (nahradit_text, "ů", "u")
nahradit_text = string.gsub (nahradit_text, "ť", "t")
nahradit_text = string.gsub (nahradit_text, "ň", "n")
nahradit_text = string.gsub (nahradit_text, "Č", "C")
nahradit_text = string.gsub (nahradit_text, "°C", "cc")
delka_radku = string.len(nahradit_text)
if tonumber(delka_radku) < tonumber(pocet_znaku) then s = s + 1 end
elseif tonumber(delka_radku) == tonumber(pocet_znaku) then
z = start
k = tonumber(s)
text = ""
for b = tonumber(z),tonumber(k) do
if tostring(text) == "" then
text = slova[tonumber(b)]
else
text = text..slova[tonumber(b)]
end
end--for b = tonumber(z),tonumber(k) do
table.insert(pocasi[tonumber(a)].radky, text)
text = nil
delka_radku = nil
start = tonumber(s + 1)
s = s + 1
elseif tonumber(delka_radku) > tonumber(pocet_znaku) then
z = start
k = tonumber(s-1)
text = ""
for b = tonumber(z),tonumber(k) do
if tostring(text) == "" then
text = slova[tonumber(b)]
else
text = text..slova[tonumber(b)]
end
end--for b = tonumber(z),tonumber(k) do
table.insert(pocasi[tonumber(a)].radky, text)
text = nil
delka_radku = nil
start = tonumber(s)
end--if delka_radku == nil then
until tonumber(s) > #slova
table.insert(pocasi[tonumber(a)].radky, text)
end--for a = 1,6 do
end--if pocasi_tab.soubor == 2 then
----------------------------------------
--soubor neexistuje, nebo je zastaralý
if pocasi_tab.soubor == 0 or pocasi_tab.akt == 0 or pocasi_tab.akt == 6 then
--test brány
local data = io.popen("ip route")
while true do
local line = data:read("*l")
if line == nil then break end
z,k,vyber = string.find(line,"default%svia%s(%S+)%s") --ip adresa
if vyber ~= nil then
brana = vyber
break
end--if vyber ~= nil then
end--while true do
data:close()
--příkaz pro funkci wget(), pokud je brána dostupná
if brana ~= nil then
update[tostring(name)] = updates + 15
wget.pocasi = "${texeci 20 wget -q "..pocasi_url.." -O "..pocasi_soubor.." }"
pocasi_tab.brana = 1
else
pocasi_tab.brana = 0
end--if brana ~= nil then
end--if pocasi_tab.soubor == 0 or pocasi_tab.akt == 0 or pocasi_tab.akt == 6 then
elseif tonumber(update[tostring(name)]) <= updates then
--nastavení intervalu
update[tostring(name)] = updates + tonumber(interval[tostring(name)])
----------------------------------------
--stav souboru
if pocasi_tab.soubor == 0 or pocasi_tab.akt == 0 or pocasi_tab.akt == 6 then
update[tostring(name)] = nil
else
--systémový datum
local d = conky_parse("${time %e}")
local m = conky_parse("${time %m}")
d = string.gsub (d, " ", "")
if string.match(m,"(%d)%d") == "0" then m = string.gsub (m, "0", "") end
local datum = d.."_"..m
for a = 1,6 do
if tostring(pocasi[tonumber(a)].datum) == tostring(datum) then
pocasi_tab.akt = tonumber(a)
end
end--for a = 1,6 do
--test brány
local data = io.popen("ip route")
while true do
local line = data:read("*l")
if line == nil then break end
z,k,vyber = string.find(line,"default%svia%s(%S+)%s") --ip adresa
if vyber ~= nil then
pocasi_tab.brana = 1
break
else
pocasi_tab.brana = 0
end--if vyber ~= nil then
end--while true do
data:close()
end--if pocasi_tab.soubor == 0 or pocasi_tab.akt == 0 or pocasi_tab.akt == 6 then
end--if tonumber(update[tostring(name)]) == nil then
----------------------------------------
--odpočet pro ruční aktualizaci dat
if pocasi_tab.tl > 0 then
pocasi_tab.tl = pocasi_tab.tl - 1
if pocasi_tab.tl == 0 then update[tostring(name)] = nil end
end--if pocasi_tab.tl > 0 then
----------------------------------------
--vypis dat modulu
----------------------------------------
local x = 0
local y = modul.pozice[tonumber(pocasi_tab.pozice_y)]
--nastavení fontu
cairo_select_font_face (cr, "Mono", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
----------------------------------------
--vykreslení pozadí pro menu
if pozadi_menu == 1 then pozadi(y - 12,15) end
----------------------------------------
--konstrukce pro klikutí na menu
local menu = "POČASÍ"
local delka = 5.6*7
--linie - první část
cairo_select_font_face (cr, "Mono", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size (cr, 12.0);
cairo_set_source_rgba (cr, 1,0.7,0,1);
local linie1 = (rozmer_panelu_x - delka)/2 - 5
cairo_rectangle (cr, x,y-5,linie1,1);cairo_fill (cr);
--pozice kurzoru/kliknutí
if mx>=x+linie1+5 and mx<=x+linie1+5+delka+3 and my<=y and my>=y-12 then
cairo_set_source_rgba (cr, 0.7,0.7,0.7,1);
if mx == kx and my == ky and klik_menu[tostring(name)] == 0 then
klik_menu[tostring(name)] = 1
elseif mx == kx and my == ky and klik_menu[tostring(name)] == 1 then
klik_menu[tostring(name)] = 0
end--kliknutí
else
cairo_set_source_rgba (cr, 1,0.7,0,1);
end--pozice kurzoru
cairo_move_to (cr, x+linie1+5, y);cairo_show_text (cr, menu);--text menu
--linie - druhá část
cairo_set_source_rgba (cr, 1,0.7,0,1);
local linie2 = rozmer_panelu_x - (linie1+5+delka+7)
cairo_rectangle (cr, x+linie1+5+delka+7,y-5,linie2,1);cairo_fill (cr);
----------------------------------------
--otevřený panel
y = y + 3
if klik_menu[tostring(name)] == 1 then
cairo_select_font_face (cr, "Mono", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size (cr, 10.0);
--soubor neexistuje,nebo je zastaralý
if pocasi_tab.soubor == 0 or pocasi_tab.akt == 0 or pocasi_tab.akt == 6 then
if pozadi_panel == 1 then pozadi(y+2,50) end
y = y + 25
local text = "Soubor "..pocasi_soubor
local delka = tonumber(string.len(text)*6)
local pozice = (rozmer_panelu_x - delka) / 2
cairo_set_source_rgba (cr, 0.9,0.9,0.9,1);
cairo_move_to (cr, pozice,y-1);cairo_show_text (cr, text);
y = y + 15
if pocasi_tab.soubor == 0 then
text = "neexistuje, nebo je poškozený."
delka = 30*6
elseif pocasi_tab.akt == 0 or pocasi_tab.akt == 6 then
text = "obsahuje zastaralá data předpovědi."
delka = 35*6
end
local pozice = (rozmer_panelu_x - delka) / 2
cairo_set_source_rgba (cr, 0.9,0.9,0.9,1);
cairo_move_to (cr, pozice,y-1);cairo_show_text (cr, text);
elseif pocasi_tab.akt >= 1 or pocasi_tab.akt <= 5 then--soubor obsahuje dostatečná data
if pozadi_panel == 1 then pozadi(y+2,19) end
--nastavení tlačítek
local tl_r = 2 --rozestup mezi tlačítky
local tl_o = 5 --odsazení tlačítka od okraje
local tl_d = (rozmer_panelu_x - (tl_o*2) - (tl_r*4)) /5
local tl_z = tl_o --začátek prvního tlačítka
--tlačítka dnů
cairo_set_font_size (cr, 10.0);
y = y + 4
for a = 1,5 do
--grafika tlačítka
cairo_set_source_rgba (cr, 0.4,0.4,0.4,1);
cairo_rectangle (cr, x+tl_z,y,tl_d,15);cairo_fill (cr);
--výběr tlačítka
if a < tonumber(pocasi_tab.akt) then
--print(a)
cairo_set_source_rgba (cr, 0.1,0.1,0.1,1);
local pozice = (tl_d - (tonumber(pocasi[tonumber(a)].nazev_znaky)*6)) /2
cairo_move_to (cr, tl_z+pozice,y+12);cairo_show_text (cr, pocasi[tonumber(a)].nazev);
elseif a >= tonumber(pocasi_tab.akt) then
if pocasi_tab.vyber == tonumber(a) then
cairo_set_source_rgba (cr, 0.9,0.9,0.9,1);
else
cairo_set_source_rgba (cr, 0.7,0.7,0.7,1);
end--if pocasi_tab.vyber == tonumber(a) then
local pozice = (tl_d - (tonumber(pocasi[tonumber(a)].nazev_znaky)*6)) /2
if mx>=tl_z and mx<=tl_z+tl_d and my<=y+15 and my>=y then
cairo_set_source_rgba (cr, 0.9,0.9,0.9,1);--barva při najetí kurzoru
if mx == kx and my == ky then pocasi_tab.vyber = tonumber(a) end
end
cairo_move_to (cr, tl_z+pozice,y+12);cairo_show_text (cr, pocasi[tonumber(a)].nazev);
end--if a < tonumber(pocasi_tab.akt) then
tl_z = tl_z + tl_r + tl_d
end--for a = 1,5 do
----------------------------------------
--předpověď na zvolený den
local den = tonumber(pocasi_tab.vyber)
--pozadí panelu
y = y + 15
if pozadi_panel == 1 then pozadi(y+2,125+4) end
--datum
local text = string.gsub(pocasi[tonumber(den)].datum, "_", ".")
cairo_set_font_size (cr, 12.0);
cairo_set_source_rgba (cr, 0.9,0.9,0.9,1);
cairo_move_to (cr, x + 10, y + 15);cairo_show_text (cr, text);
--stav
nahradit_stav = {
["skorojasno-bourky"] = "skorojasno - bouřky",
["prehanky-bourky"] = "přeháňky - bouřky",
["prehanky-dest"] = "dešťové přeháňky",
["obcasny-dest"] = "občasný déšť",
["oblacno"] = "oblačno",
["zatazeno"] = "zataženo",
["snih-dest"] = "déšť se sněhem",
["prehanky-snih-dest"] = "přeháňky - déšť se sněhem",
["prehanky-snih"] = "sněhové přeháňky",
}
local stav_dne = string.gsub (pocasi[tonumber(den)].stav, "%S+", nahradit_stav)
cairo_show_text (cr, " "..stav_dne);
--obrázek předpovědi
local obrazek = pocasi_obr..pocasi[tonumber(den)].stav..".png"
local zobraz = imlib_load_image(obrazek)
imlib_context_set_image(zobraz)
imlib_render_image_on_drawable(x+10, y+10)
--teplota den
y = y + 25
cairo_set_font_size (cr, 12.0);cairo_set_source_rgba (cr, 0.7,0.7,0.7,1);
cairo_move_to (cr, rozmer_panelu_x -100, y);cairo_show_text (cr, "Den ");
cairo_set_font_size (cr, 20.0);cairo_set_source_rgba (cr, 1,0.7,0,1);
cairo_move_to (cr, rozmer_panelu_x - 70, y);
if string.match(pocasi[tonumber(den)].tden, "%S") == "-" then
cairo_show_text (cr, ""..pocasi[tonumber(den)].tden);
else
cairo_show_text (cr, " "..pocasi[tonumber(den)].tden);
end
cairo_set_font_size (cr, 12.0);cairo_set_source_rgba (cr, 0.7,0.7,0.7,1);
cairo_move_to (cr, rozmer_panelu_x -30, y);cairo_show_text (cr, "°C");
--teplota noc
y = y + 25
cairo_set_font_size (cr, 12.0);cairo_set_source_rgba (cr, 0.7,0.7,0.7,1);
cairo_move_to (cr, rozmer_panelu_x -100, y);cairo_show_text (cr, "Noc ");
cairo_set_font_size (cr, 20.0);cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_move_to (cr, rozmer_panelu_x - 70, y);
if string.match(pocasi[tonumber(den)].tnoc, "%S") == "-" then
cairo_show_text (cr, ""..pocasi[tonumber(den)].tnoc);
else
cairo_show_text (cr, " "..pocasi[tonumber(den)].tnoc);
end
cairo_set_font_size (cr, 12.0);cairo_set_source_rgba (cr, 0.7,0.7,0.7,1);
cairo_move_to (cr, rozmer_panelu_x -30, y);cairo_show_text (cr, "°C");
--bio
y = y + 25
cairo_set_font_size (cr, 12.0);cairo_set_source_rgba (cr, 0.7,0.7,0.7,1);
cairo_move_to (cr, rozmer_panelu_x -100, y);cairo_show_text (cr, "Bio ");
cairo_set_font_size (cr, 16.0);cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_show_text (cr, pocasi[tonumber(den)].bio);
--rekordy
y = y + 20
cairo_set_font_size (cr, 10.0);
cairo_set_source_rgba (cr, 0.7,0.7,0.7,1);
cairo_move_to (cr, rozmer_panelu_x -110, y);
local text = string.gsub(pocasi[tonumber(den)].datum, "_", ".")
cairo_show_text (cr, "Rekord pro "..text);
y = y + 15
local rok = pocasi[tonumber(den)].rekord_max_r
cairo_move_to (cr, rozmer_panelu_x -100, y);
cairo_show_text (cr, rok);
local teplota = pocasi[tonumber(den)].rekord_max_t
if string.match(teplota, "%S") == "-" then
cairo_show_text (cr, " "..teplota.." °C");
else
cairo_show_text (cr, " "..teplota.." °C");
end
y = y + 15
cairo_move_to (cr, rozmer_panelu_x -100, y);
local rok = pocasi[tonumber(den)].rekord_min_r
cairo_move_to (cr, rozmer_panelu_x -100, y);
cairo_show_text (cr, rok);
local teplota = pocasi[tonumber(den)].rekord_min_t
if string.match(teplota, "%S") == "-" then
cairo_show_text (cr, " "..teplota.." °C");
else
cairo_show_text (cr, " "..teplota.." °C");
end
--dělící čára
y = y + 4
cairo_set_source_rgba (cr, 0.7,0.7,0.7,1);
cairo_rectangle (cr, x+10,y,rozmer_panelu_x-20,0.5);cairo_fill (cr);
--y = y + 15
--pozadí textové předpovědi
if pozadi_panel == 1 then
poz = y+2
vyska = tonumber(#pocasi[tonumber(den)].radky * 15) + 1
pozadi(poz,vyska)
end
--výpis textové přepovědi
cairo_set_font_size (cr, 10.0);
cairo_set_source_rgba (cr, 0.7,0.7,0.7,1);
for a = 1,#pocasi[tonumber(den)].radky do
y = y + 15
cairo_move_to (cr, x+10,y-1);
cairo_show_text (cr, pocasi[tonumber(den)].radky[tonumber(a)]);
end
if pocasi_tab.akt > 1 then
aktualizace = {
"Předpověď je aktuální",
"Předpověď je stará 1 den",
"Předpověď je stará 2 dny",
"Předpověď je stará 3 dny",
"Předpověď je stará 4 dny",
"Předpověď je stará 5 dnů",
}
--pozadí aktualizace
if pozadi_panel == 1 then pozadi(y+3,15+4) end
--dělící čára
y = y + 4
cairo_set_source_rgba (cr, 0.9,0.9,0.9,1);
cairo_rectangle (cr, x+10,y,rozmer_panelu_x-20,0.5);cairo_fill (cr);
y = y + 15
--text aktuálnosti předpovědi
cairo_move_to (cr, x+80,y-1);
cairo_show_text (cr, aktualizace[tonumber(pocasi_tab.akt)]);
if pocasi_tab.brana == 1 then
if mx>=rozmer_panelu_x-80 and mx<=rozmer_panelu_x-10 and my<=y and my>=y-12 then
cairo_set_source_rgba (cr, 0.7,0.7,0.7,1);
if mx == kx and my == ky then
wget.pocasi = "${texeci 20 wget -q "..pocasi_url.." -O "..pocasi_soubor.." }"
pocasi_tab.tl = 5
end--kliknutí
else
cairo_set_source_rgba (cr, 0.9,0.9,0.9,1);
end--pozice kurzoru
cairo_move_to (cr, rozmer_panelu_x-80, y-1);
cairo_show_text (cr, "Aktualizovat");
end--if pocasi_tab.brana == 1 then
end--if pocasi_tab.akt > 1 then
end--if pocasi_tab.akt >= 1 and pocasi_tab.akt <= 5 then
end--if klik_menu[tostring(name)] == 1 then
----------------------------------------
--pozice pro další modul
if klik_menu[tostring(name)] == 1 then
next_y = y + 17
else
next_y = y + 14
end--if klik_menu[tostring(name)] == 1 then
modul.pozice[tonumber(pocasi_tab.pozice_y)+1] = next_y
return modul
end--function modul_pocasi()
--############################################################Jazyk Lua neznám, ale snad se něco přiučím. Díky za skripty, vše mi víceméně funguje, jen u počasí se mi nezobrazují ikony ani "tlačítko" Aktualizovat. Bylo by možné zadat pozici pro předpověď jinak než pomocí IP? Když jsem připojený přes mobil, bere to adresu TMobilu v Praze, což je 160 km daleko :-).
Ikony se vám nezobrazují, neboť ve skriptu žádné nejsou. Musíte si je (kvůli licenci) najít na internetu (google - > wheater icons), stáhnout, přejmenovat je podle názvu u datumu zobrazeného dne a uvést k nim cestu v proměnné:
pocasi_obr = "/absolutní/cesta k adresáři/"
Tuto proměnnou najdete před hlavní funkcí (na začátku celého skriptu, ne modulu).
Tlačítko 'Aktualizovat' se vám zobrazí až další den, kdy je předpověď starší (obrázek pochází z testovací verze) a pouze pokud budete připojen k internetu.
Data se stahují jen jednou na 5 dní, tedy pokud stažený soubor nesmažete, nebo nekliknete na 'Aktualizovat'.
Omlouvám se. Ikony se musí jmenovat podle názvu v hranatých závorkách u tabulky 'nahradit_stav'. Což zjistíte pokud si 'nahradit_stav' necháte vyhledat v textovém editoru. Bohužel se mi nepodařilo podchytit veškeré možné stavy získané ze souboru a tak je potřebné občas nějaký stav a jeho český název doplnit.