neue MePo Erweiterung "TVAnytime" (2 Viewers)

Zoidberg77

MP Donator
  • Premium Supporter
  • July 12, 2011
    392
    206
    Home Country
    Germany Germany
    Hi,
    wenn Dein PlugIn in einer Server/Client Umgebung laufen wird, freue ich mich es auch mal zu testen (y)
    Zu Deinen Fragen kann Dir vielleicht @Scrounger weiterhelfen, der bewegt sich mit seinem Clickfinder-PlugIn in eine ähnlich Richtung...
     

    Scrounger

    Retired Team Member
  • Premium Supporter
  • January 21, 2009
    1,032
    514
    Stuttgart
    Home Country
    Germany Germany
    Hi nu_81,
    deine Idee find ich wirklich klasse(y)
    Hab mir mal erlaubt ein paar Gedanken dazu zu machen, weil das Rad muss ja nicht neu erfunden werden, lieber einfach ein paar Speichen mehr einbauen ;)

    Ich habe nun also ein Programm geschrieben, welches alle EPG Einträge von auswählbaren Kanälen durchgeht, bestimmte Kriterien überprüft und falls die Sendung sich qualifiziert automatisch im MediaPortal zur Aufzeichung markiert.
    Diese Funktionen bietet schon TvWishList. Sofern das EPG rating besitzt (coloumn ratingStar), kannst du an TvWishList per <hperlinkparameter> die komplette Aufnahmeplanung schicken.
    z.B.

    Code:
    <hyperlinkParameter>eq(#currentmoduleid,'1656544652'), 'NEWTVWISH//EXPRESSION=(starRating > '#MyRatingProperty' ) AND (originalAirDate >#MyDateProperty )//NAME=TVAnytime: #MyTitleProperty:

    Ich würde dir empfehlen TvWishList in dein Plugin zu integrieren, weil das die ganze Aufnahmeplanung super regelt, langjähirg bewert ist und alle Funktionen die du zur Aufnahmeplanung benötigst schon mitbringt.. Du kannst ohne Verweis auf die *.dlls neue Wishes erstellen oder löschen. Weiter bietet TvWishList dann möglichkeiten wie "nur in Gruppe x aufnehmen", "nur am Wochenende", "Aufnahmen berücksichtigen", "MP confilct manager nutzen" etc. an.

    - Als nächstes wird geprüft wie der Film bei IMDB bewertet ist und es wird überprüft ob es dem eingestellten Mindest Rating entspricht.
    Das könntest du z.B. als eigenständiges TvPlugin realisieren, also ein plugin das von IMDB die Berwertungen für alle Filme im EPG holt. Allerdings ist die Film indentifizierung nicht ganz trivial (hab mich damit schon mal im Rahmen meines ProgramGuides beschäftigt), warum?
    Bsp:
    Terminator 2, The Terminator 2, Terminator - Tag der Abrechnung
    Ist alles der gleiche Film :)

    In einer Liste werden dann wie schon geschrieben diese Sendungen und die Sendungen bei dem kein IMDB Rating gefunden werden konnte (sind eigentlich die wenigsten) aufgelistet und hier kann somit manuell nachgearbeitet werden.
    Sendungen ohne IMDB Rating können dann hier auch zur Aufnahme markiert oder abgelehnt werden.
    Alle Änderungen in dieser Liste wirken sich sofort im MediaPortal aus.
    Das IMDB Rating wird während des Prozesses mit in die EPG Beschreibung geschrieben, sodass man diese in den Aufnahmen und im TV Guide sehen kann.
    Das wäre dann das MP Client plugin zur grafischen Darstellung und programmierung (mit Hilfe von TvWishList ;))

    1) Der Prozessteil der zeitgesteuert die EPGs durchforstet muss/sollte als TVServer PlugIn implementiert werden?!
    Schau dir ein paar der TvPlugins an, viele nutzen eine Zeitsteuerung = Start eines Timers beim TvService start, der dann alle x Min den Thread Y abfeuert.
    Hab das z.B. in meinem RecordedSeriesManagerPlugin drin, ist allerdings vb.net - gibt ja aber gute konverter ;)

    Mir ist bewusst, das MePo eigentlich ja keine Client / Server Software ist (abgesehen von dem TV Teil) jedoch möchte ich gerne bei der weiteren Implementierung Wert auf eine Client / Server Architektur legen.
    Doch wenn ich sehe dass nur die wenigsten PlugIns so gestrickt sind, kann ich mir vorstellen dass die momentane MePo Architektur da viele Steine in den Weg legt.
    Könntest du auf 2 wege realisieren:

    1. MySql / MSSql (TvServer) nutzen:
    Für DB zugirffe kannst du die gentle.framework klasse verwenden - relationaler Objektmapper. Der regelt dann automatisch alle Zugriffe. Dazu muss du dir für deine Tabelle eine eigene Klasse erstellen, bsp. findest du im MP Source Code.
    Nachteil: TvServer muss immer online sein, damit dein MPplugin funktioniert. Beispiele findest du im Tvplugin von MP oder meinem Clickfinder ProgramGuide

    2. SqlLite nutzen (z.B. MP-TvSeries)
    Jeder Client hat seine eigene Datenbank bzw. du verwendest nur eine Datenbank und shares sieht mit allen Clients.
    Nachteil: SqlLite = 1 Benutzer kann zugreifen.
     

    nu_81

    Portal Pro
    November 15, 2009
    315
    74
    Rheinberg
    Home Country
    Germany Germany
    Hallo Scrounger,
    Viele Dank für deine Anregungen und vor allem den Hinweis mit dem TvWishList PlugIn. Das werde ich mir in jedem Fall mal intensiver anschauen.
    Jedoch denke ich dass du etwas falsch verstanden hast.
    Alle beschriebenen Funktionen sind bereis realisiert und laufen für sich auch schon zuverlässig.
    Das holen der Imdb Ratings z.b funktioniert erstaunlich gut. Nur die wenigsten Filme auf den Sky Hauptsendern werden nicht gefunden.
    Die Klasse mit der ich die Historie aufbaue wird auch bereits über das Gentle.Framework auf eine MySql Server Tabelle gemappt.
    Die Frage ist eher wie kann ich diese Klasse die ja direkt auf dem Server läuft und mit dem Sql Server gemappt ist nun zusätzlich zu einem TvServer Plugin von einem MePo Plugin ansprechen. In dieser Klasse existiert z.b. eine Methode ChangeStatus (einer Aufnahme).
    So kann man in einer Bearbeitungsliste diese Methode aufrufen um eine aufgelistete Sendung "aufzunehmen", "doch nicht aufzunehmen" etc. Der Client muss sich dann nicht um die eigentliche Logik dahinter kümmern.
    Wie gesagt, eine Windows Form nutzt bereits genau diese Methodenaufrufe, jedoch wie kann das ein MePo Plugin über das Netzwerk ansprechen.
    Kann ein MePo Plugin Daten von einem WebService abrufen und anzeigen lassen? So könnte man die Klasse über einen Webservice dem Client zur Verfügung stellen.

    Das ganze wurde absichtlich nicht mit Sqllite realisiert da der Tv Server sowieso für die Bearbeitungsliste zur Verfügung stehen muss. Jede Änderung in der Bearbeitungsliste ändert nämlich direkt die Aufnahmeplanung des TvServer!

    Leider habe ich auch noch nicht verstanden, wieso ich immer die Datei gentle.config in das Ausführungsverzeichnis legen muss damit das Programm läuft. Wie kann ich dem Projekt beibringen, das die Datei in den gemeinsamen Dateien liegt?
    Und wie sind die assamblys vom tvServerPlugins Ordner auf das TvServer Hauptverzeichnis gemappt (z.b TvDatabase.dll)?
    Per codebase?

    Leider beschäftige ich mich ja erst seid kurzer Zeit mit der Programmierung innerhalb des Mediaportals und wäre für jeden Denkanstoß dankbar.
    Vielleich hast du ja mal Zeit und Lust dir meinen angehängten Quellcode anzusehen.

    In einer solchen Community lebt das Projekt ja schließlich vom Erfahrungsaustausch.
    Jedenfalls vielen Dank für die Anregungen.
    Ciao Nu
     
    Last edited:

    Scrounger

    Retired Team Member
  • Premium Supporter
  • January 21, 2009
    1,032
    514
    Stuttgart
    Home Country
    Germany Germany
    Die Klasse mit der ich die Historie aufbaue wird auch bereits über das Gentle.Framework auf eine MySql Server Tabelle gemappt.

    Die Frage ist eher wie kann ich diese Klasse die ja direkt auf dem Server läuft und mit dem Sql Server gemappt ist nun zusätzlich zu einem TvServer Plugin von einem MePo Plugin ansprechen. In dieser Klasse existiert z.b. eine Methode ChangeStatus (einer Aufnahme).
    So kann man in einer Bearbeitungsliste diese Methode aufrufen um eine aufgelistete Sendung "aufzunehmen", "doch nicht aufzunehmen" etc. Der Client muss sich dann nicht um die eigentliche Logik dahinter kümmern.
    Wie gesagt, eine Windows Form nutzt bereits genau diese Methodenaufrufe, jedoch wie kann das ein MePo Plugin über das Netzwerk ansprechen.
    Kann ein MePo Plugin Daten von einem WebService abrufen und anzeigen lassen? So könnte man die Klasse über einen Webservice dem Client zur Verfügung stellen.
    Erstellt ne eigene *.dll / *.exe draus und setzt dann nen Verweis in deinem Plugin bzw. einfach die *.vb datei dem Projekt hinzufügen. Vorteil der eigenen *.dll, du kannst dies dann auch client seitig nutzen.

    Leider habe ich auch noch nicht verstanden, wieso ich immer die Datei gentle.config in das Ausführungsverzeichnis legen muss damit das Programm läuft. Wie kann ich dem Projekt beibringen, das die Datei in den gemeinsamen Dateien liegt?
    In dieser Datei steht der connection string für deinen TvServer. Je nachdem ob der gentle.farmework Verweis auf das TvServer Verzeichnis oder MP Verzeichnis gesetzt ist, muss dementsprechend die gentle.config dann im ProgramData Ordner vom TvServer bzw. von MP liegen.
    TvServer plugin -> Verweis auf TvServer Verzeichnis
    MP plugin (client) -> Verweis auf MP Verzeichnis
     

    nu_81

    Portal Pro
    November 15, 2009
    315
    74
    Rheinberg
    Home Country
    Germany Germany
    Vielen Dank!
    Konnte alles soweit nachvollziehen und anwenden.
    Da scheint das Plugin Interface die Verweise also direkt zu verwalten.
    Das mit der dll ist natürlich schon ein wenig Multiseat zu Fuß, habe mir sowas aber schon gedacht. Normalerweise gehört eine solche Klasse / dll nur auf den Server und sollte von den Clients abgefragt werden, aber ich bin mir sicher MePo 2 sieht ein solches Konzept vor. So müssen Änderungen nun immer doppelt gepflegt werde.
    In welchem Verzeichniss sollte die dll denn liegen, direkt im TvServer Verzeichnis oder mit im Plugin Verzeichnis?

    Kannst du mir bitte noch einen Tip geben wie ich das TvServer Plugin debuggen kann. Das Setup Fenster baut sich nicht mehr auf wenn ich die Methode sectionactivated ausfülle.
    Hab versucht mich an den TvServer Prozess zu hängen, komme aber nicht in den Haltepunkt.

    Ciao Nu
     

    Scrounger

    Retired Team Member
  • Premium Supporter
  • January 21, 2009
    1,032
    514
    Stuttgart
    Home Country
    Germany Germany
    Vielen Dank!

    Konnte alles soweit nachvollziehen und anwenden.

    Da scheint das Plugin Interface die Verweise also direkt zu verwalten.

    Das mit der dll ist natürlich schon ein wenig Multiseat zu Fuß, habe mir sowas aber schon gedacht. Normalerweise gehört eine solche Klasse / dll nur auf den Server und sollte von den Clients abgefragt werden, ...u

    Das kann schon sein, bin kein gelernter Programmierer ;)
    Ob das auch so geht weiß ich nicht, evtl. mit MPExtended? Infos dann bitte auch an mich weiterleiten :)

    Grundsätzlich hab ich es halt so gemacht, gemeinsam genutzt klassen in ein extra Projekt (*.dll) ausgelagert und dann darauf verwiesen. So spart man sich wenigstens die doppelte arbeit. Bsp: http://code.google.com/p/mpenrichepg-api/ wird vom TvMovie++ & dem Clickfinder ProgramGuide verwendet.
    Die *.dll hab ich dann im ProgramFiles Verzeichnis des TvServers und MP abgelegt, die plugin *.dlls im jeweiligen Plugin Unterverzeichnis.

    Kannst du mir bitte noch einen Tip geben wie ich das TvServer Plugin debuggen kann. Das Setup Fenster baut sich nicht mehr auf wenn ich die Methode sectionactivated ausfülle.

    Hab versucht mich an den TvServer Prozess zu hängen, komme aber nicht in den Haltepunkt.
    Du musst einen Verweis auf die Tvsetup.exe setzen, dann kannst du es direkt aus VStudio starten & debuggen.
     
    Last edited:

    nu_81

    Portal Pro
    November 15, 2009
    315
    74
    Rheinberg
    Home Country
    Germany Germany
    Grundsätzlich hab ich es halt so gemacht, gemeinsam genutzt klassen in ein extra Projekt (*.dll) ausgelagert und dann darauf verwiesen

    nun muss ja die dll selbst auch Verweise zur z.B. TVDatabase.dll führen. Für das TVServer PlugIn aber dann auf das TVServer Verzeichnis und für MePo in das MePo Verzeichnis. Da kann man ja dann nicht genau die gleiche dll verwenden, oder?!

    Das debuggen klappt irgendwie nicht.
    - Habe in den Verweisen einen zusätzlichen Verweis auf die Datei SetupTv.exe gesetzt.
    - In den Projekteigenschaften des TVServer PlugIns im Register Debuggen auf "externes Programm starten" gesetellt und die SetupTV.exe ausgewählt.
    - Anschließend Haltepunkte in die Methode "OnSectionActivated" gesetzt und das debugging gestartet.
    Dann öffent sich die TV Server Konfiguration, der Code hält jedoch nicht an wenn ich z.B. die Einstellungsseite meines PlugIns öffne. (n)

    Ciao Nu
     

    nu_81

    Portal Pro
    November 15, 2009
    315
    74
    Rheinberg
    Home Country
    Germany Germany
    Das debuggen hat dann doch auf einmal funktioniert, keine Ahnung warum es erst nicht ging.
    Musste dazu nichtmal den Verweis auf die TVSetup.exe setzten.
    Es reicht die Einstellung "externes Programm starten".
     

    Scrounger

    Retired Team Member
  • Premium Supporter
  • January 21, 2009
    1,032
    514
    Stuttgart
    Home Country
    Germany Germany
    nun muss ja die dll selbst auch Verweise zur z.B. TVDatabase.dll führen. Für das TVServer PlugIn aber dann auf das TVServer Verzeichnis und für MePo in das MePo Verzeichnis. Da kann man ja dann nicht genau die gleiche dll verwenden, oder?!
    Die Verweise dürfen nicht absolut sein, sondern müssen im gleichen verzeichnis deiner "helper.dll" sein. Dann kannst diese sowohl Server wie auch client seitig nutzen.
    Beim TvMovie++ benötige ich noch zusätzliche klassen vom MP Client (zb. database.dll), die ich einfach dann ins TvServer Verzeichnis kopiert habe.
     
    Last edited:

    Users who are viewing this thread

    Top Bottom