MediaPortal Forums HTPC/MediaCenter

Go Back   MediaPortal Forum » Language specific support » Deutsches MediaPortal Forum » Media Portal - Support » Plugins/Erweiterungen


Plugins/Erweiterungen Alles um Erweiterungen des MediaPortal welche NICHT in Release oder SVN-Versionen enthalten sind!

Reply
 
Thread Tools Display Modes
Old 2007-02-20, 10:33   #1 (permalink)
Portal Member
 
Join Date: Dec 2004
Location: Munich
Posts: 60
Thanks: 0
Thanked 0 Times in 0 Posts


Question Ein neues Plugin von einem bestehenden Plugin programmiertechnisch ableiten?

MediaPortal Version: 0.2.0.3
MediaPortal Skin: mce
Windows Version: xp sp2
CPU Type: P4 1.8
HDD: Seagate
Memory: 768MB
Motherboard: md3001 (MSI-6399 OEM)
Motherboard Chipset: Intel 845
Motherboard Bios:
Video Card: Ati 9550
Video Card Driver:
Sound Card: Onboard
Sound Card AC3: Nope
Sound Card Driver:
1. TV Card: PVR350
1. TV Card Type: hw
1. TV Card Driver:
2. TV Card:
2. TV Card Type:
2. TV Card Driver:
3. TV Card:
3. TV Card Type:
3. TV Card Driver:
4. TV Card:
4. TV Card Type:
4. TV Card Driver:
MPEG2 Video Codec: nvidia
MPEG2 Audio Codec: nvidia
Satelite/CableTV Provider: kabel deutschland
HTPC Case: aldi :-)
Cooling: Ja
Power Supply: auch
Remote: Hauppauge mit Girder
TV: Philips CRT
TV - HTPC Connection: Composite


Hallo zusammen,

mein erstes Posting im deutschen Forum. Auch von dieser Stelle nochmal vielen vielen Dank an die MP devs, tester, documentation-schreiber, webmaster, moderatoren und alle anderen, die MP zur besten HTPC-Software machen.

Dennoch ist es ja work-in-progress und da ich mit meinem Posting im englischen Forum (http://forum.team-mediaportal.com/de...in-t14861.html) bisher keinen Erfolg hatte, probiere ich es hier nochmal...

Meine Idee ist es, den PowerScheduler so zu erweitern, dass er in der Einstellung "Shutdown" (also nicht "Hibernate" und "Standby") die Option anbietet, das Program CMOSTimer (www.boraxsoft.de) aufzurufen, um den Computer runterzufahren und über das BIOS wieder aufzuwecken. Das hätte den Vorteil, dass man sich irgendwelche Workarounds mit StartOnWake.exe oder ähnlicher Software sparen kann, wenn man Probleme mit Hibernate oder Standby hat (und die Forenbeiträge der vergangenen Tage zeigen, dass es genügend User gibt, die diese Probleme haben ...).

Für die Umsetzung dieser PowerScheduler-Änderungen sehe ich folgende Alternativen:
- Einen Patch submitten. Werde ich machen, wenn dieses Posting auch wieder keine Resonanz findet :-)
- Eine Kopie von PowerScheduler erstellen und meine Änderungen daran durchführen. M. E. keine Alternative, weil es immer wieder Änderungen am PS gibt, die ich dann jedesmal nachziehen müsste.
- Ein Plugin ("BIOSScheduler" oder wie auch immer) von der Klasse MediaPortal.PowerScheduler.PowerScheduler ableiten und nur die Methoden überschreiben, die für die Änderungen relevant sind (PluginName, Shutdown, ...). Das wäre in meinen Augen die eleganteste Lösung, funktioniert aber nicht. Ich vermute, dass es nicht funktioniert, weil die Methoden in PowerScheduler nicht als "virtual" deklariert werden und deshalb in manchen Situationen nicht die mit "new" deklarierten, abgeleiteten Methoden meines BIOSScheduler gezogen werden, sondern die der Basisklasse PowerScheduler.

Deswegen habe ich die folgenden Fragen:
- Was haltet ihr von so einer Funktionalität
- Welches Vorgehen würden die Entwickler bevorzugen? Patch submitten? Oder gibt es Gründe, warum man ein neues Plugin nicht von einem bestehenden Plugin ableiten kann? Oder mache ich etwas falsch?


Ich weiß, dass das viel Holz ist und ich auch viele Fragen habe... :-) Ich hoffe, es ist rübergekommen, um was es mir geht. Wenn nicht, dann sagt mir einfach was unklar ist.


Viele Grüße,
BartManson
bartmanson is online now   Reply With Quote
Old 2007-02-20, 19:33   #2 (permalink)
Portal Developer
 
