golasze / sd-xbmc

Automatically exported from code.google.com/p/sd-xbmc
1 stars 0 forks source link

nagrywanie innych pluginów #97

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
dlaczego inne pluginy nie mają na kontekstowym menu download ? 
w sensie (tvp, tvn player czy ekino)

Original issue reported on code.google.com by grzegorz...@gmail.com on 11 Oct 2012 at 2:50

GoogleCodeExporter commented 8 years ago
Trzeba poprostu dopisać taką funkcjonalność.

Original comment by ples...@gmail.com on 11 Oct 2012 at 5:30

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
gdzie jest część kodu odpowiedzialna za menu kontekstowe ?

Original comment by grzegorz...@gmail.com on 11 Oct 2012 at 6:16

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
no ja jestem w trakcie konczenia pisania tego 

Original comment by grzegorz...@gmail.com on 13 Oct 2012 at 8:47

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
[deleted comment]
GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
ok spróbuje to napisać, 

Original comment by grzegorz...@gmail.com on 17 Oct 2012 at 5:41

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
Sciaganie (z ContextMenu) powoli zostaje wprowadzane w rozne serwisy. Zamykam 
Issue

Original comment by jatrn69 on 26 Dec 2012 at 2:18