Closed GoogleCodeExporter closed 8 years ago
Trzeba poprostu dopisać taką funkcjonalność.
Original comment by ples...@gmail.com
on 11 Oct 2012 at 5:30
to by się baardzo przydało, można potem rozbudować funkcjoaność o
sprawdzanie cronem czy przy starcie czy są nowe odcinki i ściąganie ich ->
sciąŋniete leci do biblioteki więc było by spoko (otwierasz xbmc i podaje
że są nowe odcinki itd - to działa wystarczył by ten download).
Ale na razie samo ściąganie wydaje mi się że jeżeli to nieskomplikowane -
to można by dać bo czemu tylko livestreamy można nagywać - na łączach są
rożne warunki więc może nagranie sprowadza się do przeklejenia kodu z menu
kontekstowego - do kolejki sciagania i super sprawa.
Original comment by grzegorz...@gmail.com
on 11 Oct 2012 at 6:15
gdzie jest część kodu odpowiedzialna za menu kontekstowe ?
Original comment by grzegorz...@gmail.com
on 11 Oct 2012 at 6:16
Za generowanie linków z odpowiednich hostów jest odpowiedzialna biblioteka
urlparser.py. Oczywiście trzeba w plikach hostów dodać metodę
umożliwiającą ściąganie, a także napisać klasę download. Zdaje się że
ją nawet kiedyś napisałem :).
Original comment by ples...@gmail.com
on 11 Oct 2012 at 6:40
nie moge znaleść tego wywołania chodzi mi o to co generuje aktualne menu
kontekstowe - dodaj do kolejki
-odtworz z tego miejsca
-dodaj do ulubionych
...
to każda klasa sama ustala to menu czy jest jakieś systemowe ? domyślne -
chodzi gdzie można dodać tą dodatkową opcje.
Original comment by grzegorz...@gmail.com
on 12 Oct 2012 at 2:24
powinno się dość łatwo dodać download -> plugin youtube działa
identycznie i ma wydzieloną klasę youtubenavigation i w niej ładnie
zdefiniowane akcje kontekstowe za nic nie moge znaleść tego w tym plugu, w
sumie powinno dać się przekleić całe to menu z yt plugina z downloadem
Original comment by grzegorz...@gmail.com
on 12 Oct 2012 at 3:18
tu jest link do dokumentacji biblioteki xbmcgui
http://xbmc.sourceforge.net/python-docs/xbmcgui.html
metoda addContextMenuItems jest odpowiedzialna za context menu.
Original comment by jatrn69
on 12 Oct 2012 at 4:11
ok przycisk dodałem, kwestia akcji
1. proste , miejsce zapisu - mogę użyć tego / default_dstpath,
label="55103", Katalog nagrywanych programów ? czy dodać jakiś nowy do
konfiga
2. biblioteka zapisująca : więc masz tą klase dodającą do dowlnloadu ?
u nich w youtube jest
self.downloader = sys.modules["__main__"].downloader
dajac to do klasy np tvn
mam
self.downloader = sys.modules["__main__"].downloader
AttributeError: 'module' object has no attribute 'downloader'
nie czaje czemu go nie ma to chyba jakiś tools z xbmc bo nie widze żeby
youtube miał klase downloader , ew może wiecie jak ją znaleść i użyć bo
przydało by się żeby obsługiwała kolejki
Original comment by grzegorz...@gmail.com
on 12 Oct 2012 at 7:07
ok rozczaiłem to, przekierowałem żadanie do
XBMC.RunPlugin(plugin://plugin.video.polishtv.live/?service=downloadVideo i ok,
teraz dowloader plesken podeslij ten downloader
i przy okazji pytanie jak wyświetla się komunikaty na ekranie ?
import xbmc
xbmc = xbmc.xbmc()
xbmc.executebuiltin("Notification('Title','Message')")
daje
AttributeError: 'module' object has no attribute 'xbmc'
Original comment by grzegorz...@gmail.com
on 12 Oct 2012 at 8:18
youtube video ma taki downloader mozna go uzyc chyba dorobił by mi ktos akcje
download na podstawie tego albo podeslac innego download menagera obslugujacego
kolejkowane sciagniecie na podstawie nazwy do zapisu i lokalizacji
def downloadVideo(self, params):
get = params.get
self.common.log(repr(params))
if not self.settings.getSetting("download_path"):
self.common.log("Download path missing. Opening settings")
self.utils.showMessage(self.language(30600), self.language(30611))
self.settings.openSettings()
download_path = self.settings.getSetting("download_path")
if not download_path:
return
self.common.log("path: " + repr(download_path))
(video, status) = self.player.buildVideoObject(params)
if "video_url" in video and download_path:
params["Title"] = video['Title']
params["url"] = video['video_url']
params["download_path"] = download_path
filename = "%s-[%s].mp4" % (''.join(c for c in video['Title'] if c not in self.utils.INVALID_CHARS), video["videoid"])
self.subtitles.downloadSubtitle(video)
if get("async"):
self.downloader.download(filename, params, async=False)
else:
self.downloader.download(filename, params)
else:
if "apierror" in video:
self.utils.showMessage(self.language(30625), video["apierror"])
else:
self.utils.showMessage(self.language(30625), "ERROR")
Original comment by grzegorz...@gmail.com
on 12 Oct 2012 at 8:20
sprawdz to:
http://wiki.xbmc.org/index.php?title=Add-on:Simple_downloader_for_xbmc_plugins
wyglada na to ze sprawa jest o wiele prostsza niz sie wydaje :)
Original comment by jatrn69
on 13 Oct 2012 at 1:56
Teraz właśnie skojarzyłem że gdzieś to widziałem. Chyba nawet wzorując
się tym pisałem nagrywanie.
Dobra panowie. Dodajemy ściąganie plików?
Original comment by ples...@gmail.com
on 13 Oct 2012 at 8:24
no ja jestem w trakcie konczenia pisania tego
Original comment by grzegorz...@gmail.com
on 13 Oct 2012 at 8:47
to co z tą lokalizacją nagrywania ?
miejsce zapisu - mogę użyć tego / default_dstpath, label="55103", Katalog nagrywanych programów ? czy dodać jakiś nowy do konfiga
czy pomógł by mi ktoś napisać crona do ściągania cyklicznego - tzn
dodajemy do katalogu ściągaj nowe odcinki akcje, najlepiej ona pyta jaki cykl
i podajemy 1 tydzien, 1 dzien, oraz godzine zakońćzenia (wtedy wystarczy
sprawdzać w tym czasie)
czyli zapisujemy cykliczne ściągniecia, co x czasy sprawdzamy czy coś trzeba
sprawdzić / ściagnąć - np. wiadomość - cykl 1 dzien , godzina 20:10
czyli po 20:10 pojawia sie nowy odcinek skrypt sprawdza czy jest odcinek jak
tak sciąga go - wydaje mi sie doskonała funkcjonalność i dość prosta do
zrobienia
Original comment by grzegorz...@gmail.com
on 13 Oct 2012 at 10:29
[deleted comment]
Plesken - mysle ze sciaganie ma jakis sens, wszczegolnosci dla tych ktorzy nie
maja szybkich lacz. Tak jak grzegorzkrzywda sugerowal, mozna by dodac opcje
nagrywania do context menu, uzyc "default_dstpath", label="55103" jako
globalnego miejsca na wszystkie downloads (nie tylko dla weebtv czy wlacztv).
Idac dalej ja bym wywalil: "weebtv_rec" i "wlacztv_rec" bo opcja ich nagrywania
byla by tez pod contex menu.
grek - przeczytalem twoj comment #14 kilka razy i ciezko mi zrozumiec o co
prosisz :)
Chcesz zrobic crona do nagrywania wlacztv czy weebtv (cytat: "podajemy (...)
godzine zakończenia")?
A moze pytasz o sciaganie z serwisow VOD (cytat: "pojawia sie nowy odcinek
skrypt sprawdza czy jest odcinek").
Jesli chodzi o VOD cron, to nie jest taka prosta sprawa. Skad skrypt by
wiedzial czy odcinek jest nowy? Musial bys przetrzymywac gdzies liste odcinkow
i na jej podsatwie podejmowac decyzje czy pojawil sie nowy odcinek czy nie.
Sciaganie z serwisow jak ekinotv czy iitvinfo to kolejne problemy, duza ilosc
hostow, dzialajace/nie dzialajace linki, limity czasowe, itp.
Original comment by jatrn69
on 13 Oct 2012 at 11:42
po co PTVcronDownloadera
nie tylko dla wolnych łącz - wg mnie to genialna będzie funkcjonalność,
np. user ogląda co dziennie fakty, żona jakiś serial, razem jakiś program
publicystyczny co tygodniowy.
Ustawiamy sobie to do PTVcronDownloadera i jak tylko się pojawią mamy jako
nowe odcinki bo pokaze sie to z automatu w bibiotece xbmc wiec bez sprawdzania
czy cos jest nowego czy nie. I wiele innych zalet dla plikow offline
przewijanie, jakos wszystko dziala lepiej, oczywiscie takze predkosc sciagania,
problemy z netem. Potem mozna funkcjonalność udoskonalic ale podstawowa
wersja jest na prawde prosta do zrobienia - ach gdybym znal pytona (powoli sie
wdroze)
taką mam koncepcje na zasada działania PTVcronDownloadera:
1 do pliku video w pluginach video dodajemy menu kontekstowe -> sciągaj
cyklicznie co równa się ze sprawdzaniem nadkatalogu dla tego pliku.
do pliku a nie katalogu bo w widoku katalogu- ciężko sprawdzić czy katalog
zawiera media czy kolejne podkatalogi, a subskrypcja tylko dla katalogów
zawierających media.
WIęc
2. dodajemy okno z pytaniem
a cykl -> do wyboru dzień, tydzien ,miesiac
b godzina -> ekeslenie o ktorej jest emisja,planowane pojawienie sie pliku
c wzor nazwy -> dla np dla kuba wojewodzki, odcinek 5 = kuba wojewodzki ,
odcinek
3 zapisujemy sciaganie cykliczne jako tablica
#tu pytanie xbmc udostepnia gdzies mozliwosc zapisu tablic (po prostu potrzeba
zapisac serializowana tablice z danymi - nie trzba wg mnie wszystich odcinkow
choc tez to jest pomysł :)
dane w postaci
saveVideo={
cycle:'1d', #select dzien / tydzien / miesiac
hour:'22' #do wyboru select z godzinami pewnie xbmc ma cos takiego
Basetitle:'kuba wojewodzki odcinek '#nazwa z usunietym numerem odcinka -
recznei do wpisania mysle ze mozna tak dac a zalatwi to sprawe parsowania
numeru - po odcieciu tego stringa pozostana numery
curentPart: '2222' #aktualny numer odcinka
nexRun: unixtime #wyliczamy planowany nastepny odcinek
}
4 mechanizm cyklicznego sprawdzania
Pytanie- jak dodać coś co się wykonuje co np. 10 minut - może xbmc ma coś
takiego ?
jak nie to w pythonie i dodanie tego do autosrtartu xbmc ? - jakkolwiek na
pewno się prosto da
działanie mechanizmu
co np 10 minut xbmc odpala ptvCronDownloader().check()
kod mniej wiecej coś takiego (pisane słownie trzeba przełożyć na pytona :)
class ptvCronDownloader():
def check():
TimeNow = aktualny czas unixtimestamp
downloads = <pobrac tablice z zapisanymi cyklami
foreach downloads as key => download
#jeżeli nastepne uruchomienie jest w przeszlosci znaczy ze trzeba poszukac
odcinka - czyli sprawdzamy co chwila czy trzba cos sprawdzic a sprawdzamy po
sieci tylko w zaplanowanych cyklach - więc nie będzie generować ruchu
if (download.nextRun < TimeNow) {
#zmieniamy nastepne uruchomienie , ktos zna obiekty daty w pythonie ? w php
bylo by to proste czas bazowy + przesuniecie jako string (obsluguje 1d, 1m - ew
mozna zamienic to na sekundy) i ten obiekt czasu ustawic na zadana godzine - bo
nie godzine aktualna, mechanizm bedzie w roznych godzinach dzialal moze wiec
miec zalegle ich obsluga mysle na potem.
downloads[key].nextRun = mktime( startowy = downloads[key].nextRun + cycle ,
godzina : hour )
#szukamy nowego odcinka
odcinki = klasaObslugujaca (np. tvn) ->getList(sort najnowsze limit 10)
foreach (odcinki as odcinek)
#1, sprawdzamy czy nazwa jest ok
if ( false "string zawiera" (odcinek.title,Basetitle) continue;
#sprawdzamy czy odcinek jest wiekszy niz ostatni
odcinek_nr= stringReplace(in odcinek.title replace Basetitle => '') => parseInt
()
if(odcinek_nr > curentPart) {
downloader.get
#wysylamy do downloadera +
odcinki[key][curentPart]=odcinek_nr #zmieniamy odcinek na aktualny
}
}
#zapis zaktualonionych downloads
downloads->save :)
Original comment by grzegorz...@gmail.com
on 13 Oct 2012 at 12:01
samo to sciaganie, tak jak mowilem zeby sie wdrozyc napisze i podesle to
sprawdzicie czy jest ok , mi juz dziala :)
Original comment by grzegorz...@gmail.com
on 13 Oct 2012 at 12:02
oki w sumie spróbuje to też napisać - prosił bym tylko o info -
1 jak mogę zapisywać tą tablice z planowanymi nagraniami ? (bo chyba nie
trzeba robić obłsugi swojego pliku , serializować dane itd)
2 jak uruchamiać coś cyklicznie w xbmc - chodzi o to sprawdzanie czy szukać
nowych .
Original comment by grzegorz...@gmail.com
on 13 Oct 2012 at 12:19
3 jak wyświetlić zwykły komunikat na ekranie xbmc (do wyświetlania
zmiennych - szukanie w logu mniej wygodne a żaden z przykładowych mi nie chce
działać) dzięki za ew odpowiedzi
Original comment by grzegorz...@gmail.com
on 13 Oct 2012 at 12:26
grek - przeczytalem twoj comment #14 kilka razy i ciezko mi zrozumiec o co
prosisz :)
Chcesz zrobic crona do nagrywania wlacztv czy weebtv (cytat: "podajemy (...)
godzine zakończenia")?
A moze pytasz o sciaganie z serwisow VOD (cytat: "pojawia sie nowy odcinek
skrypt sprawdza czy jest odcinek").
- sorki opisałem bardziej czytelnie, godzine zakończenia bo programy
cykliczne jak wiadomości pokazują się po zakończeniu emisji - czyli
wiadomości lecia 19:30-20 wiec 20:05
Jesli chodzi o VOD cron, to nie jest taka prosta sprawa. Skad skrypt by
wiedzial czy odcinek jest nowy? Musial bys przetrzymywac gdzies liste odcinkow
i na jej podsatwie podejmowac decyzje czy pojawil sie nowy odcinek czy nie.
-niekoniecznie posiadając wzór nazwy to powinno być proste a jak nie
zadziała dla jakiś kombinowanych cykli trudno - dla wiekszośći będzie
działać.
Czyli jeszcze raz - zapisujemy nazwe katalogu w którym są pliki - liste
zwracają klasy każda swoje taka sama metoda co zwykłe pobranie odcinków z
sortowaniem od najnowszego i małym limitem. - z nazwy odcinamy wzór i mamy nr
odcinka jak nowszy to pobieramy i aktualizujemy ostatnio pobrany.
Sciaganie z serwisow jak ekinotv czy iitvinfo to kolejne problemy, duza ilosc
hostow, dzialajace/nie dzialajace linki, limity czasowe, itp.
- chodzi myśle tu głownie o seriale, wiadomości programy publicystyczne
czyli tvn, tvp - oni nie mają limitów i jest to w ich interesie to całe
oglądanie.
A jeżeli coś przy danej pozycji nie będie działać będzie trzeba
sprawdzić dlaczego coś zoptymalizować lub uniemożliwić dla danego serwisu
:)
Original comment by grzegorz...@gmail.com
on 13 Oct 2012 at 12:35
Akurat Grzesiek pisałeś to wszystko jak był weekend i byłem niedostępny
:(. Teraz mam przynajmniej lekturę do poduszki :)
Original comment by ples...@gmail.com
on 16 Oct 2012 at 1:49
XBMC ma coś takiego ala cron. Ja to wykorzystałem do programowania nagrań w
weeb.tv i wlacz.tv.
To jest coś w stylu:
xbmc.executebuiltin('CancelAlarm(' + str(res['name']) + ', silent)')
xbmc.executebuiltin('AlarmClock(' + str(res['name']) + ', "RunScript(' + str(self.cmddir) + str(os.sep) + 'record.py, ' + str(self.recdir) + str(os.sep) + str(res['name']) + '.json)", ' + str(alarmtime) + '))')
Podajesz wywołanie xbmc.executebuiltin('AlarmClock(<skrypt do uruchomienia>,
<czas kiedy ma się odpalić>)')
Popatrz na skrypt record.py, który mieści się w katalogu cmd. On na
podstawie pliĸów json uruchamia nagrywanie w tv.
W przypadku ściągania to potrzebny byłby tylko tytuł i ścieżka do
ściągania.
Original comment by ples...@gmail.com
on 16 Oct 2012 at 2:01
ok spróbuje to napisać,
Original comment by grzegorz...@gmail.com
on 17 Oct 2012 at 5:41
pytanie tylko, znalazłem formularze generujące się z xml dla settings, jak
użyć formularz nie do settings a do tego programatora ? (chodzi mi o
wywołanie okna z formularzem z xml (ew innym po tych klasach przycisków
wbudowanych i odebranie od niego danych)
Original comment by grzegorz...@gmail.com
on 17 Oct 2012 at 6:13
Sciaganie (z ContextMenu) powoli zostaje wprowadzane w rozne serwisy. Zamykam
Issue
Original comment by jatrn69
on 26 Dec 2012 at 2:18
Original issue reported on code.google.com by
grzegorz...@gmail.com
on 11 Oct 2012 at 2:50