Join Date: Apr 2006
Posts: 1,060
Thanks: 23
Thanked 28 Times in 19 Posts

Country:


Default

Hallo,
also die Idee hört sich nicht schlecht an. Das mit dem Ableiten sollte eigentlich funktionieren. Ich gehe nur mal davon aus, dass du den Namen des Plugins ändern musst, um einen Konflikt in MP zu vermeiden. Leider kann ich ohne den Code zu sehen nur schwer sagen, was die Ursache sein könnte.

Was jetzt den Entwicklern lieber ist kann ich dir natürlich nicht beantworten. Ich denke mal das ein zusätzliches Plugin am Anfang vielleicht mehr Sinn macht, um eine klare Trennung für Bugreports etc. zu haben.

Gruß
MisterD
misterd is offline   Reply With Quote
Old 2007-02-21, 14:08   #3 (permalink)
Portal Member
 
Luna96's Avatar
 
Join Date: Nov 2006
Posts: 1,863
Thanks: 8
Thanked 36 Times in 35 Posts

My System

Default

Schau dir mal den PVR-Scheduler an. www. pvr-scheduler.de

Luna96
Luna96 is offline   Reply With Quote
Old 2007-02-21, 14:20   #4 (permalink)
Portal Member
 
Join Date: Dec 2004
Location: Munich
Posts: 60
Thanks: 0
Thanked 0 Times in 0 Posts


Default

Hallo MisterD,

danke für dein Feedback. Ich habe mir die ganze Sache nochmal genauer angeschaut und bei MS folgendes gefunden (http://msdn.microsoft.com/library/de...pec_10_5_3.asp):

------------------- schnipp -----------------------
The following example illustrates the differences between virtual and non-virtual methods:

using System;
class A
{
public void F() { Console.WriteLine("A.F"); }
public virtual void G() { Console.WriteLine("A.G"); }
}
class B: A
{
new public void F() { Console.WriteLine("B.F"); }
public override void G() { Console.WriteLine("B.G"); }
}
class Test
{
static void Main() {
B b = new B();
A a = b;
a.F();
b.F();
a.G();
b.G();
}
}

In the example, A introduces a non-virtual method F and a virtual method G. The class B introduces a new non-virtual method F, thus hiding the inherited F, and also overrides the inherited method G. The example produces the output:

A.F
B.F
B.G
B.G
---------------- schnapp --------------------

Bezogen auf meinen Fall bedeutet das:
A entspricht PowerScheduler
B entspricht BIOSScheduler
A.F entspricht z. B. protected void PowerScheduler.ShutDown()
B.F entspricht protected new void BIOSScheduler.ShutDown()

Der PluginManager von MP macht nun in seiner Methode LoadPlugin folgendes:
...
plugin = (IPlugin)newObj;
...
Meiner Meinung macht er durch diese Zeile aus meinem BIOSScheduler wieder einen PowerScheduler und ruft auch dessen Methoden auf -> a.F() in obigem Beispiel ergibt als Resultat "A.F".
Bei mir wäre aber als Resultat "B.F" (also die Methode aus der abgeleiteten Klasse) gewünscht.
Ich konnte dieses Verhalten auch bereits nachvollziehen: Sobald ich meinen BIOSScheduler in einer eigenen DLL in das plugin\process-Verzeichnis kopiert hatte, erschienen in der MP-Configuration zwei Plugins "PowerScheduler", obwohl ich die relevanten Methoden und Eigenschaften (PluginName, Description, WindowID usw.) in meinem abgeleiteten Scheduler implementiert hatte.

Deswegen nochmal die Frage (vielleicht liest es ja mal ein Entwickler (Bavarian?)): Ist dieses Verhalten so gewünscht oder soll es in Zukunft möglich sein, Plugins von anderen Plugins abzuleiten?

Oder hab ich immer noch einen Denkfehler?

Viele Grüße,
BartManson
bartmanson is online now   Reply With Quote
Old 2007-02-21, 14:33   #5 (permalink)
Portal Member
 
Join Date: Dec 2004
Location: Munich
Posts: 60
Thanks: 0
Thanked 0 Times in 0 Posts


Default

Hallo Luna96,

danke für den Hinweis, aber ich denke, die CMOSTimer-Integration ist eine Sache, die mit sehr geringem Aufwand in MP realisiert werden könnte, ohne ein externes Programm wie PVR-Scheduler zu benötigen. Wie du hier erkennen kannst, beschäftigt mich die Sache schon etwas länger ... :-)

Ciao,
BartManson
bartmanson is online now   Reply With Quote
Old 2007-02-21, 17:27   #6 (permalink)
Portal Developer
 
Join Date: Apr 2006
Posts: 1,060
Thanks: 23
Thanked 28 Times in 19 Posts

Country:


Default

Hallo,
ich hab dein Szenario gerade mal ausprobiert und bin dabei auf folgende Lösung gekommen in der Klassendeklaration gekommen:
Code:
    public class BIOSScheduler: PowerScheduler, IPluginReceiver, IWakeable, ISetupForm {
        public new string PluginName() {
            return "BIOSScheduler";
        }

    }
Du gibst einfach nochmal an, dass deine Klasse die Interfaces implementiert. Mit obigem Beispiel erscheint dann im Setup der Name "BIOSScheduler".

Gruß
MisterD
misterd is offline   Reply With Quote
Old 2007-02-23, 13:20   #7 (permalink)
Portal Member
 
Join Date: Dec 2004
Location: Munich
Posts: 60
Thanks: 0
Thanked 0 Times in 0 Posts


Default

Hallo MisterD,

danke für den Hinweis, werde es am Wochenende mal ausprobieren ...

Da wäre ich vermutlich nie draufgekommen. Ich finde es einfach zu "schräg", in einer abgeleiteten Klasse dieselben Interfaces nochmal explizit zu deklarieren, die bereits von der Basisklasse deklariert werden ... Naja, wenns geht :-)

Ciao,
BartManson
bartmanson is online now   Reply With Quote
Old 2007-04-25, 08:45   #8 (permalink)
Portal Member
 
Join Date: Apr 2007
Posts: 25
Thanks: 0
Thanked 0 Times in 0 Posts

Country:


Default

Hallo BartManson,
wie sieht es denn aus mit deinem "BIOSScheduler"? Die von MisterD gezeigte Möglichkeit müßte doch funktionieren.

Gruß
elCutty
elCutty is offline   Reply With Quote
Old 2007-04-27, 10:51   #9 (permalink)
Portal Member
 
Join Date: Dec 2004
Location: Munich
Posts: 60
Thanks: 0
Thanked 0 Times in 0 Posts


Default

Hallo elCutty,

ja, im Prinzip hat die Möglichkeit von MisterD funktioniert, aber letztendlich ist das PowerScheduler-Plugin nicht so konzipiert worden, dass man eine andere Version davon ableiten kann. Ich bin dann immer wieder an Stellen gestoßen, wo ich mir gewünscht hätte, dass etwas "protected" anstatt "private" wäre ... :-)

Letztendlich bin ich zu dem Entschluss gekommen, dass es sinnvoller wäre, den Code zu duplizieren. Darauf habe ich aber irgendwie auch keine Lust, weil sich der PowerScheduler code ja momentan auch noch ziemlich stark verändert (Bugfixing, neue Scheduling-Arten usw.) und ich nicht will, dass ich mit "meinem" scheduler dann immer alle Änderungen nachziehen muss. Vielleicht versuche ich es mal, die Änderungen am aktuellen PS-code durchzuführen und diese Änderungen dann als Patch zu submitten.

Allerdings weiß ich nicht, wann ich dazu komme, weil ich irgendwann in den nächsten 14 Tagen Vater werde und meine Prioritäten dann erstmal woanders liegen werden :-)

Wenn sich etwas tut werde ich es auf jeden Fall bekannt geben.

Viele Grüße,
BartManson
bartmanson is online now   Reply With Quote
Old 2007-04-28, 07:01   #10 (permalink)
Portal Member
 
Join Date: Apr 2007
Posts: 25
Thanks: 0
Thanked 0 Times in 0 Posts

Country:


Default

Hallo BartManson,

da wünsche ich dir erst mal alles Gute für die kommenden Wochen und hoffentlich findest du danach irgendwann mal die Zeit da noch mal rein zuschauen.

Gruß
elCutty
elCutty is offline   Reply With Quote
Reply

Bookmarks

Tags
ableiten, bestehenden, einem, neues, plugin, programmiertechnisch

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
von einem auf dem anderen tag kein epg mehr este22 Media Portal - Support 6 2007-02-14 09:39
Wie ein Plugin für MediaPortal erstellen ? Ta-uri Plugins/Erweiterungen 2 2006-11-20 12:42
Erstellung von einem einfachen Info Plugin HankDerCowboy Plugins/Erweiterungen 1 2006-09-24 11:23
Gibt es ein Kalender oder Today-Plugin? Nova Plugins/Erweiterungen 7 2006-03-01 18:28
Neues Plugin: "MyPlanner" Nova Plugins/Erweiterungen 1 2005-11-09 23:16


All times are GMT +1. The time now is 06:45.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0 Protected by Akismet Blog with WordPress