From: <moi...@us...> - 2007-01-29 21:20:36
|
Revision: 43 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=43&view=rev Author: moiristo Date: 2007-01-29 13:20:27 -0800 (Mon, 29 Jan 2007) Log Message: ----------- Update with latest version Added Paths: ----------- trunk/plugins/UitzendingGemist/UitGemist.suo trunk/plugins/UitzendingGemist/images/ trunk/plugins/UitzendingGemist/images/Thumbs.db trunk/plugins/UitzendingGemist/images/UitGemist.psd trunk/plugins/UitzendingGemist/images/hover_uitgemist.png trunk/plugins/UitzendingGemist/images/rtlgemist.png trunk/plugins/UitzendingGemist/images/rtlgemist2.png trunk/plugins/UitzendingGemist/images/uitgemist.png trunk/plugins/UitzendingGemist/skin/[Default Skin]/ trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/ trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/Thumbs.db trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/hover_nlgemist.png trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/hover_rtlgemist.png trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/hover_uitgemist.png trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/nlgemist.png trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/rtlgemist.png trunk/plugins/UitzendingGemist/skin/[Default Skin]/RtlGemist.xml trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist.xml trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist2.xml trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemistMain.xml trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/Thumbs.db trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/hover_nlgemist.png trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/hover_rtlgemist.png trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/hover_uitgemist.png trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/nlgemist.png trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/rtlgemist.png trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml Added: trunk/plugins/UitzendingGemist/UitGemist.suo =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/UitGemist.suo ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/images/Thumbs.db =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/images/Thumbs.db ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/images/UitGemist.psd =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/images/UitGemist.psd ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/images/hover_uitgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/images/hover_uitgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/images/rtlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/images/rtlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/images/rtlgemist2.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/images/rtlgemist2.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/images/uitgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/images/uitgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/Thumbs.db =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/Thumbs.db ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/hover_nlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/hover_nlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/hover_rtlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/hover_rtlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/hover_uitgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/hover_uitgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/nlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/nlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/rtlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/[Default Skin]/Media/rtlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Default Skin]/RtlGemist.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Default Skin]/RtlGemist.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Default Skin]/RtlGemist.xml 2007-01-29 21:20:27 UTC (rev 43) @@ -0,0 +1,42 @@ +<window> + <id>6802</id> + <defaultcontrol>50</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:RTLGemist</define> +<controls> + <import>common.window.xml</import> + <control> + <type>group</type> + <description>group element</description> + <animation>FlyInFromLeft</animation> + <layout>StackLayout</layout> + <posX>60</posX> + <posY>97</posY> + <control> + <description>Favorieten</description> + <type>button</type> + <id>2</id> + <label>Favorieten</label> + <onup>17</onup> + <ondown>3</ondown> + </control> + <control> + <description>Top Tien</description> + <type>button</type> + <id>3</id> + <label>Top Tien</label> + <onup>2</onup> + <ondown>4</ondown> + </control> + <control> + <description>Programma's</description> + <type>button</type> + <id>4</id> + <label>Programma's</label> + <onup>3</onup> + <ondown>2</ondown> + </control> + </control> + <import>common.facade.xml</import> +</controls> +</window> \ No newline at end of file Property changes on: trunk/plugins/UitzendingGemist/skin/[Default Skin]/RtlGemist.xml ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist.xml 2007-01-29 21:20:27 UTC (rev 43) @@ -0,0 +1,117 @@ +<window> + <id>6800</id> + <defaultcontrol>50</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:UitGemist</define> +<controls> + <import>common.window.xml</import> + <control> + <type>group</type> + <description>group element</description> + <animation>FlyInFromLeft</animation> + <layout>StackLayout</layout> + <posX>60</posX> + <posY>97</posY> + <control> + <description>Favorieten</description> + <type>button</type> + <id>2</id> + <label>Favorieten</label> + <onup>17</onup> + <ondown>3</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>3</id> + <label>Titel</label> + <onup>2</onup> + <ondown>4</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>4</id> + <label>Dag</label> + <onup>3</onup> + <ondown>5</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>5</id> + <label>Net/zender</label> + <onup>4</onup> + <ondown>6</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>6</id> + <label>Omroep</label> + <onup>5</onup> + <ondown>7</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>7</id> + <label>Genre</label> + <onup>6</onup> + <ondown>8</ondown> + </control> + <control> + <description>Moet je Zien</description> + <type>button</type> + <id>8</id> + <label>Moet je zien</label> + <onup>7</onup> + <onright>50</onright> + <ondown>50</ondown> + </control> + <control> + <type>group</type> + <description>group element</description> + <control> + <type>imagelist</type> + <id>11</id> + <posX>550</posX> + <posY>350</posY> + <width>100</width> + <height>32</height> + <textureWidth>16</textureWidth> + <textureHeight>16</textureHeight> + <subitems> + <subitem>greystar.png</subitem> + <subitem>star.png</subitem> + </subitems> + <orientation>horizontal</orientation> + <align>left</align> + <percentage>#rating</percentage> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>12</id> + <posX>260</posX> + <posY>380</posY> + <width>375</width> + <height>100</height> + <label>#plot</label> + <textcolor>ffffffff</textcolor> + <font>font12</font> + </control> + <control> + <description>Bekeken</description> + <type>label</type> + <id>13</id> + <posX>260</posX> + <posY>350</posY> + <label>#votes keer bekeken</label> + <textcolor>ffffffff</textcolor> + </control> + </control> + </control> + <import>common.facade.xml</import> +</controls> +</window> \ No newline at end of file Property changes on: trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist.xml ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist2.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist2.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist2.xml 2007-01-29 21:20:27 UTC (rev 43) @@ -0,0 +1,126 @@ +<window> + <id>6801</id> + <defaultcontrol>10</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:Programma</define> + <controls> + <import>common.window.xml</import> + <control> + <type>group</type> + <description>group element</description> + <animation>FlyInFromTop</animation> + <control> + <type>image</type> + <description>Program image</description> + <id>3</id> + <posX>60</posX> + <posY>115</posY> + <width>100</width> + <height>75</height> + <texture>background.png</texture> + </control> + <control> + <description>Naam van gekozen programma</description> + <type>label</type> + <id>2</id> + <posX>165</posX> + <posY>95</posY> + <label>#title</label> + </control> + <control> + <description>Genre</description> + <type>label</type> + <id>0</id> + <posX>550</posX> + <posY>115</posY> + <label>Genre</label> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>Display wich genre</description> + <type>label</type> + <id>4</id> + <posX>550</posX> + <posY>130</posY> + <label>#genre</label> + </control> + <control> + <description>Omroep</description> + <type>label</type> + <id>0</id> + <posX>550</posX> + <posY>150</posY> + <label>Omroep</label> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>Display which omroep</description> + <type>label</type> + <id>5</id> + <posX>550</posX> + <posY>165</posY> + <label>#credits</label> + </control> + <control> + <type>imagelist</type> + <id>1</id> + <posX>550</posX> + <posY>200</posY> + <width>100</width> + <height>32</height> + <textureWidth>16</textureWidth> + <textureHeight>16</textureHeight> + <subitems> + <subitem>greystar.png</subitem> + <subitem>star.png</subitem> + </subitems> + <orientation>horizontal</orientation> + <align>left</align> + <percentage>#rating</percentage> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>6</id> + <posX>165</posX> + <posY>115</posY> + <width>375</width> + <height>105</height> + <label>#plot</label> + <font>font12</font> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>afleveringen</description> + <type>listcontrol</type> + <id>10</id> + <posX>165</posX> + <posY>225</posY> + <width>485</width> + <height>200</height> + <textXOff>10</textXOff> + <textYOff>2</textYOff> + <textXOff2>420</textXOff2> + <textYOff2>2</textYOff2> + <spaceBetweenItems>5</spaceBetweenItems> + <textureHeight>25</textureHeight> + <keepaspectratio>no</keepaspectratio> + <font2>font10</font2> + <font3>font10</font3> + <onup>17</onup> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>1</id> + <posX>250</posX> + <posY>380</posY> + <width>375</width> + <height>100</height> + <label>#plotoutline</label> + <font>font12</font> + <textcolor>ffffffff</textcolor> + </control> + </control> + </controls> +</window> Property changes on: trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist2.xml ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemistMain.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemistMain.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemistMain.xml 2007-01-29 21:20:27 UTC (rev 43) @@ -0,0 +1,47 @@ +<window> + <id>6799</id> + <defaultcontrol>2</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:UitzendingGemist</define> + <define>#header.image:</define> + <define>#header.hover:hover_uitgemist.png</define> + + <controls> + <import>common.window.xml</import> + <control> + <type>group</type> + <description>group element</description> + <animation>FlyInFromTop</animation> + <layout>StackLayout</layout> + <posX>80</posX> + <posY>120</posY> + + <!-- topmost item needs an onup with a value of 17 for topbar to work --> + <control> + <description>UitzendingGemist.nl</description> + <type>button</type> + <id>2</id> + <width>560</width> + <height>80</height> + <textureNoFocus>nlgemist.png</textureNoFocus> + <textureFocus>hover_nlgemist.png</textureFocus> + <onup>17</onup> + </control> + + <!-- last item needs an ondown with a value of 2 to support wraparound --> + <control> + <description>RTL Gemist</description> + <type>button</type> + <id>3</id> + <width>560</width> + <height>80</height> + <textXOff>10</textXOff> + <textYOff>5</textYOff> + <textureNoFocus>rtlgemist.png</textureNoFocus> + <textureFocus>hover_rtlgemist.png</textureFocus> + <ondown>2</ondown> + </control> + + </control> + </controls> +</window> Property changes on: trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemistMain.xml ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/Thumbs.db =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/Thumbs.db ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/hover_nlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/hover_nlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/hover_rtlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/hover_rtlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/hover_uitgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/hover_uitgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/nlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/nlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/rtlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/Media/rtlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml 2007-01-29 21:20:27 UTC (rev 43) @@ -0,0 +1,52 @@ +<window> + <id>6802</id> + <defaultcontrol>50</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:RTLGemist</define> +<controls> + <import>common.window.xml</import> + <control> + <type>image</type> + <description>BackGround</description> + <id>1</id> + <posX>0</posX> + <posY>0</posY> + <width>720</width> + <height>576</height> + <texture>background3.png</texture> + </control> + <control> + <type>group</type> + <description>group element</description> + <animation>FlyInFromLeft</animation> + <layout>StackLayout</layout> + <posX>5</posX> + <posY>125</posY> + <control> + <description>Favorieten</description> + <type>button</type> + <id>2</id> + <label>Favorieten</label> + <onup>17</onup> + <ondown>3</ondown> + </control> + <control> + <description>Top Tien</description> + <type>button</type> + <id>3</id> + <label>Top Tien</label> + <onup>2</onup> + <ondown>4</ondown> + </control> + <control> + <description>Programma's</description> + <type>button</type> + <id>4</id> + <label>Programma's</label> + <onup>3</onup> + <ondown>2</ondown> + </control> + </control> + <import>common.facade.xml</import> +</controls> +</window> \ No newline at end of file Property changes on: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml 2007-01-29 21:20:27 UTC (rev 43) @@ -0,0 +1,127 @@ +<window> + <id>6800</id> + <defaultcontrol>50</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:UitGemist</define> +<controls> + <import>common.window.xml</import> + <control> + <type>image</type> + <description>BackGround</description> + <id>1</id> + <posX>0</posX> + <posY>0</posY> + <width>720</width> + <height>576</height> + <texture>background3.png</texture> + </control> + <control> + <type>group</type> + <description>group element</description> + <animation>FlyInFromLeft</animation> + <layout>StackLayout</layout> + <posX>5</posX> + <posY>125</posY> + <control> + <description>Favorieten</description> + <type>button</type> + <id>2</id> + <label>Favorieten</label> + <onup>17</onup> + <ondown>3</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>3</id> + <label>Titel</label> + <onup>2</onup> + <ondown>4</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>4</id> + <label>Dag</label> + <onup>3</onup> + <ondown>5</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>5</id> + <label>Net/zender</label> + <onup>4</onup> + <ondown>6</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>6</id> + <label>Omroep</label> + <onup>5</onup> + <ondown>7</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>7</id> + <label>Genre</label> + <onup>6</onup> + <ondown>8</ondown> + </control> + <control> + <description>Moet je Zien</description> + <type>button</type> + <id>8</id> + <label>Moet je zien</label> + <onup>7</onup> + <onright>50</onright> + <ondown>50</ondown> + </control> + <control> + <type>group</type> + <description>group element</description> + <control> + <type>imagelist</type> + <id>11</id> + <posX>550</posX> + <posY>350</posY> + <width>100</width> + <height>32</height> + <textureWidth>16</textureWidth> + <textureHeight>16</textureHeight> + <subitems> + <subitem>greystar.png</subitem> + <subitem>star.png</subitem> + </subitems> + <orientation>horizontal</orientation> + <align>left</align> + <percentage>#rating</percentage> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>12</id> + <posX>260</posX> + <posY>380</posY> + <width>375</width> + <height>100</height> + <label>#plot</label> + <textcolor>ffffffff</textcolor> + <font>font12</font> + </control> + <control> + <description>Bekeken</description> + <type>label</type> + <id>13</id> + <posX>260</posX> + <posY>350</posY> + <label>#votes keer bekeken</label> + <textcolor>ffffffff</textcolor> + </control> + </control> + </control> + <import>common.facade.xml</import> +</controls> +</window> \ No newline at end of file Property changes on: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml 2007-01-29 21:20:27 UTC (rev 43) @@ -0,0 +1,136 @@ +<window> + <id>6801</id> + <defaultcontrol>10</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:Programma</define> + <controls> + <import>common.window.xml</import> + <control> + <type>image</type> + <description>BackGround</description> + <id>9</id> + <posX>0</posX> + <posY>0</posY> + <width>720</width> + <height>576</height> + <texture>background.png</texture> + </control> + <control> + <type>group</type> + <description>group element</description> + <animation>FlyInFromTop</animation> + <control> + <type>image</type> + <description>Program image</description> + <id>3</id> + <posX>60</posX> + <posY>125</posY> + <width>100</width> + <height>75</height> + <texture>background.png</texture> + </control> + <control> + <description>Naam van gekozen programma</description> + <type>label</type> + <id>2</id> + <posX>170</posX> + <posY>105</posY> + <label>#title</label> + </control> + <control> + <description>Genre</description> + <type>label</type> + <id>0</id> + <posX>555</posX> + <posY>120</posY> + <label>Genre</label> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>Display wich genre</description> + <type>label</type> + <id>4</id> + <posX>555</posX> + <posY>138</posY> + <label>#genre</label> + </control> + <control> + <description>Omroep</description> + <type>label</type> + <id>8</id> + <posX>555</posX> + <posY>162</posY> + <label>Omroep</label> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>Display which omroep</description> + <type>label</type> + <id>5</id> + <posX>555</posX> + <posY>180</posY> + <label>#credits</label> + </control> + <control> + <type>imagelist</type> + <id>7</id> + <posX>555</posX> + <posY>205</posY> + <width>100</width> + <height>32</height> + <textureWidth>16</textureWidth> + <textureHeight>16</textureHeight> + <subitems> + <subitem>greystar.png</subitem> + <subitem>star.png</subitem> + </subitems> + <orientation>horizontal</orientation> + <align>left</align> + <percentage>#rating</percentage> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>6</id> + <posX>170</posX> + <posY>125</posY> + <width>375</width> + <height>105</height> + <label>#plot</label> + <font>font12</font> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>afleveringen</description> + <type>listcontrol</type> + <id>10</id> + <posX>170</posX> + <posY>240</posY> + <width>485</width> + <height>200</height> + <textXOff>10</textXOff> + <textYOff>2</textYOff> + <textXOff2>420</textXOff2> + <textYOff2>2</textYOff2> + <spaceBetweenItems>5</spaceBetweenItems> + <textureHeight>25</textureHeight> + <keepaspectratio>no</keepaspectratio> + <font2>font10</font2> + <font3>font10</font3> + <onup>17</onup> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>1</id> + <posX>170</posX> + <posY>400</posY> + <width>375</width> + <height>100</height> + <label>#plotoutline</label> + <font>font12</font> + <textcolor>ffffffff</textcolor> + </control> + </control> + </controls> +</window> Property changes on: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml 2007-01-29 21:20:27 UTC (rev 43) @@ -0,0 +1,55 @@ +<window> + <id>6799</id> + <defaultcontrol>2</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:UitzendingGemist</define> + <define>#header.image:</define> + <define>#header.hover:hover_uitgemist.png</define> + + <controls> + <import>common.window.xml</import> + <control> + <description>BackGround</description> + <type>image</type> + <id>1</id> + <posX>0</posX> + <posY>0</posY> + <texture>background.png</texture> + </control> + <control> + <type>group</type> + <description>group element</description> + <animation>FlyInFromTop</animation> + <layout>StackLayout</layout> + <posX>80</posX> + <posY>120</posY> + + <!-- topmost item needs an onup with a value of 17 for topbar to work --> + <control> + <description>UitzendingGemist.nl</description> + <type>button</type> + <id>2</id> + <width>560</width> + <height>80</height> + <textureNoFocus>nlgemist.png</textureNoFocus> + <textureFocus>hover_nlgemist.png</textureFocus> + <onup>17</onup> + </control> + + <!-- last item needs an ondown with a value of 2 to support wraparound --> + <control> + <description>RTL Gemist</description> + <type>button</type> + <id>3</id> + <width>560</width> + <height>80</height> + <textXOff>10</textXOff> + <textYOff>5</textYOff> + <textureNoFocus>rtlgemist.png</textureNoFocus> + <textureFocus>hover_rtlgemist.png</textureFocus> + <ondown>2</ondown> + </control> + + </control> + </controls> +</window> Property changes on: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml ___________________________________________________________________ Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <moi...@us...> - 2007-01-30 02:13:07
|
Revision: 49 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=49&view=rev Author: moiristo Date: 2007-01-29 18:13:05 -0800 (Mon, 29 Jan 2007) Log Message: ----------- Version 0.5! Modified Paths: -------------- trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs trunk/plugins/UitzendingGemist/UitGemist/UitGemist.csproj trunk/plugins/UitzendingGemist/UitGemist.suo trunk/plugins/UitzendingGemist/skin/[Default Skin]/RtlGemist.xml trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist.xml trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist2.xml trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemistMain.xml trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml Modified: trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs 2007-01-29 23:35:51 UTC (rev 48) +++ trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs 2007-01-30 02:13:05 UTC (rev 49) @@ -275,11 +275,18 @@ } ShowList(Names); } + public static string GetPlayUrl(string url) { - Match m = Regex.Match(wc.GetUrl(url), @"var\smediaurl\s=\s.(http://.*?).;"); + string page = wc.GetUrl(url, true); + Log.Debug(""+page.Length); + Regex r = new Regex(@"src=.(?<url>.*?\.asf)", RegexOptions.Multiline); + Match m = r.Match(page); + Log.Debug(""+m.Success); url = m.Groups[1].Value; + Log.Debug("url length:" + url.Length); + Log.Debug(url); url = url.Replace(".rm", ".asf"); url = ConvertString(url); return url; Modified: trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs 2007-01-29 23:35:51 UTC (rev 48) +++ trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs 2007-01-30 02:13:05 UTC (rev 49) @@ -5,7 +5,7 @@ using System.Text.RegularExpressions; using MediaPortal.GUI.Library; using MediaPortal.Player; -using MediaPortal.Util; +using MediaPortal.Utils; using MediaPortal.Dialogs; using MediaPortal.Playlists; using System.Xml; Modified: trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs 2007-01-29 23:35:51 UTC (rev 48) +++ trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs 2007-01-30 02:13:05 UTC (rev 49) @@ -136,6 +136,14 @@ secondRequest.UserAgent = agent; secondRequest.ContentType = postType; secondRequest.CookieContainer = new CookieContainer(); + + Cookie c = new Cookie(); + c.Domain = "player.omroep.nl"; + c.Name = "player_instellingen"; + c.Value = "formaat:wmv&kwaliteit:bb"; + + secondRequest.CookieContainer.Add(c); + CookieCollection cookies = firstResponse.Cookies; secondRequest.CookieContainer.Add(cookies); Modified: trunk/plugins/UitzendingGemist/UitGemist/UitGemist.csproj =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/UitGemist.csproj 2007-01-29 23:35:51 UTC (rev 48) +++ trunk/plugins/UitzendingGemist/UitGemist/UitGemist.csproj 2007-01-30 02:13:05 UTC (rev 49) @@ -9,6 +9,7 @@ <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>UitGemist</RootNamespace> <AssemblyName>UitGemist</AssemblyName> + <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> @@ -30,7 +31,7 @@ <ItemGroup> <Reference Include="Core, Version=1.0.2560.37327, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\..\trunk\mediaportal\Core\bin\Release\Core.dll</HintPath> + <HintPath>..\..\..\trunk\mediaportal\Core\bin\Release\Core.dll</HintPath> </Reference> <Reference Include="Dialogs, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> @@ -43,7 +44,7 @@ <Reference Include="System.Xml" /> <Reference Include="Utils, Version=1.0.2560.37325, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\..\trunk\mediaportal\Utils\bin\Release\Utils.dll</HintPath> + <HintPath>..\..\..\trunk\mediaportal\Utils\bin\Release\Utils.dll</HintPath> </Reference> </ItemGroup> <ItemGroup> @@ -75,4 +76,7 @@ <Target Name="AfterBuild"> </Target> --> + <PropertyGroup> + <PostBuildEvent>xcopy $(TargetPath) D:\MediaPortal\trunk\mediaportal\xbmc\bin\Release\plugins\windows\$(TargetFileName) /y</PostBuildEvent> + </PropertyGroup> </Project> \ No newline at end of file Modified: trunk/plugins/UitzendingGemist/UitGemist.suo =================================================================== (Binary files differ) Modified: trunk/plugins/UitzendingGemist/skin/[Default Skin]/RtlGemist.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Default Skin]/RtlGemist.xml 2007-01-29 23:35:51 UTC (rev 48) +++ trunk/plugins/UitzendingGemist/skin/[Default Skin]/RtlGemist.xml 2007-01-30 02:13:05 UTC (rev 49) @@ -8,9 +8,12 @@ <control> <type>group</type> <description>group element</description> - <animation>FlyInFromLeft</animation> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <animation effect="slide" time="250" start="-300,0">WindowOpen</animation> + <animation effect="slide" time="500" end="0,-300">WindowClose</animation> <layout>StackLayout</layout> - <posX>60</posX> + <posX>50</posX> <posY>97</posY> <control> <description>Favorieten</description> Modified: trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist.xml 2007-01-29 23:35:51 UTC (rev 48) +++ trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist.xml 2007-01-30 02:13:05 UTC (rev 49) @@ -8,9 +8,12 @@ <control> <type>group</type> <description>group element</description> - <animation>FlyInFromLeft</animation> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <animation effect="slide" time="250" start="-300,0">WindowOpen</animation> + <animation effect="slide" time="500" end="0,-300">WindowClose</animation> <layout>StackLayout</layout> - <posX>60</posX> + <posX>50</posX> <posY>97</posY> <control> <description>Favorieten</description> Modified: trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist2.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist2.xml 2007-01-29 23:35:51 UTC (rev 48) +++ trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemist2.xml 2007-01-30 02:13:05 UTC (rev 49) @@ -8,12 +8,13 @@ <control> <type>group</type> <description>group element</description> - <animation>FlyInFromTop</animation> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> <control> <type>image</type> <description>Program image</description> <id>3</id> - <posX>60</posX> + <posX>50</posX> <posY>115</posY> <width>100</width> <height>75</height> Modified: trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemistMain.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemistMain.xml 2007-01-29 23:35:51 UTC (rev 48) +++ trunk/plugins/UitzendingGemist/skin/[Default Skin]/UitGemistMain.xml 2007-01-30 02:13:05 UTC (rev 49) @@ -8,23 +8,20 @@ <controls> <import>common.window.xml</import> - <control> - <type>group</type> - <description>group element</description> - <animation>FlyInFromTop</animation> - <layout>StackLayout</layout> - <posX>80</posX> - <posY>120</posY> <!-- topmost item needs an onup with a value of 17 for topbar to work --> <control> <description>UitzendingGemist.nl</description> <type>button</type> <id>2</id> - <width>560</width> - <height>80</height> + <width>575</width> + <height>90</height> + <posX>80</posX> + <posY>120</posY> <textureNoFocus>nlgemist.png</textureNoFocus> <textureFocus>hover_nlgemist.png</textureFocus> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> <onup>17</onup> </control> @@ -33,15 +30,16 @@ <description>RTL Gemist</description> <type>button</type> <id>3</id> - <width>560</width> - <height>80</height> - <textXOff>10</textXOff> - <textYOff>5</textYOff> + <posX>80</posX> + <posY>220</posY> + <width>575</width> + <height>90</height> <textureNoFocus>rtlgemist.png</textureNoFocus> <textureFocus>hover_rtlgemist.png</textureFocus> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> <ondown>2</ondown> </control> - </control> </controls> </window> Modified: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml 2007-01-29 23:35:51 UTC (rev 48) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml 2007-01-30 02:13:05 UTC (rev 49) @@ -18,7 +18,10 @@ <control> <type>group</type> <description>group element</description> - <animation>FlyInFromLeft</animation> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <animation effect="slide" time="250" start="-300,0">WindowOpen</animation> + <animation effect="slide" time="500" end="0,-300">WindowClose</animation> <layout>StackLayout</layout> <posX>5</posX> <posY>125</posY> Modified: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml 2007-01-29 23:35:51 UTC (rev 48) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml 2007-01-30 02:13:05 UTC (rev 49) @@ -18,7 +18,10 @@ <control> <type>group</type> <description>group element</description> - <animation>FlyInFromLeft</animation> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <animation effect="slide" time="250" start="-300,0">WindowOpen</animation> + <animation effect="slide" time="500" end="0,-300">WindowClose</animation> <layout>StackLayout</layout> <posX>5</posX> <posY>125</posY> Modified: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml 2007-01-29 23:35:51 UTC (rev 48) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml 2007-01-30 02:13:05 UTC (rev 49) @@ -18,7 +18,8 @@ <control> <type>group</type> <description>group element</description> - <animation>FlyInFromTop</animation> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> <control> <type>image</type> <description>Program image</description> Modified: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml 2007-01-29 23:35:51 UTC (rev 48) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml 2007-01-30 02:13:05 UTC (rev 49) @@ -19,7 +19,10 @@ <control> <type>group</type> <description>group element</description> - <animation>FlyInFromTop</animation> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <animation effect="slide" time="250" start="-300,0">WindowOpen</animation> + <animation effect="slide" time="500" end="0,-300">WindowClose</animation> <layout>StackLayout</layout> <posX>80</posX> <posY>120</posY> @@ -29,8 +32,8 @@ <description>UitzendingGemist.nl</description> <type>button</type> <id>2</id> - <width>560</width> - <height>80</height> + <width>575</width> + <height>90</height> <textureNoFocus>nlgemist.png</textureNoFocus> <textureFocus>hover_nlgemist.png</textureFocus> <onup>17</onup> @@ -41,10 +44,8 @@ <description>RTL Gemist</description> <type>button</type> <id>3</id> - <width>560</width> - <height>80</height> - <textXOff>10</textXOff> - <textYOff>5</textYOff> + <width>575</width> + <height>90</height> <textureNoFocus>rtlgemist.png</textureNoFocus> <textureFocus>hover_rtlgemist.png</textureFocus> <ondown>2</ondown> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <moi...@us...> - 2007-01-29 21:25:07
|
Revision: 45 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=45&view=rev Author: moiristo Date: 2007-01-29 13:24:59 -0800 (Mon, 29 Jan 2007) Log Message: ----------- Latest UitGemist version Added Paths: ----------- trunk/plugins/UitzendingGemist/UitGemist/ trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.cs trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.resx trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs trunk/plugins/UitzendingGemist/UitGemist/Properties/ trunk/plugins/UitzendingGemist/UitGemist/Properties/AssemblyInfo.cs trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs trunk/plugins/UitzendingGemist/UitGemist/SecondScreen.cs trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs trunk/plugins/UitzendingGemist/UitGemist/UitGemist.csproj trunk/plugins/UitzendingGemist/UitGemist/UitGemist.csproj.user trunk/plugins/UitzendingGemist/UitGemist/UitGemistMain.cs trunk/plugins/UitzendingGemist/UitGemist/UitGemistPlugin.cs Added: trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs (rev 0) +++ trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs 2007-01-29 21:24:59 UTC (rev 45) @@ -0,0 +1,117 @@ +namespace MediaPortal.GUI.UitGemist +{ + partial class ConfigurationForm + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.sbBtn = new System.Windows.Forms.RadioButton(); + this.bbBtn = new System.Windows.Forms.RadioButton(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.okBtn = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // sbBtn + // + this.sbBtn.AutoSize = true; + this.sbBtn.Location = new System.Drawing.Point(10, 19); + this.sbBtn.Name = "sbBtn"; + this.sbBtn.Size = new System.Drawing.Size(74, 17); + this.sbBtn.TabIndex = 0; + this.sbBtn.TabStop = true; + this.sbBtn.Text = "Smallband"; + this.sbBtn.UseVisualStyleBackColor = true; + // + // bbBtn + // + this.bbBtn.AutoSize = true; + this.bbBtn.Location = new System.Drawing.Point(10, 39); + this.bbBtn.Name = "bbBtn"; + this.bbBtn.Size = new System.Drawing.Size(77, 17); + this.bbBtn.TabIndex = 1; + this.bbBtn.TabStop = true; + this.bbBtn.Text = "Broadband"; + this.bbBtn.UseVisualStyleBackColor = true; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.bbBtn); + this.groupBox1.Controls.Add(this.sbBtn); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(169, 70); + this.groupBox1.TabIndex = 2; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Default Speed"; + // + // okBtn + // + this.okBtn.Location = new System.Drawing.Point(12, 88); + this.okBtn.Name = "okBtn"; + this.okBtn.Size = new System.Drawing.Size(75, 23); + this.okBtn.TabIndex = 3; + this.okBtn.Text = "OK"; + this.okBtn.UseVisualStyleBackColor = true; + this.okBtn.Click += new System.EventHandler(this.okBtn_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(93, 88); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 4; + this.button1.Text = "Cancel"; + this.button1.UseVisualStyleBackColor = true; + + // + // ConfigurationForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(246, 120); + this.Controls.Add(this.button1); + this.Controls.Add(this.okBtn); + this.Controls.Add(this.groupBox1); + this.Name = "ConfigurationForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "UitzendingGemist Configuration"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RadioButton sbBtn; + private System.Windows.Forms.RadioButton bbBtn; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button okBtn; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file Property changes on: trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.cs (rev 0) +++ trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.cs 2007-01-29 21:24:59 UTC (rev 45) @@ -0,0 +1,43 @@ +using MediaPortal.GUI.Library; + +using System; +using System.IO; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace MediaPortal.GUI.UitGemist +{ + public partial class ConfigurationForm : Form + { + bool broadband; + + public ConfigurationForm() + { + InitializeComponent(); + broadband = ShowWaitCursor.getBroadBand(); + + this.sbBtn.Checked = !broadband; + this.bbBtn.Checked = broadband; + } + + private void okBtn_Click(object sender, EventArgs e) + { + string dir = Directory.GetCurrentDirectory(); + using (MediaPortal.Profile.Settings writer = new MediaPortal.Profile.Settings(dir + @"\UitGemist.xml", false)) + { + writer.Clear(); + + if (sbBtn.Checked) broadband = false; + else broadband = true; + + if(broadband) writer.SetValue("settings", "broadband", "yes"); + else writer.SetValue("settings", "broadband", "no"); + } + this.Dispose(true); + } + } +} \ No newline at end of file Property changes on: trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.resx =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.resx (rev 0) +++ trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.resx 2007-01-29 21:24:59 UTC (rev 45) @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file Property changes on: trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.resx ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs (rev 0) +++ trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs 2007-01-29 21:24:59 UTC (rev 45) @@ -0,0 +1,545 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Text; +using System.Text.RegularExpressions; +using MediaPortal.GUI.Library; +using MediaPortal.Player; +using MediaPortal.Util; +using MediaPortal.Dialogs; +using MediaPortal.Playlists; +using System.Xml; +using System.IO; + +namespace MediaPortal.GUI.UitGemist +{ + public class NLGemist : GUIWindow + { + #region SkinControlAttributes + [SkinControlAttribute(50)] + protected GUIFacadeControl facadeview = null; + [SkinControlAttribute(2)] + protected GUIButtonControl btnFavoriet = null; + [SkinControlAttribute(3)] + protected GUISelectButtonControl btnTitel = null; + [SkinControlAttribute(4)] + protected GUISelectButtonControl btnDag = null; + [SkinControlAttribute(5)] + protected GUISelectButtonControl btnZender = null; + [SkinControlAttribute(6)] + protected GUISelectButtonControl btnOmroep = null; + [SkinControlAttribute(7)] + protected GUISelectButtonControl btnRubriek = null; + [SkinControlAttribute(8)] + protected GUIButtonControl btnMoetJeZien = null; + [SkinControlAttribute(11)] + protected GUIImageList imgList = null; + [SkinControlAttribute(12)] + protected GUITextScrollUpControl textBox = null; + [SkinControlAttribute(13)] + protected GUILabelControl lblBekeken = null; + + #endregion + + #region Variables + private String MainUrlBody = String.Empty; + + private StringCollection Names = new StringCollection(); + private StringCollection Urls = new StringCollection(); + private StringCollection UrlsSecondScreen = new StringCollection(); + private StringCollection ImageUrls = new StringCollection(); + private StringCollection Plot = new StringCollection(); + private StringCollection Waardering = new StringCollection(); + private StringCollection Bekeken = new StringCollection(); + + private StringCollection NavNames = new StringCollection(); + private StringCollection NavUrls = new StringCollection(); + + private StringCollection FavNames = new StringCollection(); + private StringCollection FavUrls = new StringCollection(); + private StringCollection FavUrlsSecondScreen = new StringCollection(); + private int FavCount = 0; + + private bool ViewFavorieten = false; + private bool ViewMoetJeZien = false; + + public static ShowWaitCursor wc = new ShowWaitCursor(); + #endregion + + public override int GetID + { + get + { + return 6800; + } + set + { + base.GetID = value; + } + } + + public override bool Init() + { + return Load(GUIGraphicsContext.Skin + @"\UitGemist.xml"); + } + + public override void OnAction(Action action) + { + if (action.wID == Action.ActionType.ACTION_PLAY) + { + string mmsurl = string.Empty; + int index = 0; + GUIListItem item = facadeview.SelectedListItem; + if (ViewFavorieten) + { + index = FavNames.IndexOf(item.Label); + mmsurl = GetPlayUrl(FavUrls[index]); + } + else + { + index = Names.IndexOf(item.Label); + mmsurl = GetPlayUrl(Urls[index]); + } + + PlayUitzending(mmsurl); + } + + base.OnAction(action); + } + + protected override void OnClicked(int controlId, GUIControl control, Action.ActionType actionType) + { + if (control == btnFavoriet) + { + ShowList(FavNames); + ViewFavorieten = true; + } + if (control == btnTitel) + { + GetNav("titel"); + GetUitzending(NavUrls[btnTitel.SelectedItem]); + } + if (control == btnDag) + { + GetNav("dag"); + GetUitzending(NavUrls[btnDag.SelectedItem]); + } + if (control == btnZender) + { + GetNav("net_zender"); + GetUitzending(NavUrls[btnZender.SelectedItem]); + } + if (control == btnOmroep) + { + GetNav("omroep"); + GetUitzending(NavUrls[btnOmroep.SelectedItem]); + } + if (control == btnRubriek) + { + GetNav("genre"); + GetUitzending(NavUrls[btnRubriek.SelectedItem]); + } + if (control == btnMoetJeZien) + { + ShowMoetJeZien(); + } + if (control == facadeview) + { + if (ViewFavorieten) + { + //SecondScreen.ViewVideo = true; + SecondScreen.Url = FavUrlsSecondScreen[facadeview.SelectedListItemIndex]; + GUIWindowManager.ActivateWindow(6801); + } + else if (ViewMoetJeZien) + { + string mmsurl = string.Empty; + mmsurl = GetPlayUrl(Urls[facadeview.SelectedListItemIndex]); + + PlayUitzending(mmsurl); + } + else + { + SecondScreen.Url = UrlsSecondScreen[facadeview.SelectedListItemIndex]; + GUIWindowManager.ActivateWindow(6801); + } + } + base.OnClicked(controlId, control, actionType); + } + + public override bool OnMessage(GUIMessage message) + { + if(message.Message == GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS || message.Message== GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS_CHANGED) + if (facadeview.SelectedListItemIndex != -1 && ViewMoetJeZien==true) + { + GUIPropertyManager.SetProperty("#votes", Bekeken[facadeview.SelectedListItemIndex]); + GUIPropertyManager.SetProperty("#rating", Waardering[facadeview.SelectedListItemIndex]); + GUIPropertyManager.SetProperty("#plot", Plot[facadeview.SelectedListItemIndex]); + imgList.Dimmed = true; + lblBekeken.Dimmed = true; + } + return base.OnMessage(message); + } + + + protected override void OnPageLoad() + { + ShowGroep(false); + GetNav("titel", btnTitel); + GetNav("dag", btnDag); + GetNav("net_zender", btnZender); + GetNav("omroep", btnOmroep); + GetNav("genre", btnRubriek); + LoadFavorietenXML(); + if (ViewFavorieten ) + { + ViewFavorieten = true; + ShowList(FavNames); + } + else if (Names.Count <= 0 || ViewMoetJeZien == true) + { + ShowMoetJeZien(); + } + else + { + ShowList(Names); + } + base.OnPageLoad(); + } + + protected override void OnPageDestroy(int new_windowId) + { + MainUrlBody = string.Empty; + SaveFavorietenXML(); + FavNames.Clear(); + FavUrls.Clear(); + FavUrlsSecondScreen.Clear(); + base.OnPageDestroy(new_windowId); + } + protected override void OnShowContextMenu() + { + GUIListItem item = facadeview.SelectedListItem; + + GUIDialogMenu menu = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU); + menu.Reset(); + menu.SetHeading("Extra Opties:"); + if (ViewFavorieten == false) + menu.Add("Toevoegen aan favorieten."); + if (ViewFavorieten == true) + menu.Add("Verwijderen van favorieten."); + menu.DoModal(GetID); + if (menu.SelectedId == -1) return; + if (menu.SelectedLabelText == "Toevoegen aan favorieten.") + { + FavNames.Add(Names[facadeview.SelectedListItemIndex]); + FavUrls.Add(Urls[facadeview.SelectedListItemIndex]); + FavUrlsSecondScreen.Add(UrlsSecondScreen[facadeview.SelectedListItemIndex]); + } + if (menu.SelectedLabelText == "Verwijderen van favorieten.") + { + FavNames.RemoveAt(facadeview.SelectedListItemIndex); + FavUrls.RemoveAt(facadeview.SelectedListItemIndex); + FavUrlsSecondScreen.RemoveAt(facadeview.SelectedListItemIndex); + ShowList(FavNames); + } + base.OnShowContextMenu(); + } + + private void GetUitzending(string url) + { + Names.Clear(); + Urls.Clear(); + UrlsSecondScreen.Clear(); + ViewFavorieten = false; + + string result = wc.GetUrl(url, true); + + + int i = 0; + MatchCollection mc = Regex.Matches(result, @"title.\shref=.(?<url>.*?).>(?<name>.*?)<"); + foreach (Match m in mc) + { + Names.Add(m.Groups["name"].Value); + Names[i] = ConvertString(Names[i]); + UrlsSecondScreen.Add(@"http://www.uitzendinggemist.nl"+m.Groups["url"].Value); + UrlsSecondScreen[i] = ConvertString(UrlsSecondScreen[i]); + i++; + } + i = 0; + mc = Regex.Matches(result, @"><a\shref=.(?<url>http://player.*?).target"); + foreach (Match m in mc) + { + Urls.Add(m.Groups["url"].Value); + Urls[i] = ConvertString(Urls[i]); + i++; + } + ShowList(Names); + } + public static string GetPlayUrl(string url) + { + Match m = Regex.Match(wc.GetUrl(url), @"var\smediaurl\s=\s.(http://.*?).;"); + + url = m.Groups[1].Value; + url = url.Replace(".rm", ".asf"); + url = ConvertString(url); + return url; + } + /// <summary> + /// Fills the facadeview with item + /// </summary> + /// <param name="names">labels for the items</param> + private void ShowList(StringCollection names) + { + ViewMoetJeZien = false; + ShowGroep(false); + facadeview.View = GUIFacadeControl.ViewMode.List; + facadeview.Clear(); + foreach (string label in names) + { + GUIListItem item = new GUIListItem(); + item.Label = label; + item.IsFolder = true; + Util.Utils.SetDefaultIcons(item); + facadeview.Add(item); + } + focusFacade(); + } + + /// <summary> + /// Converts a string with wrong characters and replaces those with the good ones + /// </summary> + /// <param name="convertstring">input string</param> + /// <returns>converted string</returns> + public static string ConvertString(string convertstring) + { + convertstring = convertstring.Replace("&", "&"); + convertstring = convertstring.Replace("'", "'"); + convertstring = convertstring.Replace("é", "\xE9"); + convertstring = convertstring.Replace("ö", "\xF6"); + convertstring = convertstring.Replace("ë", "\xEB"); + convertstring = convertstring.Replace("ü", "\xFC"); + convertstring.Trim(); + return convertstring; + } + + /// <summary> + /// Get the options for the letterbuttons in the main screen + /// </summary> + /// <param name="search">letterbutton name fe. titel or genre</param> + private void GetNav(string search) + { + NavNames.Clear(); + NavUrls.Clear(); + if (MainUrlBody == String.Empty) + MainUrlBody = wc.GetUrl("http://www.uitzendinggemist.nl/"); + + Match m = Regex.Match(MainUrlBody, "id=." + search + ".*?</select>", RegexOptions.Singleline); + string temp = m.Value; + + MatchCollection mc = Regex.Matches(temp, @"value=.(?<url>\d*).*?.>(?<name>.*?)<"); + foreach (Match m1 in mc) + { + NavUrls.Add("http://www.uitzendinggemist.nl/index.php/selectie?searchitem=" + search + "&" + search + "=" + m1.Groups["url"].Value); + NavNames.Add(m1.Groups["name"].Value); + } + NavNames.RemoveAt(0); + NavUrls.RemoveAt(0); + } + /// <summary> + /// Get the options for the letterbuttons in the main screen + /// </summary> + /// <param name="search">letterbutton name fe. titel or genre</param> + /// <param name="btn">ButtonControlName that needs to be filled</param> + private void GetNav(string search, GUISelectButtonControl btn) + { + GetNav(search); + + btn.Clear(); + btn.Selected = false; + foreach (string label in NavNames) + { + btn.AddSubItem(label); + } + } + + /// <summary> + /// Error Dialog + /// </summary> + /// <param name="text">error text</param> + private void ShowDialog(string text) + { + GUIDialogOK dialog = new GUIDialogOK(); + dialog.SetHeading("Error"); + dialog.SetLine(1, text); + dialog.DoModal(GetID); + } + + /// <summary> + /// Save the favorites + /// </summary> + private void SaveFavorietenXML() + { + string dir = Directory.GetCurrentDirectory(); + + File.Delete(dir + @"\UitGemistFav.xml"); + using(MediaPortal.Profile.Settings writer = new MediaPortal.Profile.Settings(dir+@"\UitGemistFav.xml",false)) + { + writer.Clear(); + int i = 0; + foreach(string favoriet in FavNames) + { + writer.SetValue(i.ToString(),"ProgrammaNaam", favoriet); + writer.SetValue(i.ToString(),"ProgrammaUrl", FavUrls[i]); + writer.SetValue(i.ToString(), "SecondScreenUrl", FavUrlsSecondScreen[i]); + i++; + } + while (i < FavCount) + { + writer.SetValue(i.ToString(), "ProgrammaNaam", ""); + writer.SetValue(i.ToString(), "PorgrammaUrl", ""); + writer.SetValue(i.ToString(), "SecondScreenUrl", ""); + i++; + } + } + } + + /// <summary> + /// Load the favorites + /// </summary> + private void LoadFavorietenXML() + { + string dir = Directory.GetCurrentDirectory(); + using(MediaPortal.Profile.Settings reader = new MediaPortal.Profile.Settings(dir+@"\UitGemistFav.xml",false)) + { + int i = 0; + while(i!=100) + { + string result = reader.GetValueAsString(i.ToString(), "ProgrammaNaam", ""); + if (result.Equals("")) + { + FavCount = i - 1; + return; + } + else + { + FavNames.Add(reader.GetValue(i.ToString(), "ProgrammaNaam")); + FavNames[i] = ConvertString(FavNames[i]); + FavUrls.Add(reader.GetValue(i.ToString(), "ProgrammaUrl")); + FavUrls[i] = ConvertString(FavUrls[i]); + FavUrlsSecondScreen.Add(reader.GetValue(i.ToString(), "SecondScreenUrl")); + FavUrlsSecondScreen[i] = ConvertString(FavUrlsSecondScreen[i]); + i++; + } + } + } + } + + /// <summary> + /// Shows the first "top 3" items that were on yesteday + /// </summary> + private void ShowMoetJeZien() + { + Names.Clear(); + Urls.Clear(); + UrlsSecondScreen.Clear(); + ImageUrls.Clear(); + Plot.Clear(); + ViewFavorieten = false; + ViewMoetJeZien = true; + + + if (MainUrlBody == String.Empty) + MainUrlBody = wc.GetUrl("http://www.uitzendinggemist.nl/"); + + Match m = Regex.Match(MainUrlBody, @"moet\sje\szien.*moet\sje\szien\s-->", RegexOptions.Singleline); + string result = m.Value; + + int i = 0; + MatchCollection mc = Regex.Matches(result, @"img\ssrc=.(?<image>.*?.png).*?href=.(?<url2>/index.php.*?).\s.*?>(?<name>.*?)<"); + foreach (Match m1 in mc) + { + ImageUrls.Add(@"http://www.uitzendinggemist.nl"+m1.Groups["image"].Value); + ImageUrls[i] = ConvertString(ImageUrls[i]); + Names.Add(m1.Groups["name"].Value); + Names[i] = ConvertString(Names[i]); + UrlsSecondScreen.Add(@"http://www.uitzendinggemist.nl"+m1.Groups["url2"].Value); + UrlsSecondScreen[i] = ConvertString(UrlsSecondScreen[i]); + i++; + } + i = 0; + mc = Regex.Matches(result, @"(http://player.*?).\starget"); + foreach(Match m1 in mc) + { + Urls.Add(m1.Groups[1].Value); + Urls[i] = ConvertString(Urls[i]); + i++; + } + i= 0; + mc = Regex.Matches(result, @"margin:5px..>(.*?)<"); + foreach (Match m1 in mc) + { + Plot.Add(m1.Groups[1].Value); + Plot[i] = ConvertString(Plot[i]); + i++; + } + mc = Regex.Matches(result, @"Waardering:\s(.*?)\s"); + StringCollection temp = new StringCollection(); + temp.Add(mc[0].Groups[1].Value); + temp.Add(mc[5].Groups[1].Value); + temp.Add(mc[10].Groups[1].Value); + foreach (string s in temp) + { + double r = double.Parse(s); + r = r * 2; + r = r / 10; + Waardering.Add(r.ToString()); + } + mc = Regex.Matches(result, @"bekeken\s<span>(.*?)\s"); + foreach (Match m1 in mc) + { + Bekeken.Add(m1.Groups[1].Value); + } + + i = 0; + facadeview.View = GUIFacadeControl.ViewMode.LargeIcons; + facadeview.Clear(); + foreach (string label in Names) + { + GUIListItem item = new GUIListItem(); + item.Label = Names[i]; + item.IconImageBig = wc.DownloadImage(ImageUrls[i]); + facadeview.Add(item); + i++; + } + ShowGroep(true); + focusFacade(); + } + + private void ShowGroep(bool show) + { + imgList.Visible = show; + textBox.Visible = show; + lblBekeken.Visible = show; + } + + private void PlayUitzending(string url) + { + if (g_Player.Play(url)) + { + GUIGraphicsContext.IsFullScreenVideo = true; + GUIWindowManager.ActivateWindow((int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO); + } + } + + private void focusFacade() + { + if (facadeview.Count > 0 && !facadeview.Focus) GUIControl.FocusControl(GUIWindowManager.ActiveWindow, facadeview.GetID); + else if(facadeview.Count == 0) GUIControl.FocusControl(GUIWindowManager.ActiveWindow, btnFavoriet.GetID); + } + + } + + + + +} \ No newline at end of file Property changes on: trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/UitGemist/Properties/AssemblyInfo.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/Properties/AssemblyInfo.cs (rev 0) +++ trunk/plugins/UitzendingGemist/UitGemist/Properties/AssemblyInfo.cs 2007-01-29 21:24:59 UTC (rev 45) @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UitGemist")] +[assembly: AssemblyDescription("A plugin for MediaPortal to view missed emissions")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("UitGemist")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3ea4ca68-336f-42e6-99ec-04750996ebeb")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.2")] +[assembly: AssemblyFileVersion("1.0.0.2")] Property changes on: trunk/plugins/UitzendingGemist/UitGemist/Properties/AssemblyInfo.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs (rev 0) +++ trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs 2007-01-29 21:24:59 UTC (rev 45) @@ -0,0 +1,538 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Text; +using System.Text.RegularExpressions; +using MediaPortal.GUI.Library; +using MediaPortal.Player; +using MediaPortal.Util; +using MediaPortal.Dialogs; +using MediaPortal.Playlists; +using System.Xml; +using System.Xml.XPath; +using System.IO; + +namespace MediaPortal.GUI.UitGemist +{ + public class RTLGemist : GUIWindow + { + #region SkinControlAttributes + [SkinControlAttribute(50)] + protected GUIFacadeControl facadeview = null; + [SkinControlAttribute(2)] + protected GUIButtonControl btnFavoriet = null; + [SkinControlAttribute(3)] + protected GUIButtonControl btnTopTen = null; + [SkinControlAttribute(4)] + protected GUIButtonControl btnPrograms = null; + + #endregion + + #region Variables + private String MainUrlBody = String.Empty; + + private StringCollection Names = new StringCollection(); + private StringCollection Urls = new StringCollection(); + private StringCollection UrlHistory = new StringCollection(); + private List<int> SelectHistory = new List<int>(); + private List<bool> Folders = new List<bool>(); + + private StringCollection FavNames = new StringCollection(); + private StringCollection FavUrls = new StringCollection(); + private int FavCount = 0; + + private bool ViewTopTen = false; + private bool ViewFavorieten = false; + + private static string host = "http://www.rtl.nl"; + private static string xmlroot = "/(vm=/experience/media/)/system/video/menu/"; + + private static string[] broadband = new string[] { "/805.wvx", "/796.wvx", "/364.wvx" }; + private static string[] smallband = new string[] { "/225.wvx", "/224.wvx", "/364.wvx" }; + + public static ShowWaitCursor wc = new ShowWaitCursor(); + + #endregion + + public override int GetID + { + get + { + return 6802; + } + set + { + base.GetID = value; + } + } + + public override bool Init() + { + return Load(GUIGraphicsContext.Skin + @"\RtlGemist.xml"); + } + + public override void OnAction(Action action) + { + if (action.wID == Action.ActionType.ACTION_PLAY) + { + string mmsurl = string.Empty; + int index = 0; + GUIListItem item = facadeview.SelectedListItem; + if (ViewFavorieten) + { + index = FavNames.IndexOf(item.Label); + mmsurl = GetPlayUrl(FavUrls[index]); + } + else + { + index = Names.IndexOf(item.Label); + mmsurl = GetPlayUrl(Urls[index]); + } + + PlayUitzending(mmsurl, 0); + } + else if (action.wID == Action.ActionType.ACTION_PREVIOUS_MENU && UrlHistory.Count > 1) + { + GetUitzending(UrlHistory[UrlHistory.Count - 2]); + UrlHistory.RemoveAt(UrlHistory.Count - 1); + facadeview.SelectedListItemIndex = SelectHistory[SelectHistory.Count - 1]; + SelectHistory.RemoveAt(SelectHistory.Count - 1); + } + else base.OnAction(action); + } + + protected override void OnClicked(int controlId, GUIControl control, Action.ActionType actionType) + { + if (control == btnFavoriet) + { + ShowList(FavNames); + ViewFavorieten = true; + } + if (control == btnPrograms) + { + GetUitzendingen(); + } + if (control == btnTopTen) + { + ShowTopTen(); + } + if (control == facadeview) + { + if (ViewFavorieten) + { + string url = string.Empty; + url = GetPlayUrl(FavUrls[facadeview.SelectedListItemIndex]); + + PlayUitzending(url, 0); + } + else if (ViewTopTen) + { + string url = string.Empty; + url = GetPlayUrl(Urls[facadeview.SelectedListItemIndex]); + + PlayUitzending(url, 0); + } + else + { + //ViewPrograms + //Folder: Get contents + if (facadeview.SelectedListItem.IsFolder) + LoadFolder(Urls[facadeview.SelectedListItemIndex]); + //Stream: Play stream + else + { + string url = string.Empty; + url = GetPlayUrl(Urls[facadeview.SelectedListItemIndex]); + + PlayUitzending(url, 0); + } + } + } + base.OnClicked(controlId, control, actionType); + } + + public override bool OnMessage(GUIMessage message) + { + return base.OnMessage(message); + } + + + protected override void OnPageLoad() + { + LoadFavorietenXML(); + if (ViewFavorieten) + { + ViewFavorieten = true; + ShowList(FavNames); + } + else if (Names.Count <= 0 || ViewTopTen == true) + { + ShowTopTen(); + } + else + { + ShowList(Names); + } + base.OnPageLoad(); + } + + protected override void OnPageDestroy(int new_windowId) + { + MainUrlBody = string.Empty; + SaveFavorietenXML(); + FavNames.Clear(); + FavUrls.Clear(); + base.OnPageDestroy(new_windowId); + } + + protected override void OnShowContextMenu() + { + GUIListItem item = facadeview.SelectedListItem; + if (item.IsFolder) return; + + GUIDialogMenu menu = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU); + menu.Reset(); + menu.SetHeading("Extra Opties:"); + if (ViewFavorieten == false) + menu.Add("Toevoegen aan favorieten."); + if (ViewFavorieten == true) + menu.Add("Verwijderen van favorieten."); + menu.DoModal(GetID); + if (menu.SelectedId == -1) return; + if (menu.SelectedLabelText == "Toevoegen aan favorieten.") + { + FavNames.Add(Names[facadeview.SelectedListItemIndex]); + FavUrls.Add(Urls[facadeview.SelectedListItemIndex]); + } + if (menu.SelectedLabelText == "Verwijderen van favorieten.") + { + FavNames.RemoveAt(facadeview.SelectedListItemIndex); + FavUrls.RemoveAt(facadeview.SelectedListItemIndex); + Folders.Clear(); + ShowList(FavNames); + } + base.OnShowContextMenu(); + } + + private void GetUitzendingen() + { + UrlHistory.Clear(); + SelectHistory.Clear(); + ViewFavorieten = false; + ViewTopTen = false; + + //Root node: http://www.rtl.nl/(vm=/experience/media/)/system/video/menu/videomenu.xml + Log.Info("UitGemist: Getting root XML"); + GetUitzending(host + xmlroot + "videomenu.xml"); + } + + private void LoadFolder(string folder) + { + Log.Info("UitGemist: Loading folder '" + folder + "'"); + string vm = folder.Replace("videomenu.xml",""); + GetUitzending(host + xmlroot.Replace(@"/experience/media/", vm) + folder); + } + + private void GetUitzending(string xmlUrl) + { + if (!UrlHistory.Contains(xmlUrl)) + { + UrlHistory.Add(xmlUrl); + SelectHistory.Add(facadeview.SelectedListItemIndex); + } + Log.Info("UitGemist: Getting XML"); + + Names.Clear(); + Urls.Clear(); + Folders.Clear(); + ViewFavorieten = false; + ViewTopTen = false; + + string result = wc.GetXML(xmlUrl); + try + { + XPathDocument document = new XPathDocument(new System.IO.StringReader(result)); + XPathNavigator navigator = document.CreateNavigator(); + XPathExpression programs = XPathExpression.Compile("//li"); //returns nodeset + + XPathNodeIterator nodes = navigator.Select(programs); + + if (nodes.Count == 0) + { + //Log.Info("UitGemist: No nodes found for url '" + xmlUrl + "'"); + Names.Add("(Geen items aangetroffen)"); + Urls.Add(""); + Folders.Add(false); + } + else + { + int i = 0; + while (nodes.MoveNext()) + { + //Log.Info("UitGemist: Found node '" + nodes.Current.ToString() + "'"); + + Names.Add(nodes.Current.ToString()); + Names[i] = MakeFirstUpper(ConvertString(Names[i])); + + Urls.Add(nodes.Current.GetAttribute("rel", "").ToString()); + Urls[i] = ConvertString(Urls[i]); + i++; + + string nClass = nodes.Current.GetAttribute("class", "").ToString().Trim(); + if (nClass.Equals("folder")) Folders.Add(true); + else Folders.Add(false); + } + } + + ShowList(Names); + } + catch (XmlException e) + { + Log.Info("UitGemist: Invalid xml document '" + xmlUrl + "'. Details follow."); + Log.Info("UitGemist: Line number: " + e.LineNumber + ":"); + Log.Info(e.StackTrace); + } + } + + public static string GetPlayUrl(string url) + { + if (url.Equals("")) return url; + + if(url.Contains(@"/system/video/html/")) + { + //Top ten URL's + url = host + url.Replace(@"/system/video/html/",@"/system/video/wvx/"); + } + else + { + //Other programs URL's + url = host + "/system/video/wvx" + url; + } + + return url; + } + + // RTL Gemist contains some streams with different bitrates. + // Try these when playing the others fail + public static string GetAltPlayUrl(string url) + { + if (url.Equals("")) return url; + + if (url.EndsWith("225.wvx")) url = url.Replace("225.wvx", "224.wvx"); + else if (url.EndsWith("805.wvx")) url = url.Replace("805.wvx", "796.wvx"); + + return url; + } + + /// <summary> + /// Fills the facadeview with item + /// </summary> + /// <param name="names">labels for the items</param> + private void ShowList(StringCollection names) + { + ViewTopTen = false; + facadeview.View = GUIFacadeControl.ViewMode.List; + facadeview.Clear(); + + for (int i = 0;i<names.Count;i++) + { + string label = names[i]; + GUIListItem item = new GUIListItem(); + item.Label = label; + + bool isFolder = true; + if (Folders.Count > 0) isFolder = Folders[i]; + + item.IsFolder = isFolder; + Util.Utils.SetDefaultIcons(item); + facadeview.Add(item); + } + + focusFacade(); + } + + /// <summary> + /// Converts a string with wrong characters and replaces those with the good ones + /// </summary> + /// <param name="convertstring">input string</param> + /// <returns>converted string</returns> + public static string ConvertString(string convertstring) + { + convertstring = convertstring.Replace("&", "&"); + convertstring = convertstring.Replace("'", "'"); + convertstring = convertstring.Replace("é", "\xE9"); + convertstring = convertstring.Replace("ö", "\xF6"); + convertstring = convertstring.Replace("ë", "\xEB"); + convertstring = convertstring.Replace("ü", "\xFC"); + convertstring.Trim(); + return convertstring; + } + + /// <summary> + /// Error Dialog + /// </summary> + /// <param name="text">error text</param> + private void ShowDialog(string text) + { + GUIDialogOK dialog = new GUIDialogOK(); + dialog.SetHeading("Error"); + dialog.SetLine(1, text); + dialog.DoModal(GetID); + } + + /// <summary> + /// Save the favorites + /// </summary> + private void SaveFavorietenXML() + { + string dir = Directory.GetCurrentDirectory(); + + File.Delete(dir + @"\RTLGemistFav.xml"); + + using (MediaPortal.Profile.Settings writer = new MediaPortal.Profile.Settings(dir + @"\RTLGemistFav.xml", false)) + { + writer.Clear(); + int i = 0; + foreach (string favoriet in FavNames) + { + writer.SetValue(i.ToString(), "ProgrammaNaam", favoriet); + writer.SetValue(i.ToString(), "ProgrammaUrl", FavUrls[i]); + i++; + } + while (i < FavCount) + { + writer.SetValue(i.ToString(), "ProgrammaNaam", ""); + writer.SetValue(i.ToString(), "PorgrammaUrl", ""); + i++; + } + } + } + + /// <summary> + /// Load the favorites + /// </summary> + private void LoadFavorietenXML() + { + string dir = Directory.GetCurrentDirectory(); + using (MediaPortal.Profile.Settings reader = new MediaPortal.Profile.Settings(dir + @"\RTLGemistFav.xml", false)) + { + int i = 0; + while (i != 100) + { + string result = reader.GetValueAsString(i.ToString(), "ProgrammaNaam", ""); + if (result.Equals("")) + { + FavCount = i - 1; + return; + } + else + { + FavNames.Add(reader.GetValue(i.ToString(), "ProgrammaNaam")); + FavNames[i] = ConvertString(MakeFirstUpper(FavNames[i])); + FavUrls.Add(reader.GetValue(i.ToString(), "ProgrammaUrl")); + FavUrls[i] = ConvertString(FavUrls[i]); + i++; + } + } + } + } + + /// <summary> + /// Shows the first "top 10" items that were on + /// </summary> + private void ShowTopTen() + { + Names.Clear(); + Urls.Clear(); + ViewFavorieten = false; + ViewTopTen = true; + + string url = host + @"/experience/media/context/index.xml"; + string result = wc.GetXML(url); + try + { + XPathDocument document = new XPathDocument(new System.IO.StringReader(result)); + XPathNavigator navigator = document.CreateNavigator(); + XPathExpression programs = XPathExpression.Compile("//li/a"); //returns nodeset + + XPathNodeIterator nodes = navigator.Select(programs); + + int i = 0; + while (nodes.MoveNext()) + { + //Log.Info("UitGemist: Found node '" + nodes.Current.ToString() + "'"); + + Names.Add(@nodes.Current.ToString()); + Names[i] = MakeFirstUpper(ConvertString(Names[i])); + Urls.Add(@nodes.Current.GetAttribute("href", "").ToString()); + Urls[i] = ConvertString(Urls[i]); + i++; + } + + // Show the results! + + facadeview.View = GUIFacadeControl.ViewMode.List; + facadeview.Clear(); + + for (i = 0; i < Names.Count; i++) + { + string label = Names[i]; + GUIListItem item = new GUIListItem(); + item.Label = label; + item.IsFolder = false; + Util.Utils.SetDefaultIcons(item); + facadeview.Add(item); + } + } + catch (XmlException e) + { + Log.Info("UitGemist: Invalid xml document '" + url + "'. Details follow."); + Log.Info("UitGemist: Line number: " + e.LineNumber + ":"); + Log.Info(e.StackTrace); + } + } + + private void PlayUitzending(string url, int bandIndex) + { + string[] band; + if (ShowWaitCursor.getBroadBand()) band = broadband; + else band = smallband; + + if (url.Equals("") || bandIndex == -1) return; + if (bandIndex >= band.Length) + { + GUIDialogOK dlg = (GUIDialogOK)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_OK); + dlg.SetHeading("Stream not found"); + dlg.SetLine(1, "The requested stream could not be found."); + dlg.DoModal(GUIWindowManager.ActiveWindow); + return; + } + + string streamfile = band[bandIndex]; + + Log.Info("UitGemist: Playing uitzending: '" + url + streamfile + "'"); + + if (g_Player.Play(url + streamfile)) + { + GUIGraphicsContext.IsFullScreenVideo = true; + GUIWindowManager.ActivateWindow((int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO); + } + else PlayUitzending(url, bandIndex+1); + } + + private string MakeFirstUpper(string name) + { + if (name.Length <= 1) return name.ToUpper(); + Char[] letters = name.ToCharArray(); + letters[0] = Char.ToUpper(letters[0]); + return new string(letters); + } + + private void focusFacade() + { + if (facadeview.Count > 0 && !facadeview.Focus) GUIControl.FocusControl(GUIWindowManager.ActiveWindow, facadeview.GetID); + else if (facadeview.Count == 0) GUIControl.FocusControl(GUIWindowManager.ActiveWindow, btnFavoriet.GetID); + } + + } +} \ No newline at end of file Property changes on: trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/UitzendingGemist/UitGemist/SecondScreen.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/SecondScreen.cs (rev 0) +++ trunk/plugins/UitzendingGemist/UitGemist/SecondScreen.cs 2007-01-29 21:24:59 UTC (rev 45) @@ -0,0 +1,211 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Text; +using System.Text.RegularExpressions; +using MediaPortal.GUI.Library; +using MediaPortal.Player; +using MediaPortal.Dialogs; +using MediaPortal.Playlists; + +namespace MediaPortal.GUI.UitGemist +{ + public class SecondScreen: GUIWindow + { + //#region SkinControlAttributes + [SkinControlAttribute(10)] + protected GUIListControl listview = null; + [SkinControlAttribute(3)] + protected GUIImage image = null; + //[SkinControlAttribute(3)] + //protected GUIImage imgPrgramma = null; + //[SkinControlAttribute(4)] + //protected GUILabelControl lblGenre = null; + //[SkinControlAttribute(5)] + //protected GUILabelControl lblOmroep = null; + //[SkinControlAttribute(6)] + //protected GUISelectButtonControl btnRubriek = null; + //#endregion + + public static string Url = string.Empty; + public static bool ViewVideo = false; + private string imageurl = string.Empty; + private StringCollection Datum = new StringCollection(); + private StringCollection Omschrijving = new StringCollection(); + private StringCollection Views = new StringCollection(); + private StringCollection Waardering = new StringCollection(); + private StringCollection StreamUrl = new StringCollection(); + + public override int GetID + { + get + { + return 6801; + } + set + { + base.GetID = value; + } + } + + public override bool Init() + { + return Load(GUIGraphicsContext.Skin + @"\UitGemist2.xml"); + } + + protected override void OnPageLoad() + { + if (ViewVideo) + { + NLGemist.wc.GetUrl("http://www.uitzendinggemist.nl"); + GetInfo(Url); + ViewVideo = false; + } + else + { + GetInfo(Url); + } + Showlist(); + base.OnPageLoad(); + } + + protected override void OnPageDestroy(int new_windowId) + { + image.FileName = GUIGraphicsContext.Skin + @"\media\background.png"; + base.OnPageDestroy(new_windowId); + } + + protected override void OnClicked(int controlId, GUIControl control, Action.ActionType actionType) + { + if (control == listview) + { + string mmsurl = string.Empty; + mmsurl = NLGemist.GetPlayUrl(StreamUrl[listview.SelectedListItemIndex]); + GUIGraphicsContext.IsFullScreenVideo = true; + GUIWindowManager.ActivateWindow((int)GUIWindow.Windo... [truncated message content] |
From: <moi...@us...> - 2007-03-23 15:15:20
|
Revision: 214 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=214&view=rev Author: moiristo Date: 2007-03-23 08:15:17 -0700 (Fri, 23 Mar 2007) Log Message: ----------- Version 0.8: Lists all emissions, logo's, changed plugin name Modified Paths: -------------- trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs trunk/plugins/UitzendingGemist/UitGemist/UitGemist.csproj trunk/plugins/UitzendingGemist/UitGemist/UitGemistPlugin.cs trunk/plugins/UitzendingGemist/UitGemist.suo Added Paths: ----------- trunk/plugins/UitzendingGemist/UitGemist/NLSecondScreen.cs trunk/plugins/UitzendingGemist/UitGemist/TienGemist.cs trunk/plugins/UitzendingGemist/UitGemist/TienSecondScreen.cs trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml.bak trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml.bak trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml.bak trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml.bak Removed Paths: ------------- trunk/plugins/UitzendingGemist/UitGemist/SecondScreen.cs Modified: trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs 2007-03-23 13:29:45 UTC (rev 213) +++ trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs 2007-03-23 15:15:17 UTC (rev 214) @@ -9,6 +9,7 @@ using MediaPortal.Dialogs; using MediaPortal.Playlists; using System.Xml; +using System.Xml.XPath; using System.IO; namespace MediaPortal.GUI.UitGemist @@ -42,7 +43,7 @@ #endregion #region Variables - private String MainUrlBody = String.Empty; + private String MainUrlBody = String.Empty; private StringCollection Names = new StringCollection(); private StringCollection Urls = new StringCollection(); @@ -64,6 +65,7 @@ private bool ViewMoetJeZien = false; public static ShowWaitCursor wc = new ShowWaitCursor(); + public static String xmlFile = @"http://player.omroep.nl/xml/metaplayer.xml.php"; #endregion public override int GetID @@ -148,7 +150,7 @@ if (ViewFavorieten) { //SecondScreen.ViewVideo = true; - SecondScreen.Url = FavUrlsSecondScreen[facadeview.SelectedListItemIndex]; + NLSecondScreen.Url = FavUrlsSecondScreen[facadeview.SelectedListItemIndex]; GUIWindowManager.ActivateWindow(6801); } else if (ViewMoetJeZien) @@ -160,7 +162,7 @@ } else { - SecondScreen.Url = UrlsSecondScreen[facadeview.SelectedListItemIndex]; + NLSecondScreen.Url = UrlsSecondScreen[facadeview.SelectedListItemIndex]; GUIWindowManager.ActivateWindow(6801); } } @@ -278,18 +280,38 @@ public static string GetPlayUrl(string url) { - string page = wc.GetUrl(url, true); - Log.Debug(""+page.Length); - Regex r = new Regex(@"src=.(?<url>.*?\.asf)", RegexOptions.Multiline); + string result = ""; + string queryString = url.Substring(url.IndexOf('?')); + url = xmlFile + queryString; - Match m = r.Match(page); - Log.Debug(""+m.Success); - url = m.Groups[1].Value; - Log.Debug("url length:" + url.Length); - Log.Debug(url); - url = url.Replace(".rm", ".asf"); - url = ConvertString(url); - return url; + string xml = wc.GetXML(url); + //Regex r = new Regex(@"src=.(?<url>.*?\.asf)", RegexOptions.Multiline); + + //Match m = r.Match(page); + //Log.Debug(""+m.Success); + //url = m.Groups[1].Value; + //Log.Debug("url length:" + url.Length); + //Log.Debug(url); + //url = url.Replace(".rm", ".asf"); + //url = ConvertString(url); + try + { + XPathDocument document = new XPathDocument(new System.IO.StringReader(xml)); + XPathNavigator navigator = document.CreateNavigator(); + XPathExpression stream; + if(ShowWaitCursor.getBroadBand()) stream = XPathExpression.Compile("//streams/stream[@compressie_kwaliteit='bb' and @compressie_formaat='wmv']"); //returns node + else stream = XPathExpression.Compile("//streams/stream[@compressie_kwaliteit='sb' and @compressie_formaat='wmv']"); //returns node + + XPathNavigator node = navigator.SelectSingleNode(stream); + result = node.Value; + } + catch (XmlException e) + { + Log.Info("UitGemist: XML error for url '" + url + "'. Details follow."); + Log.Info("UitGemist: Line number: " + e.LineNumber + ":"); + Log.Info(e.StackTrace); + } + return result; } /// <summary> /// Fills the facadeview with item Added: trunk/plugins/UitzendingGemist/UitGemist/NLSecondScreen.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/NLSecondScreen.cs (rev 0) +++ trunk/plugins/UitzendingGemist/UitGemist/NLSecondScreen.cs 2007-03-23 15:15:17 UTC (rev 214) @@ -0,0 +1,227 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Text; +using System.Text.RegularExpressions; +using MediaPortal.GUI.Library; +using MediaPortal.Player; +using MediaPortal.Dialogs; +using MediaPortal.Playlists; + +namespace MediaPortal.GUI.UitGemist +{ + public class NLSecondScreen: GUIWindow + { + //#region SkinControlAttributes + [SkinControlAttribute(10)] + protected GUIListControl listview = null; + [SkinControlAttribute(3)] + protected GUIImage image = null; + //[SkinControlAttribute(3)] + //protected GUIImage imgPrgramma = null; + //[SkinControlAttribute(4)] + //protected GUILabelControl lblGenre = null; + //[SkinControlAttribute(5)] + //protected GUILabelControl lblOmroep = null; + //[SkinControlAttribute(6)] + //protected GUISelectButtonControl btnRubriek = null; + //#endregion + + public static string Url = string.Empty; + public static bool ViewVideo = false; + private string imageurl = string.Empty; + private StringCollection Datum = new StringCollection(); + private StringCollection Omschrijving = new StringCollection(); + private StringCollection Views = new StringCollection(); + private StringCollection Waardering = new StringCollection(); + private StringCollection StreamUrl = new StringCollection(); + + public override int GetID + { + get + { + return 6801; + } + set + { + base.GetID = value; + } + } + + public override bool Init() + { + return Load(GUIGraphicsContext.Skin + @"\UitGemist2.xml"); + } + + protected override void OnPageLoad() + { + if (ViewVideo) + { + NLGemist.wc.GetUrl("http://www.uitzendinggemist.nl"); + GetInfo(Url); + ViewVideo = false; + } + else + { + GetInfo(Url); + } + Showlist(); + base.OnPageLoad(); + } + + protected override void OnPageDestroy(int new_windowId) + { + image.FileName = GUIGraphicsContext.Skin + @"\media\background.png"; + base.OnPageDestroy(new_windowId); + } + + protected override void OnClicked(int controlId, GUIControl control, Action.ActionType actionType) + { + if (control == listview) + { + string mmsurl = string.Empty; + mmsurl = NLGemist.GetPlayUrl(StreamUrl[listview.SelectedListItemIndex]); + if (g_Player.Play(mmsurl)) + { + GUIGraphicsContext.IsFullScreenVideo = true; + GUIWindowManager.ActivateWindow((int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO); + ViewVideo = true; + } + } + base.OnClicked(controlId, control, actionType); + } + + public override bool OnMessage(GUIMessage message) + { + if (message.Message == GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS || message.Message == GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS_CHANGED) + { + if (listview.SelectedListItemIndex != -1) + { + GUIPropertyManager.SetProperty("#rating", Waardering[listview.SelectedListItemIndex]); + GUIPropertyManager.SetProperty("#plotoutline", Omschrijving[listview.SelectedListItemIndex]); + } + } + return base.OnMessage(message); + } + + private void GetInfo(string url) + { + Datum.Clear(); + Views.Clear(); + Omschrijving.Clear(); + Waardering.Clear(); + StreamUrl.Clear(); + + string result = NLGemist.wc.GetUrl(url, true); + result = NLGemist.ConvertString(result); + + //get image + Match m = Regex.Match(result, @"<img\ssrc=.(http://www.omroep.nl/u/.*?.png)"); + imageurl = m.Groups[1].Value; + image.FileName = NLGemist.wc.DownloadImage(imageurl); + + //get Programma-Naam + m = Regex.Match(result, @"<title>(.*?)</title>"); + GUIPropertyManager.SetProperty("#title", m.Groups[1].Value); + + //get Programma-omschrijving + m = Regex.Match(result, @"<p\sstyle=.margin-top.5px..>(.*?)<", RegexOptions.Singleline); + GUIPropertyManager.SetProperty("#plot", m.Groups[1].Value); + + //get Genre + m = Regex.Match(result, @"genre</b>.*?title=.(.*?).>", RegexOptions.Singleline); + GUIPropertyManager.SetProperty("#genre", m.Groups[1].Value); + + // get Omproep + m = Regex.Match(result, @"omroep</b>.*?title=.(.*?).>", RegexOptions.Singleline); + GUIPropertyManager.SetProperty("#credits", m.Groups[1].Value); + + // get Afleveringen + bool moreEmissions = false; + GetAfleveringen(result, out moreEmissions); + + if (moreEmissions) + { + string series2url = url.Replace(@"/index.php/serie", @"/index.php/serie2"); + GetAfleveringen(NLGemist.wc.GetUrl(series2url, true), out moreEmissions); + } + } + + private void GetAfleveringen(string page, out bool hasMoreEmissions) + { + Match m = Regex.Match(page, @"tbody\sid=.afleveringen.>(.*?)</tbody>", RegexOptions.Singleline); + if (m.Success) + { + string afleveringen = m.Groups[1].Value; + + //get datum + MatchCollection mc = Regex.Matches(afleveringen, @"(\d{2}-\d{2}-\d{4})</td>"); + foreach (Match m1 in mc) + { + Datum.Add(m1.Groups[1].Value); + } + + //get omschrijving + mc = Regex.Matches(afleveringen, @"(.*?).<a\shref=./index"); + foreach (Match m1 in mc) + { + Omschrijving.Add(m1.Groups[1].Value); + } + + //get views + mc = Regex.Matches(afleveringen, @"right.>(\d.*)</td>"); + foreach (Match m1 in mc) + { + Views.Add(m1.Groups[1].Value); + } + + //get waardering + mc = Regex.Matches(afleveringen, @">(\d\.\d)<"); + foreach (Match m1 in mc) + { + double r = double.Parse(m1.Groups[1].Value); + r = r * 2; + r = r / 10; + Waardering.Add(r.ToString()); + } + + //get stream-url + mc = Regex.Matches(afleveringen, @"(http://player.omroep.nl/.*?).\s"); + foreach (Match m1 in mc) + { + StreamUrl.Add(m1.Groups[1].Value); + } + } + + m = Regex.Match(page, @"meer afleveringen", RegexOptions.Singleline); + if (m.Success) hasMoreEmissions = true; + else hasMoreEmissions = false; + } + + private void Showlist() + { + listview.Clear(); + int i = 0; + while(i<Datum.Count) + { + GUIListItem item = new GUIListItem(); + item.IconImage = "defaultVideo.png"; + item.Label = Datum[i]; + item.Label2 = "Views: "+Views[i]; + listview.Add(item); + i++; + } + } + + + + + + + + + + + + } +} Deleted: trunk/plugins/UitzendingGemist/UitGemist/SecondScreen.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/SecondScreen.cs 2007-03-23 13:29:45 UTC (rev 213) +++ trunk/plugins/UitzendingGemist/UitGemist/SecondScreen.cs 2007-03-23 15:15:17 UTC (rev 214) @@ -1,211 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.Text; -using System.Text.RegularExpressions; -using MediaPortal.GUI.Library; -using MediaPortal.Player; -using MediaPortal.Dialogs; -using MediaPortal.Playlists; - -namespace MediaPortal.GUI.UitGemist -{ - public class SecondScreen: GUIWindow - { - //#region SkinControlAttributes - [SkinControlAttribute(10)] - protected GUIListControl listview = null; - [SkinControlAttribute(3)] - protected GUIImage image = null; - //[SkinControlAttribute(3)] - //protected GUIImage imgPrgramma = null; - //[SkinControlAttribute(4)] - //protected GUILabelControl lblGenre = null; - //[SkinControlAttribute(5)] - //protected GUILabelControl lblOmroep = null; - //[SkinControlAttribute(6)] - //protected GUISelectButtonControl btnRubriek = null; - //#endregion - - public static string Url = string.Empty; - public static bool ViewVideo = false; - private string imageurl = string.Empty; - private StringCollection Datum = new StringCollection(); - private StringCollection Omschrijving = new StringCollection(); - private StringCollection Views = new StringCollection(); - private StringCollection Waardering = new StringCollection(); - private StringCollection StreamUrl = new StringCollection(); - - public override int GetID - { - get - { - return 6801; - } - set - { - base.GetID = value; - } - } - - public override bool Init() - { - return Load(GUIGraphicsContext.Skin + @"\UitGemist2.xml"); - } - - protected override void OnPageLoad() - { - if (ViewVideo) - { - NLGemist.wc.GetUrl("http://www.uitzendinggemist.nl"); - GetInfo(Url); - ViewVideo = false; - } - else - { - GetInfo(Url); - } - Showlist(); - base.OnPageLoad(); - } - - protected override void OnPageDestroy(int new_windowId) - { - image.FileName = GUIGraphicsContext.Skin + @"\media\background.png"; - base.OnPageDestroy(new_windowId); - } - - protected override void OnClicked(int controlId, GUIControl control, Action.ActionType actionType) - { - if (control == listview) - { - string mmsurl = string.Empty; - mmsurl = NLGemist.GetPlayUrl(StreamUrl[listview.SelectedListItemIndex]); - GUIGraphicsContext.IsFullScreenVideo = true; - GUIWindowManager.ActivateWindow((int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO); - g_Player.FullScreen = true; - ViewVideo = true; - g_Player.Play(mmsurl); - } - base.OnClicked(controlId, control, actionType); - } - - public override bool OnMessage(GUIMessage message) - { - if (message.Message == GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS || message.Message == GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS_CHANGED) - { - if (listview.SelectedListItemIndex != -1) - { - GUIPropertyManager.SetProperty("#rating", Waardering[listview.SelectedListItemIndex]); - GUIPropertyManager.SetProperty("#plotoutline", Omschrijving[listview.SelectedListItemIndex]); - } - } - return base.OnMessage(message); - } - - private void GetInfo(string url) - { - Datum.Clear(); - Views.Clear(); - Omschrijving.Clear(); - Waardering.Clear(); - StreamUrl.Clear(); - - string result = NLGemist.wc.GetUrl(url, true); - result = NLGemist.ConvertString(result); - - //get image - Match m = Regex.Match(result, @"<img\ssrc=.(http://gids.omroep.nl.*?.png)"); - imageurl = m.Groups[1].Value; - image.FileName = NLGemist.wc.DownloadImage(imageurl); - - //get Programma-Naam - m = Regex.Match(result, @"<title>(.*?)</title>"); - GUIPropertyManager.SetProperty("#title", m.Groups[1].Value); - - //get Programma-omschrijving - m = Regex.Match(result, @"<p\sstyle=.margin-top.5px..>(.*?)<", RegexOptions.Singleline); - GUIPropertyManager.SetProperty("#plot", m.Groups[1].Value); - - //get Genre - m = Regex.Match(result, @"genre</b>.*?title=.(.*?).>", RegexOptions.Singleline); - GUIPropertyManager.SetProperty("#genre", m.Groups[1].Value); - - // get Omproep - m = Regex.Match(result, @"omroep</b>.*?title=.(.*?).>", RegexOptions.Singleline); - GUIPropertyManager.SetProperty("#credits", m.Groups[1].Value); - - // get Afleveringen - m = Regex.Match(result, @"tbody\sid=.afleveringen.>(.*?)</tbody>", RegexOptions.Singleline); - if (m.Success) - { - string afleveringen = m.Groups[1].Value; - - //get datum - MatchCollection mc = Regex.Matches(afleveringen, @"(\d{2}-\d{2}-\d{4})</td>"); - foreach (Match m1 in mc) - { - Datum.Add(m1.Groups[1].Value); - } - - //get omschrijving - mc = Regex.Matches(afleveringen, @"(.*?).<a\shref=./index"); - foreach (Match m1 in mc) - { - Omschrijving.Add(m1.Groups[1].Value); - } - - //get views - mc = Regex.Matches(afleveringen, @"right.>(\d.*)</td>"); - foreach (Match m1 in mc) - { - Views.Add(m1.Groups[1].Value); - } - - //get waardering - mc = Regex.Matches(afleveringen, @">(\d\.\d)<"); - foreach (Match m1 in mc) - { - double r = double.Parse(m1.Groups[1].Value); - r = r * 2; - r = r / 10; - Waardering.Add(r.ToString()); - } - - //get stream-url - mc = Regex.Matches(afleveringen, @"(http://player.omroep.nl/.*?).\s"); - foreach (Match m1 in mc) - { - StreamUrl.Add(m1.Groups[1].Value); - } - - } - } - - private void Showlist() - { - listview.Clear(); - int i = 0; - while(i<Datum.Count) - { - GUIListItem item = new GUIListItem(); - item.IconImage = "defaultVideo.png"; - item.Label = Datum[i]; - item.Label2 = "Views: "+Views[i]; - listview.Add(item); - i++; - } - } - - - - - - - - - - - - } -} Modified: trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs 2007-03-23 13:29:45 UTC (rev 213) +++ trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs 2007-03-23 15:15:17 UTC (rev 214) @@ -137,12 +137,12 @@ secondRequest.ContentType = postType; secondRequest.CookieContainer = new CookieContainer(); - Cookie c = new Cookie(); - c.Domain = "player.omroep.nl"; - c.Name = "player_instellingen"; - c.Value = "formaat:wmv&kwaliteit:bb"; + //Cookie c = new Cookie(); + //c.Domain = "player.omroep.nl"; + //c.Name = "player_instellingen"; + //c.Value = "formaat:wmv&kwaliteit:bb"; - secondRequest.CookieContainer.Add(c); + //secondRequest.CookieContainer.Add(c); CookieCollection cookies = firstResponse.Cookies; secondRequest.CookieContainer.Add(cookies); Added: trunk/plugins/UitzendingGemist/UitGemist/TienGemist.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/TienGemist.cs (rev 0) +++ trunk/plugins/UitzendingGemist/UitGemist/TienGemist.cs 2007-03-23 15:15:17 UTC (rev 214) @@ -0,0 +1,395 @@ +using System; +using System.Collections; +using System.Collections.Specialized; +using System.Text; +using System.Text.RegularExpressions; +using MediaPortal.GUI.Library; +using MediaPortal.Player; +using MediaPortal.Util; +using MediaPortal.Dialogs; +using MediaPortal.Playlists; +using System.Xml; +using System.Xml.XPath; +using System.IO; + +namespace MediaPortal.GUI.UitGemist +{ + struct Program + { + public string name; + public string ep; + public string date; + public string link; + } + + public class TienGemist : GUIWindow + { + #region SkinControlAttributes + [SkinControlAttribute(50)] + protected GUIFacadeControl facadeview = null; + [SkinControlAttribute(2)] + protected GUIButtonControl btnFavoriet = null; + [SkinControlAttribute(3)] + protected GUIButtonControl btnTopFifty = null; + [SkinControlAttribute(4)] + protected GUIButtonControl btnPrograms = null; + + + #endregion + + #region Variables + private String MainUrlBody = String.Empty; + + private ArrayList progs = new ArrayList(); + private ArrayList favs = new ArrayList(); + private int FavCount = 0; + + private bool ViewFavorieten = false; + private bool ViewTopFifty = false; + + public static ShowWaitCursor wc = new ShowWaitCursor(); + public static String rootUrl = @"http://www.tien.tv"; + public static String rootPage = rootUrl + @"/web/show/id=54585/langid=43"; + #endregion + + public override int GetID + { + get + { + return 6803; + } + set + { + base.GetID = value; + } + } + + public override bool Init() + { + return Load(GUIGraphicsContext.Skin + @"\TienGemist.xml"); + } + + public override void OnAction(Action action) + { + if (action.wID == Action.ActionType.ACTION_PLAY) + { + string mmsurl = string.Empty; + int index = facadeview.SelectedListItemIndex; + if (ViewFavorieten) + { + mmsurl = GetPlayUrl(((Program) favs[index]).link); + } + else + { + mmsurl = GetPlayUrl(((Program)progs[index]).link); + } + + PlayUitzending(mmsurl); + } + + base.OnAction(action); + } + + protected override void OnClicked(int controlId, GUIControl control, Action.ActionType actionType) + { + if (control == btnFavoriet) + { + ShowList(favs); + ViewFavorieten = true; + } + if (control == btnTopFifty) + { + ShowTopFifty(); + } + if (control == btnPrograms) + { + GetUitzendingen(); + } + if (control == facadeview) + { + TienSecondScreen.Url = ((Program) favs[facadeview.SelectedListItemIndex]).link; + GUIWindowManager.ActivateWindow(6804); + } + base.OnClicked(controlId, control, actionType); + } + + public override bool OnMessage(GUIMessage message) + { + return base.OnMessage(message); + } + + + protected override void OnPageLoad() + { + LoadFavorietenXML(); + if (ViewFavorieten) + { + ViewFavorieten = true; + ShowList(favs); + } + else if (progs.Count <= 0 || ViewTopFifty == true) + { + ShowTopFifty(); + } + else + { + ShowList(progs); + } + base.OnPageLoad(); + } + + protected override void OnPageDestroy(int new_windowId) + { + MainUrlBody = string.Empty; + SaveFavorietenXML(); + favs.Clear(); + base.OnPageDestroy(new_windowId); + } + + protected override void OnShowContextMenu() + { + if (ViewFavorieten) return; + + GUIListItem item = facadeview.SelectedListItem; + + GUIDialogMenu menu = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU); + menu.Reset(); + menu.SetHeading("Extra Opties:"); + if (ViewFavorieten == false) + menu.Add("Toevoegen aan favorieten."); + if (ViewFavorieten == true) + menu.Add("Verwijderen van favorieten."); + menu.DoModal(GetID); + if (menu.SelectedId == -1) return; + if (menu.SelectedLabelText == "Toevoegen aan favorieten.") + { + favs.Add(progs[facadeview.SelectedListItemIndex]); + } + if (menu.SelectedLabelText == "Verwijderen van favorieten.") + { + favs.RemoveAt(facadeview.SelectedListItemIndex); + ShowList(favs); + } + base.OnShowContextMenu(); + } + + private void GetUitzendingen() + { + progs.Clear(); + ViewFavorieten = false; + + string result = wc.GetXML(rootPage); + try + { + XPathDocument document = new XPathDocument(new System.IO.StringReader(result)); + XPathNavigator navigator = document.CreateNavigator(); + XPathExpression programs = XPathExpression.Compile("//select[name='selector_2']//option"); //returns nodeset with rows per program + + + XPathNodeIterator nodes = navigator.Select(programs); + while (nodes.MoveNext()) + { + XPathNavigator node = nodes.Current; + Program p = new Program(); + p.name = node.SelectSingleNode(".").Value; + p.link = node.SelectSingleNode("./@value").Value; + progs.Add(p); + } + } + catch (XmlException e) + { + Log.Info("UitGemist: Invalid xml document '" + rootPage + "'. Details follow."); + Log.Info("UitGemist: Line number: " + e.LineNumber + ":"); + Log.Info(e.StackTrace); + } + + ShowList(progs); + } + + private void GetUitzending(string url) + { + progs.Clear(); + ViewFavorieten = false; + + string result = wc.GetXML(url); + try + { + XPathDocument document = new XPathDocument(new System.IO.StringReader(result)); + XPathNavigator navigator = document.CreateNavigator(); + XPathExpression programs = XPathExpression.Compile("//table[class='Program']//tr"); //returns nodeset with rows per program + + + XPathNodeIterator nodes = navigator.Select(programs); + while (nodes.MoveNext()) + { + XPathNavigator node = nodes.Current; + Program p = new Program(); + p.name = node.SelectSingleNode("./td[1]/h1").Value; + p.ep = node.SelectSingleNode("./td[1]/h2").Value; + p.date = node.SelectSingleNode("./td[2]/h2").Value; + p.link = node.SelectSingleNode("./td[2]/a/@href").Value; + progs.Add(p); + } + } + catch (XmlException e) + { + Log.Info("UitGemist: Invalid xml document '" + url + "'. Details follow."); + Log.Info("UitGemist: Line number: " + e.LineNumber + ":"); + Log.Info(e.StackTrace); + } + + ShowList(progs); + } + + public static string GetPlayUrl(string url) + { + string page = wc.GetUrl(url); + Regex r = new Regex(@"var url =.(?<url>.*?);", RegexOptions.Multiline); + + Match m = r.Match(page); + Log.Debug("" + m.Success); + url = m.Groups[1].Value; + Log.Debug("url length:" + url.Length); + Log.Debug(url); + url = ConvertString(url); + + return url; + } + /// <summary> + /// Fills the facadeview with item + /// </summary> + /// <param name="names">labels for the items</param> + private void ShowList(ArrayList progs) + { + ViewTopFifty = false; + facadeview.View = GUIFacadeControl.ViewMode.List; + facadeview.Clear(); + foreach (Object o in progs) + { + Program p = (Program)o; + GUIListItem item = new GUIListItem(); + item.Label = p.name; + if(p.ep != null) item.Label2 = p.ep; + if(p.date != null) item.Label3 = p.date; + item.IsFolder = true; + Util.Utils.SetDefaultIcons(item); + facadeview.Add(item); + } + focusFacade(); + } + + /// <summary> + /// Converts a string with wrong characters and replaces those with the good ones + /// </summary> + /// <param name="convertstring">input string</param> + /// <returns>converted string</returns> + public static string ConvertString(string convertstring) + { + convertstring = convertstring.Replace("&", "&"); + convertstring = convertstring.Replace("'", "'"); + convertstring = convertstring.Replace("é", "\xE9"); + convertstring = convertstring.Replace("ö", "\xF6"); + convertstring = convertstring.Replace("ë", "\xEB"); + convertstring = convertstring.Replace("ü", "\xFC"); + convertstring.Trim(); + return convertstring; + } + + /// <summary> + /// Error Dialog + /// </summary> + /// <param name="text">error text</param> + private void ShowDialog(string text) + { + GUIDialogOK dialog = new GUIDialogOK(); + dialog.SetHeading("Error"); + dialog.SetLine(1, text); + dialog.DoModal(GetID); + } + + /// <summary> + /// Save the favorites + /// </summary> + private void SaveFavorietenXML() + { + string dir = Directory.GetCurrentDirectory(); + + File.Delete(dir + @"\UitGemistFav.xml"); + using (MediaPortal.Profile.Settings writer = new MediaPortal.Profile.Settings(dir + @"\UitGemistFav.xml", false)) + { + writer.Clear(); + int i = 0; + foreach (Object o in favs) + { + Program p = (Program)o; + writer.SetValue(i.ToString(), "ProgrammaNaam", p.name); + writer.SetValue(i.ToString(), "ProgrammaUrl", p.link); + i++; + } + while (i < FavCount) + { + writer.SetValue(i.ToString(), "ProgrammaNaam", ""); + writer.SetValue(i.ToString(), "PorgrammaUrl", ""); + i++; + } + } + } + + /// <summary> + /// Load the favorites + /// </summary> + private void LoadFavorietenXML() + { + string dir = Directory.GetCurrentDirectory(); + using (MediaPortal.Profile.Settings reader = new MediaPortal.Profile.Settings(dir + @"\UitGemistFav.xml", false)) + { + int i = 0; + while (i != 100) + { + string result = reader.GetValueAsString(i.ToString(), "ProgrammaNaam", ""); + if (result.Equals("")) + { + FavCount = i - 1; + return; + } + else + { + Program p = new Program(); + p.name = reader.GetValue(i.ToString(), "ProgrammaNaam"); + p.link = reader.GetValue(i.ToString(), "ProgrammaUrl"); + favs.Add(p); + i++; + } + } + } + } + + /// <summary> + /// Shows the last 50 added items + /// </summary> + private void ShowTopFifty() + { + GetUitzending(rootPage); + } + + private void PlayUitzending(string url) + { + if (g_Player.Play(url)) + { + GUIGraphicsContext.IsFullScreenVideo = true; + GUIWindowManager.ActivateWindow((int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO); + } + } + + private void focusFacade() + { + if (facadeview.Count > 0 && !facadeview.Focus) GUIControl.FocusControl(GUIWindowManager.ActiveWindow, facadeview.GetID); + else if (facadeview.Count == 0) GUIControl.FocusControl(GUIWindowManager.ActiveWindow, btnFavoriet.GetID); + } + + } + + + + +} \ No newline at end of file Added: trunk/plugins/UitzendingGemist/UitGemist/TienSecondScreen.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/TienSecondScreen.cs (rev 0) +++ trunk/plugins/UitzendingGemist/UitGemist/TienSecondScreen.cs 2007-03-23 15:15:17 UTC (rev 214) @@ -0,0 +1,211 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Text; +using System.Text.RegularExpressions; +using MediaPortal.GUI.Library; +using MediaPortal.Player; +using MediaPortal.Dialogs; +using MediaPortal.Playlists; + +namespace MediaPortal.GUI.UitGemist +{ + public class TienSecondScreen: GUIWindow + { + //#region SkinControlAttributes + [SkinControlAttribute(10)] + protected GUIListControl listview = null; + [SkinControlAttribute(3)] + protected GUIImage image = null; + //[SkinControlAttribute(3)] + //protected GUIImage imgPrgramma = null; + //[SkinControlAttribute(4)] + //protected GUILabelControl lblGenre = null; + //[SkinControlAttribute(5)] + //protected GUILabelControl lblOmroep = null; + //[SkinControlAttribute(6)] + //protected GUISelectButtonControl btnRubriek = null; + //#endregion + + public static string Url = string.Empty; + public static bool ViewVideo = false; + private string imageurl = string.Empty; + private StringCollection Datum = new StringCollection(); + private StringCollection Omschrijving = new StringCollection(); + private StringCollection Views = new StringCollection(); + private StringCollection Waardering = new StringCollection(); + private StringCollection StreamUrl = new StringCollection(); + + public override int GetID + { + get + { + return 6804; + } + set + { + base.GetID = value; + } + } + + public override bool Init() + { + return Load(GUIGraphicsContext.Skin + @"\TienGemist2.xml"); + } + + protected override void OnPageLoad() + { + if (ViewVideo) + { + NLGemist.wc.GetUrl("http://www.uitzendinggemist.nl"); + GetInfo(Url); + ViewVideo = false; + } + else + { + GetInfo(Url); + } + Showlist(); + base.OnPageLoad(); + } + + protected override void OnPageDestroy(int new_windowId) + { + image.FileName = GUIGraphicsContext.Skin + @"\media\background.png"; + base.OnPageDestroy(new_windowId); + } + + protected override void OnClicked(int controlId, GUIControl control, Action.ActionType actionType) + { + if (control == listview) + { + string mmsurl = string.Empty; + mmsurl = NLGemist.GetPlayUrl(StreamUrl[listview.SelectedListItemIndex]); + GUIGraphicsContext.IsFullScreenVideo = true; + GUIWindowManager.ActivateWindow((int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO); + g_Player.FullScreen = true; + ViewVideo = true; + g_Player.Play(mmsurl); + } + base.OnClicked(controlId, control, actionType); + } + + public override bool OnMessage(GUIMessage message) + { + if (message.Message == GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS || message.Message == GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS_CHANGED) + { + if (listview.SelectedListItemIndex != -1) + { + GUIPropertyManager.SetProperty("#rating", Waardering[listview.SelectedListItemIndex]); + GUIPropertyManager.SetProperty("#plotoutline", Omschrijving[listview.SelectedListItemIndex]); + } + } + return base.OnMessage(message); + } + + private void GetInfo(string url) + { + Datum.Clear(); + Views.Clear(); + Omschrijving.Clear(); + Waardering.Clear(); + StreamUrl.Clear(); + + string result = NLGemist.wc.GetUrl(url, true); + result = NLGemist.ConvertString(result); + + //get image + Match m = Regex.Match(result, @"<img\ssrc=.(http://gids.omroep.nl.*?.png)"); + imageurl = m.Groups[1].Value; + image.FileName = NLGemist.wc.DownloadImage(imageurl); + + //get Programma-Naam + m = Regex.Match(result, @"<title>(.*?)</title>"); + GUIPropertyManager.SetProperty("#title", m.Groups[1].Value); + + //get Programma-omschrijving + m = Regex.Match(result, @"<p\sstyle=.margin-top.5px..>(.*?)<", RegexOptions.Singleline); + GUIPropertyManager.SetProperty("#plot", m.Groups[1].Value); + + //get Genre + m = Regex.Match(result, @"genre</b>.*?title=.(.*?).>", RegexOptions.Singleline); + GUIPropertyManager.SetProperty("#genre", m.Groups[1].Value); + + // get Omproep + m = Regex.Match(result, @"omroep</b>.*?title=.(.*?).>", RegexOptions.Singleline); + GUIPropertyManager.SetProperty("#credits", m.Groups[1].Value); + + // get Afleveringen + m = Regex.Match(result, @"tbody\sid=.afleveringen.>(.*?)</tbody>", RegexOptions.Singleline); + if (m.Success) + { + string afleveringen = m.Groups[1].Value; + + //get datum + MatchCollection mc = Regex.Matches(afleveringen, @"(\d{2}-\d{2}-\d{4})</td>"); + foreach (Match m1 in mc) + { + Datum.Add(m1.Groups[1].Value); + } + + //get omschrijving + mc = Regex.Matches(afleveringen, @"(.*?).<a\shref=./index"); + foreach (Match m1 in mc) + { + Omschrijving.Add(m1.Groups[1].Value); + } + + //get views + mc = Regex.Matches(afleveringen, @"right.>(\d.*)</td>"); + foreach (Match m1 in mc) + { + Views.Add(m1.Groups[1].Value); + } + + //get waardering + mc = Regex.Matches(afleveringen, @">(\d\.\d)<"); + foreach (Match m1 in mc) + { + double r = double.Parse(m1.Groups[1].Value); + r = r * 2; + r = r / 10; + Waardering.Add(r.ToString()); + } + + //get stream-url + mc = Regex.Matches(afleveringen, @"(http://player.omroep.nl/.*?).\s"); + foreach (Match m1 in mc) + { + StreamUrl.Add(m1.Groups[1].Value); + } + + } + } + + private void Showlist() + { + listview.Clear(); + int i = 0; + while(i<Datum.Count) + { + GUIListItem item = new GUIListItem(); + item.IconImage = "defaultVideo.png"; + item.Label = Datum[i]; + item.Label2 = "Views: "+Views[i]; + listview.Add(item); + i++; + } + } + + + + + + + + + + + + } +} Modified: trunk/plugins/UitzendingGemist/UitGemist/UitGemist.csproj =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/UitGemist.csproj 2007-03-23 13:29:45 UTC (rev 213) +++ trunk/plugins/UitzendingGemist/UitGemist/UitGemist.csproj 2007-03-23 15:15:17 UTC (rev 214) @@ -29,7 +29,7 @@ <WarningLevel>4</WarningLevel> </PropertyGroup> <ItemGroup> - <Reference Include="Core, Version=1.0.2560.37327, Culture=neutral, processorArchitecture=MSIL"> + <Reference Include="Core, Version=1.0.2586.6922, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\..\..\trunk\mediaportal\Core\bin\Release\Core.dll</HintPath> </Reference> @@ -42,20 +42,22 @@ <Reference Include="System.Drawing" /> <Reference Include="System.Windows.Forms" /> <Reference Include="System.Xml" /> - <Reference Include="Utils, Version=1.0.2560.37325, Culture=neutral, processorArchitecture=MSIL"> + <Reference Include="Utils, Version=1.0.2586.6921, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\..\..\trunk\mediaportal\Utils\bin\Release\Utils.dll</HintPath> </Reference> </ItemGroup> <ItemGroup> + <Compile Include="TienSecondScreen.cs" /> <Compile Include="RTLGemist.cs" /> - <Compile Include="SecondScreen.cs" /> + <Compile Include="NLSecondScreen.cs" /> <Compile Include="ConfigurationForm.cs"> <SubType>Form</SubType> </Compile> <Compile Include="ConfigurationForm.Designer.cs"> <DependentUpon>ConfigurationForm.cs</DependentUpon> </Compile> + <Compile Include="TienGemist.cs" /> <Compile Include="UitGemistMain.cs" /> <Compile Include="UitGemistPlugin.cs" /> <Compile Include="NLGemist.cs" /> @@ -77,6 +79,6 @@ </Target> --> <PropertyGroup> - <PostBuildEvent>xcopy $(TargetPath) D:\MediaPortal\trunk\mediaportal\xbmc\bin\Release\plugins\windows\$(TargetFileName) /y</PostBuildEvent> + <PostBuildEvent>xcopy $(TargetPath) D:\MediaPortal\trunk\mediaportal\xbmc\bin\Release\plugins\windows /y</PostBuildEvent> </PropertyGroup> </Project> \ No newline at end of file Modified: trunk/plugins/UitzendingGemist/UitGemist/UitGemistPlugin.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/UitGemistPlugin.cs 2007-03-23 13:29:45 UTC (rev 213) +++ trunk/plugins/UitzendingGemist/UitGemist/UitGemistPlugin.cs 2007-03-23 15:15:17 UTC (rev 214) @@ -37,7 +37,7 @@ // Returns the name of the plugin which is shown in the plugin menu public string PluginName() { - return "Uitzending Gemist"; + return "TV Gemist"; } // Returns the description of the plugin is shown in the plugin menu Modified: trunk/plugins/UitzendingGemist/UitGemist.suo =================================================================== (Binary files differ) Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml.bak =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml.bak (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml.bak 2007-03-23 15:15:17 UTC (rev 214) @@ -0,0 +1,52 @@ +<window> + <id>6802</id> + <defaultcontrol>50</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:RTLGemist</define> +<controls> + <import>common.window.xml</import> + <control> + <type>image</type> + <description>BackGround</description> + <id>1</id> + <posX>0</posX> + <posY>0</posY> + <width>720</width> + <height>576</height> + <texture>background3.png</texture> + </control> + <control> + <type>group</type> + <description>group element</description> + <animation>FlyInFromLeft</animation> + <layout>StackLayout</layout> + <posX>5</posX> + <posY>125</posY> + <control> + <description>Favorieten</description> + <type>button</type> + <id>2</id> + <label>Favorieten</label> + <onup>17</onup> + <ondown>3</ondown> + </control> + <control> + <description>Top Tien</description> + <type>button</type> + <id>3</id> + <label>Top Tien</label> + <onup>2</onup> + <ondown>4</ondown> + </control> + <control> + <description>Programma's</description> + <type>button</type> + <id>4</id> + <label>Programma's</label> + <onup>3</onup> + <ondown>2</ondown> + </control> + </control> + <import>common.facade.xml</import> +</controls> +</window> \ No newline at end of file Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml.bak =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml.bak (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml.bak 2007-03-23 15:15:17 UTC (rev 214) @@ -0,0 +1,127 @@ +<window> + <id>6800</id> + <defaultcontrol>50</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:UitGemist</define> +<controls> + <import>common.window.xml</import> + <control> + <type>image</type> + <description>BackGround</description> + <id>1</id> + <posX>0</posX> + <posY>0</posY> + <width>720</width> + <height>576</height> + <texture>background3.png</texture> + </control> + <control> + <type>group</type> + <description>group element</description> + <animation>FlyInFromLeft</animation> + <layout>StackLayout</layout> + <posX>5</posX> + <posY>125</posY> + <control> + <description>Favorieten</description> + <type>button</type> + <id>2</id> + <label>Favorieten</label> + <onup>17</onup> + <ondown>3</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>3</id> + <label>Titel</label> + <onup>2</onup> + <ondown>4</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>4</id> + <label>Dag</label> + <onup>3</onup> + <ondown>5</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>5</id> + <label>Net/zender</label> + <onup>4</onup> + <ondown>6</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>6</id> + <label>Omroep</label> + <onup>5</onup> + <ondown>7</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>7</id> + <label>Genre</label> + <onup>6</onup> + <ondown>8</ondown> + </control> + <control> + <description>Moet je Zien</description> + <type>button</type> + <id>8</id> + <label>Moet je zien</label> + <onup>7</onup> + <onright>50</onright> + <ondown>50</ondown> + </control> + <control> + <type>group</type> + <description>group element</description> + <control> + <type>imagelist</type> + <id>11</id> + <posX>550</posX> + <posY>350</posY> + <width>100</width> + <height>32</height> + <textureWidth>16</textureWidth> + <textureHeight>16</textureHeight> + <subitems> + <subitem>greystar.png</subitem> + <subitem>star.png</subitem> + </subitems> + <orientation>horizontal</orientation> + <align>left</align> + <percentage>#rating</percentage> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>12</id> + <posX>260</posX> + <posY>380</posY> + <width>375</width> + <height>100</height> + <label>#plot</label> + <textcolor>ffffffff</textcolor> + <font>font12</font> + </control> + <control> + <description>Bekeken</description> + <type>label</type> + <id>13</id> + <posX>260</posX> + <posY>350</posY> + <label>#votes keer bekeken</label> + <textcolor>ffffffff</textcolor> + </control> + </control> + </control> + <import>common.facade.xml</import> +</controls> +</window> \ No newline at end of file Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml.bak =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml.bak (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml.bak 2007-03-23 15:15:17 UTC (rev 214) @@ -0,0 +1,136 @@ +<window> + <id>6801</id> + <defaultcontrol>10</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:Programma</define> + <controls> + <import>common.window.xml</import> + <control> + <type>image</type> + <description>BackGround</description> + <id>9</id> + <posX>0</posX> + <posY>0</posY> + <width>720</width> + <height>576</height> + <texture>background.png</texture> + </control> + <control> + <type>group</type> + <description>group element</description> + <animation>FlyInFromTop</animation> + <control> + <type>image</type> + <description>Program image</description> + <id>3</id> + <posX>60</posX> + <posY>125</posY> + <width>100</width> + <height>75</height> + <texture>background.png</texture> + </control> + <control> + <description>Naam van gekozen programma</description> + <type>label</type> + <id>2</id> + <posX>170</posX> + <posY>105</posY> + <label>#title</label> + </control> + <control> + <description>Genre</description> + <type>label</type> + <id>0</id> + <posX>555</posX> + <posY>120</posY> + <label>Genre</label> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>Display wich genre</description> + <type>label</type> + <id>4</id> + <posX>555</posX> + <posY>138</posY> + <label>#genre</label> + </control> + <control> + <description>Omroep</description> + <type>label</type> + <id>8</id> + <posX>555</posX> + <posY>162</posY> + <label>Omroep</label> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>Display which omroep</description> + <type>label</type> + <id>5</id> + <posX>555</posX> + <posY>180</posY> + <label>#credits</label> + </control> + <control> + <type>imagelist</type> + <id>7</id> + <posX>555</posX> + <posY>205</posY> + <width>100</width> + <height>32</height> + <textureWidth>16</textureWidth> + <textureHeight>16</textureHeight> + <subitems> + <subitem>greystar.png</subitem> + <subitem>star.png</subitem> + </subitems> + <orientation>horizontal</orientation> + <align>left</align> + <percentage>#rating</percentage> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>6</id> + <posX>170</posX> + <posY>125</posY> + <width>375</width> + <height>105</height> + <label>#plot</label> + <font>font12</font> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>afleveringen</description> + <type>listcontrol</type> + <id>10</id> + <posX>170</posX> + <posY>240</posY> + <width>485</width> + <height>200</height> + <textXOff>10</textXOff> + <textYOff>2</textYOff> + <textXOff2>420</textXOff2> + <textYOff2>2</textYOff2> + <spaceBetweenItems>5</spaceBetweenItems> + <textureHeight>25</textureHeight> + <keepaspectratio>no</keepaspectratio> + <font2>font10</font2> + <font3>font10</font3> + <onup>17</onup> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>1</id> + <posX>170</posX> + <posY>400</posY> + <width>375</width> + <height>100</height> + <label>#plotoutline</label> + <font>font12</font> + <textcolor>ffffffff</textcolor> + </control> + </control> + </controls> +</window> Added: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml.bak =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml.bak (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml.bak 2007-03-23 15:15:17 UTC (rev 214) @@ -0,0 +1,58 @@ +<window> + <id>6799</id> + <defaultcontrol>2</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:UitzendingGemist</define> + <define>#header.image:</define> + <define>#header.hover:hover_uitgemist.png</define> + + <controls> + <import>common.window.xml</import> + <control> + <description>BackGround</description> + <type>image</type> + <id>1</id> + <posX>0</posX> + <posY>0</posY> + <texture>background.png</texture> + </control> + <control> + <type>group</type> + <description>group element</description> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <animation effect="slide" time="250" start="-300,0">WindowOpen</animation> + <animation effect="slide" time="500" end="0,-300">WindowClose</animation> + <layout>StackLayout</layout> + <posX>80</posX> + <posY>120</posY> + + <!-- topmost item needs an onup with a value of 17 for topbar to work --> + <control> + <description>UitzendingGemist.nl</description> + <type>button</type> + <id>2</id> + <width>575</width> + <height>90</height> + <textureNoFocus>nlgemist.png</textureNoFocus> + <textureFocus>hover_nlgemist.png</textureFocus> + <onup>17</onup> + </control> + + <!-- last item needs an ondown with a value of 2 to support wraparound --> + <control> + <description>RTL Gemist</description> + <type>button</type> + <id>3</id> + <width>575</width> + <height>90</height> + <textXOff>10</textXOff> + <textYOff>5</textYOff> + <textureNoFocus>rtlgemist.png</textureNoFocus> + <textureFocus>hover_rtlgemist.png</textureFocus> + <ondown>2</ondown> + </control> + + </control> + </controls> +</window> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <moi...@us...> - 2007-03-28 14:00:52
|
Revision: 245 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=245&view=rev Author: moiristo Date: 2007-03-28 07:00:50 -0700 (Wed, 28 Mar 2007) Log Message: ----------- Modified Paths: -------------- trunk/plugins/UitzendingGemist/UitGemist.suo Added Paths: ----------- trunk/plugins/UitzendingGemist/skin/[Wide skin]/ trunk/plugins/UitzendingGemist/skin/[Wide skin]/RtlGemist.xml trunk/plugins/UitzendingGemist/skin/[Wide skin]/UitGemist.xml trunk/plugins/UitzendingGemist/skin/[Wide skin]/UitGemist2.xml trunk/plugins/UitzendingGemist/skin/[Wide skin]/UitGemistMain.xml Modified: trunk/plugins/UitzendingGemist/UitGemist.suo =================================================================== (Binary files differ) Added: trunk/plugins/UitzendingGemist/skin/[Wide skin]/RtlGemist.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Wide skin]/RtlGemist.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Wide skin]/RtlGemist.xml 2007-03-28 14:00:50 UTC (rev 245) @@ -0,0 +1,46 @@ +<window> + <id>6802</id> + <defaultcontrol>50</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:RTLGemist</define> + <define>#header.location:</define> +<controls> + <import>common.window.xml</import> + <control> + <type>group</type> + <description>group element</description> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <animation effect="slide" time="250" start="-300,0">WindowOpen</animation> + <animation effect="slide" time="500" end="0,-300">WindowClose</animation> + <layout>StackLayout</layout> + <posX>50</posX> + <posY>130</posY> + <control> + <description>Favorieten</description> + <type>button</type> + <id>2</id> + <label>Favorieten</label> + <onup>17</onup> + <ondown>3</ondown> + </control> + <control> + <description>Top Tien</description> + <type>button</type> + <id>3</id> + <label>Top Tien</label> + <onup>2</onup> + <ondown>4</ondown> + </control> + <control> + <description>Programma's</description> + <type>button</type> + <id>4</id> + <label>Programma's</label> + <onup>3</onup> + <ondown>2</ondown> + </control> + </control> + <import>common.facade.xml</import> +</controls> +</window> \ No newline at end of file Added: trunk/plugins/UitzendingGemist/skin/[Wide skin]/UitGemist.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Wide skin]/UitGemist.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Wide skin]/UitGemist.xml 2007-03-28 14:00:50 UTC (rev 245) @@ -0,0 +1,121 @@ +<window> + <id>6800</id> + <defaultcontrol>50</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:UitGemist</define> + <define>#header.location:</define> +<controls> + <import>common.window.xml</import> + <control> + <type>group</type> + <description>group element</description> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <animation effect="slide" time="250" start="-300,0">WindowOpen</animation> + <animation effect="slide" time="500" end="0,-300">WindowClose</animation> + <layout>StackLayout</layout> + <posX>50</posX> + <posY>97</posY> + <control> + <description>Favorieten</description> + <type>button</type> + <id>2</id> + <label>Favorieten</label> + <onup>17</onup> + <ondown>3</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>3</id> + <label>Titel</label> + <onup>2</onup> + <ondown>4</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>4</id> + <label>Dag</label> + <onup>3</onup> + <ondown>5</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>5</id> + <label>Net/zender</label> + <onup>4</onup> + <ondown>6</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>6</id> + <label>Omroep</label> + <onup>5</onup> + <ondown>7</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>7</id> + <label>Genre</label> + <onup>6</onup> + <ondown>8</ondown> + </control> + <control> + <description>Moet je Zien</description> + <type>button</type> + <id>8</id> + <label>Moet je zien</label> + <onup>7</onup> + <onright>50</onright> + <ondown>50</ondown> + </control> + <control> + <type>group</type> + <description>group element</description> + <control> + <type>imagelist</type> + <id>11</id> + <posX>1120</posX> + <posY>450</posY> + <width>100</width> + <height>32</height> + <textureWidth>16</textureWidth> + <textureHeight>16</textureHeight> + <subitems> + <subitem>greystar.png</subitem> + <subitem>star.png</subitem> + </subitems> + <orientation>horizontal</orientation> + <align>left</align> + <percentage>#rating</percentage> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>12</id> + <posX>550</posX> + <posY>500</posY> + <width>375</width> + <height>100</height> + <label>#plot</label> + <textcolor>ffffffff</textcolor> + <font>font12</font> + </control> + <control> + <description>Bekeken</description> + <type>label</type> + <id>13</id> + <posX>860</posX> + <posY>450</posY> + <label>#votes keer bekeken</label> + <textcolor>ffffffff</textcolor> + </control> + </control> + </control> + <import>common.facade.xml</import> +</controls> +</window> \ No newline at end of file Added: trunk/plugins/UitzendingGemist/skin/[Wide skin]/UitGemist2.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Wide skin]/UitGemist2.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Wide skin]/UitGemist2.xml 2007-03-28 14:00:50 UTC (rev 245) @@ -0,0 +1,128 @@ +<window> + <id>6801</id> + <defaultcontrol>10</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:Programma</define> + <define>#header.location:</define> + <controls> + <import>common.window.xml</import> + <control> + <type>group</type> + <description>group element</description> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <control> + <type>image</type> + <description>Program image</description> + <id>3</id> + <posX>50</posX> + <posY>115</posY> + <width>100</width> + <height>75</height> + <texture>background.png</texture> + </control> + <control> + <description>Naam van gekozen programma</description> + <type>label</type> + <id>2</id> + <posX>165</posX> + <posY>95</posY> + <label>#title</label> + </control> + <control> + <description>Genre</description> + <type>label</type> + <id>0</id> + <posX>550</posX> + <posY>115</posY> + <label>Genre</label> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>Display wich genre</description> + <type>label</type> + <id>4</id> + <posX>550</posX> + <posY>130</posY> + <label>#genre</label> + </control> + <control> + <description>Omroep</description> + <type>label</type> + <id>0</id> + <posX>550</posX> + <posY>150</posY> + <label>Omroep</label> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>Display which omroep</description> + <type>label</type> + <id>5</id> + <posX>550</posX> + <posY>165</posY> + <label>#credits</label> + </control> + <control> + <type>imagelist</type> + <id>1</id> + <posX>550</posX> + <posY>200</posY> + <width>100</width> + <height>32</height> + <textureWidth>16</textureWidth> + <textureHeight>16</textureHeight> + <subitems> + <subitem>greystar.png</subitem> + <subitem>star.png</subitem> + </subitems> + <orientation>horizontal</orientation> + <align>left</align> + <percentage>#rating</percentage> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>6</id> + <posX>165</posX> + <posY>115</posY> + <width>375</width> + <height>105</height> + <label>#plot</label> + <font>font12</font> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>afleveringen</description> + <type>listcontrol</type> + <id>10</id> + <posX>165</posX> + <posY>225</posY> + <width>485</width> + <height>200</height> + <textXOff>10</textXOff> + <textYOff>2</textYOff> + <textXOff2>420</textXOff2> + <textYOff2>2</textYOff2> + <spaceBetweenItems>5</spaceBetweenItems> + <textureHeight>25</textureHeight> + <keepaspectratio>no</keepaspectratio> + <font2>font10</font2> + <font3>font10</font3> + <onup>17</onup> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>1</id> + <posX>250</posX> + <posY>380</posY> + <width>375</width> + <height>100</height> + <label>#plotoutline</label> + <font>font12</font> + <textcolor>ffffffff</textcolor> + </control> + </control> + </controls> +</window> Added: trunk/plugins/UitzendingGemist/skin/[Wide skin]/UitGemistMain.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Wide skin]/UitGemistMain.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/[Wide skin]/UitGemistMain.xml 2007-03-28 14:00:50 UTC (rev 245) @@ -0,0 +1,46 @@ +<window> + <id>6799</id> + <defaultcontrol>2</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:UitzendingGemist</define> + <define>#header.location:</define> + <define>#header.image:</define> + <define>#header.hover:hover_uitgemist.png</define> + + <controls> + <import>common.window.xml</import> + + <!-- topmost item needs an onup with a value of 17 for topbar to work --> + <control> + <description>UitzendingGemist.nl</description> + <type>button</type> + <id>2</id> + <width>575</width> + <height>90</height> + <posX>400</posX> + <posY>150</posY> + <textureNoFocus>nlgemist.png</textureNoFocus> + <textureFocus>hover_nlgemist.png</textureFocus> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <onup>17</onup> + </control> + + <!-- last item needs an ondown with a value of 2 to support wraparound --> + <control> + <description>RTL Gemist</description> + <type>button</type> + <id>3</id> + <posX>400</posX> + <posY>250</posY> + <width>575</width> + <height>90</height> + <textureNoFocus>rtlgemist.png</textureNoFocus> + <textureFocus>hover_rtlgemist.png</textureFocus> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <ondown>2</ondown> + </control> + + </controls> +</window> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <moi...@us...> - 2007-06-06 23:20:42
|
Revision: 491 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=491&view=rev Author: moiristo Date: 2007-06-06 16:20:39 -0700 (Wed, 06 Jun 2007) Log Message: ----------- Update of the RTLGemist section Modified Paths: -------------- trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs Added Paths: ----------- trunk/plugins/UitzendingGemist/Readme.txt Removed Paths: ------------- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml.bak trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml.bak trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml.bak trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml.bak Added: trunk/plugins/UitzendingGemist/Readme.txt =================================================================== --- trunk/plugins/UitzendingGemist/Readme.txt (rev 0) +++ trunk/plugins/UitzendingGemist/Readme.txt 2007-06-06 23:20:39 UTC (rev 491) @@ -0,0 +1,64 @@ +MediaPortal UitzendingGemist plugin +by Moiristo + + +This plugin for MediaPortal makes it possible to browse and watch the +internet streams provided by uitzendinggemist.nl and www.rtl.nl. + +This plugin is a frontend to the website and allows the user watch these streams from within Mediaportal. + + +installation: + +- Unpack +- Use Dukus's MPInstaller utility (available in the plugins/utilities download section) to install the plugin. Be sure to use the 0.2.2_SVN MPI when you are using the latest MP snapshot. + +bugs needed to be fixed +- After an emission finishes, MP isn't notified and will not go back to the menu. +(you have to stop the playback manually) + + +thanks: + +A big thanks to ZipperZip for letting me use his Uitzending_Gemist Plugin code. + +0.8 +- Fixed the TopTen screen of RTLGemist +- Recompiled against the latest SVN + +0.7 +- Changed the plugin name to 'TV Gemist' (A lot of plugins disliked the long name) +- NLGemist now shows all available emissions, not the last five +- Fixed wrong url regex for emission logo, now it properly shows the logo that belongs to the emission +- Fixed NLGemist not going in fullscreen when clicking an emission +- Added a widescreen skin file (nothing fancy yet though) +- No progression on the Tien plugin however :) + +0.6 +- Fixed NLGemist section not working because of changed website (Now everything can be found in XML documents o/) +- Started with the Tien plugin (no functionality yet) + +0.5 +- Fixed NLGemist section not working because of changed website (It requires a cookie) +- Fixed stream regexes +- Improved skin files + +TODO: + +- Support for Tien (I contacted them for this, not much support yet though) +- Mepo Skin (I like mepo :)) + +0.4 +- Created custom skin files for Project Mayhem 3 + +0.3 +- Added a frontend to RTLGemist +- Added an UitGemist-MP-puppet +- Added a frontend to UitzendingGemist and RTLGemist +- Improvement: Focus the facadeview after loading new entries + +0.2 +- Fixed some bugs in the original code + +0.1 +- Initial version from ZipperZip \ No newline at end of file Modified: trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs 2007-06-06 21:53:56 UTC (rev 490) +++ trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs 2007-06-06 23:20:39 UTC (rev 491) @@ -449,46 +449,38 @@ string url = host + @"/experience/media/context/index.xml"; string result = wc.GetXML(url); - try - { - XPathDocument document = new XPathDocument(new System.IO.StringReader(result)); - XPathNavigator navigator = document.CreateNavigator(); - XPathExpression programs = XPathExpression.Compile("//li/a"); //returns nodeset - XPathNodeIterator nodes = navigator.Select(programs); + //StreamWriter sw = new StreamWriter("d:/test.log"); + //sw.Write(result); + //sw.Close(); - int i = 0; - while (nodes.MoveNext()) - { - //Log.Info("UitGemist: Found node '" + nodes.Current.ToString() + "'"); + int i = 0; + MatchCollection mc = Regex.Matches(result, @"target=._parent.*?href=.(?<url>.*?.xml).*?>(?<name>.*?)</a>"); + if (mc.Count == 0) Log.Info("UitGemist: No emissions found"); + foreach (Match m1 in mc) + { + Log.Info("UitGemist: Found program '" + m1.Groups["name"].Value + "'"); - Names.Add(@nodes.Current.ToString()); - Names[i] = MakeFirstUpper(ConvertString(Names[i])); - Urls.Add(@nodes.Current.GetAttribute("href", "").ToString()); - Urls[i] = ConvertString(Urls[i]); - i++; - } + Names.Add(@m1.Groups["name"].Value); + Names[i] = MakeFirstUpper(ConvertString(Names[i])); + Urls.Add(@m1.Groups["url"].Value); + Urls[i] = ConvertString(Urls[i]); + i++; + } - // Show the results! + // Show the results! - facadeview.View = GUIFacadeControl.ViewMode.List; - facadeview.Clear(); + facadeview.View = GUIFacadeControl.ViewMode.List; + facadeview.Clear(); - for (i = 0; i < Names.Count; i++) - { - string label = Names[i]; - GUIListItem item = new GUIListItem(); - item.Label = label; - item.IsFolder = false; - Util.Utils.SetDefaultIcons(item); - facadeview.Add(item); - } - } - catch (XmlException e) + for (i = 0; i < Names.Count; i++) { - Log.Info("UitGemist: Invalid xml document '" + url + "'. Details follow."); - Log.Info("UitGemist: Line number: " + e.LineNumber + ":"); - Log.Info(e.StackTrace); + string label = Names[i]; + GUIListItem item = new GUIListItem(); + item.Label = label; + item.IsFolder = false; + Util.Utils.SetDefaultIcons(item); + facadeview.Add(item); } } Deleted: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml.bak =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml.bak 2007-06-06 21:53:56 UTC (rev 490) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/RtlGemist.xml.bak 2007-06-06 23:20:39 UTC (rev 491) @@ -1,52 +0,0 @@ -<window> - <id>6802</id> - <defaultcontrol>50</defaultcontrol> - <allowoverlay>yes</allowoverlay> - <define>#header.label:RTLGemist</define> -<controls> - <import>common.window.xml</import> - <control> - <type>image</type> - <description>BackGround</description> - <id>1</id> - <posX>0</posX> - <posY>0</posY> - <width>720</width> - <height>576</height> - <texture>background3.png</texture> - </control> - <control> - <type>group</type> - <description>group element</description> - <animation>FlyInFromLeft</animation> - <layout>StackLayout</layout> - <posX>5</posX> - <posY>125</posY> - <control> - <description>Favorieten</description> - <type>button</type> - <id>2</id> - <label>Favorieten</label> - <onup>17</onup> - <ondown>3</ondown> - </control> - <control> - <description>Top Tien</description> - <type>button</type> - <id>3</id> - <label>Top Tien</label> - <onup>2</onup> - <ondown>4</ondown> - </control> - <control> - <description>Programma's</description> - <type>button</type> - <id>4</id> - <label>Programma's</label> - <onup>3</onup> - <ondown>2</ondown> - </control> - </control> - <import>common.facade.xml</import> -</controls> -</window> \ No newline at end of file Deleted: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml.bak =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml.bak 2007-06-06 21:53:56 UTC (rev 490) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist.xml.bak 2007-06-06 23:20:39 UTC (rev 491) @@ -1,127 +0,0 @@ -<window> - <id>6800</id> - <defaultcontrol>50</defaultcontrol> - <allowoverlay>yes</allowoverlay> - <define>#header.label:UitGemist</define> -<controls> - <import>common.window.xml</import> - <control> - <type>image</type> - <description>BackGround</description> - <id>1</id> - <posX>0</posX> - <posY>0</posY> - <width>720</width> - <height>576</height> - <texture>background3.png</texture> - </control> - <control> - <type>group</type> - <description>group element</description> - <animation>FlyInFromLeft</animation> - <layout>StackLayout</layout> - <posX>5</posX> - <posY>125</posY> - <control> - <description>Favorieten</description> - <type>button</type> - <id>2</id> - <label>Favorieten</label> - <onup>17</onup> - <ondown>3</ondown> - </control> - <control> - <type>selectbutton</type> - <description>Letter button</description> - <id>3</id> - <label>Titel</label> - <onup>2</onup> - <ondown>4</ondown> - </control> - <control> - <type>selectbutton</type> - <description>Letter button</description> - <id>4</id> - <label>Dag</label> - <onup>3</onup> - <ondown>5</ondown> - </control> - <control> - <type>selectbutton</type> - <description>Letter button</description> - <id>5</id> - <label>Net/zender</label> - <onup>4</onup> - <ondown>6</ondown> - </control> - <control> - <type>selectbutton</type> - <description>Letter button</description> - <id>6</id> - <label>Omroep</label> - <onup>5</onup> - <ondown>7</ondown> - </control> - <control> - <type>selectbutton</type> - <description>Letter button</description> - <id>7</id> - <label>Genre</label> - <onup>6</onup> - <ondown>8</ondown> - </control> - <control> - <description>Moet je Zien</description> - <type>button</type> - <id>8</id> - <label>Moet je zien</label> - <onup>7</onup> - <onright>50</onright> - <ondown>50</ondown> - </control> - <control> - <type>group</type> - <description>group element</description> - <control> - <type>imagelist</type> - <id>11</id> - <posX>550</posX> - <posY>350</posY> - <width>100</width> - <height>32</height> - <textureWidth>16</textureWidth> - <textureHeight>16</textureHeight> - <subitems> - <subitem>greystar.png</subitem> - <subitem>star.png</subitem> - </subitems> - <orientation>horizontal</orientation> - <align>left</align> - <percentage>#rating</percentage> - </control> - <control> - <type>textboxscrollup</type> - <description>Programma-info</description> - <id>12</id> - <posX>260</posX> - <posY>380</posY> - <width>375</width> - <height>100</height> - <label>#plot</label> - <textcolor>ffffffff</textcolor> - <font>font12</font> - </control> - <control> - <description>Bekeken</description> - <type>label</type> - <id>13</id> - <posX>260</posX> - <posY>350</posY> - <label>#votes keer bekeken</label> - <textcolor>ffffffff</textcolor> - </control> - </control> - </control> - <import>common.facade.xml</import> -</controls> -</window> \ No newline at end of file Deleted: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml.bak =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml.bak 2007-06-06 21:53:56 UTC (rev 490) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemist2.xml.bak 2007-06-06 23:20:39 UTC (rev 491) @@ -1,136 +0,0 @@ -<window> - <id>6801</id> - <defaultcontrol>10</defaultcontrol> - <allowoverlay>yes</allowoverlay> - <define>#header.label:Programma</define> - <controls> - <import>common.window.xml</import> - <control> - <type>image</type> - <description>BackGround</description> - <id>9</id> - <posX>0</posX> - <posY>0</posY> - <width>720</width> - <height>576</height> - <texture>background.png</texture> - </control> - <control> - <type>group</type> - <description>group element</description> - <animation>FlyInFromTop</animation> - <control> - <type>image</type> - <description>Program image</description> - <id>3</id> - <posX>60</posX> - <posY>125</posY> - <width>100</width> - <height>75</height> - <texture>background.png</texture> - </control> - <control> - <description>Naam van gekozen programma</description> - <type>label</type> - <id>2</id> - <posX>170</posX> - <posY>105</posY> - <label>#title</label> - </control> - <control> - <description>Genre</description> - <type>label</type> - <id>0</id> - <posX>555</posX> - <posY>120</posY> - <label>Genre</label> - <textcolor>ffffffff</textcolor> - </control> - <control> - <description>Display wich genre</description> - <type>label</type> - <id>4</id> - <posX>555</posX> - <posY>138</posY> - <label>#genre</label> - </control> - <control> - <description>Omroep</description> - <type>label</type> - <id>8</id> - <posX>555</posX> - <posY>162</posY> - <label>Omroep</label> - <textcolor>ffffffff</textcolor> - </control> - <control> - <description>Display which omroep</description> - <type>label</type> - <id>5</id> - <posX>555</posX> - <posY>180</posY> - <label>#credits</label> - </control> - <control> - <type>imagelist</type> - <id>7</id> - <posX>555</posX> - <posY>205</posY> - <width>100</width> - <height>32</height> - <textureWidth>16</textureWidth> - <textureHeight>16</textureHeight> - <subitems> - <subitem>greystar.png</subitem> - <subitem>star.png</subitem> - </subitems> - <orientation>horizontal</orientation> - <align>left</align> - <percentage>#rating</percentage> - </control> - <control> - <type>textboxscrollup</type> - <description>Programma-info</description> - <id>6</id> - <posX>170</posX> - <posY>125</posY> - <width>375</width> - <height>105</height> - <label>#plot</label> - <font>font12</font> - <textcolor>ffffffff</textcolor> - </control> - <control> - <description>afleveringen</description> - <type>listcontrol</type> - <id>10</id> - <posX>170</posX> - <posY>240</posY> - <width>485</width> - <height>200</height> - <textXOff>10</textXOff> - <textYOff>2</textYOff> - <textXOff2>420</textXOff2> - <textYOff2>2</textYOff2> - <spaceBetweenItems>5</spaceBetweenItems> - <textureHeight>25</textureHeight> - <keepaspectratio>no</keepaspectratio> - <font2>font10</font2> - <font3>font10</font3> - <onup>17</onup> - </control> - <control> - <type>textboxscrollup</type> - <description>Programma-info</description> - <id>1</id> - <posX>170</posX> - <posY>400</posY> - <width>375</width> - <height>100</height> - <label>#plotoutline</label> - <font>font12</font> - <textcolor>ffffffff</textcolor> - </control> - </control> - </controls> -</window> Deleted: trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml.bak =================================================================== --- trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml.bak 2007-06-06 21:53:56 UTC (rev 490) +++ trunk/plugins/UitzendingGemist/skin/[Project Mayhem]/UitGemistMain.xml.bak 2007-06-06 23:20:39 UTC (rev 491) @@ -1,58 +0,0 @@ -<window> - <id>6799</id> - <defaultcontrol>2</defaultcontrol> - <allowoverlay>yes</allowoverlay> - <define>#header.label:UitzendingGemist</define> - <define>#header.image:</define> - <define>#header.hover:hover_uitgemist.png</define> - - <controls> - <import>common.window.xml</import> - <control> - <description>BackGround</description> - <type>image</type> - <id>1</id> - <posX>0</posX> - <posY>0</posY> - <texture>background.png</texture> - </control> - <control> - <type>group</type> - <description>group element</description> - <animation effect="fade" time="250">WindowOpen</animation> - <animation effect="fade" time="500">WindowClose</animation> - <animation effect="slide" time="250" start="-300,0">WindowOpen</animation> - <animation effect="slide" time="500" end="0,-300">WindowClose</animation> - <layout>StackLayout</layout> - <posX>80</posX> - <posY>120</posY> - - <!-- topmost item needs an onup with a value of 17 for topbar to work --> - <control> - <description>UitzendingGemist.nl</description> - <type>button</type> - <id>2</id> - <width>575</width> - <height>90</height> - <textureNoFocus>nlgemist.png</textureNoFocus> - <textureFocus>hover_nlgemist.png</textureFocus> - <onup>17</onup> - </control> - - <!-- last item needs an ondown with a value of 2 to support wraparound --> - <control> - <description>RTL Gemist</description> - <type>button</type> - <id>3</id> - <width>575</width> - <height>90</height> - <textXOff>10</textXOff> - <textYOff>5</textYOff> - <textureNoFocus>rtlgemist.png</textureNoFocus> - <textureFocus>hover_rtlgemist.png</textureFocus> - <ondown>2</ondown> - </control> - - </control> - </controls> -</window> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <moi...@us...> - 2007-07-25 13:37:34
|
Revision: 761 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=761&view=rev Author: moiristo Date: 2007-07-25 06:37:32 -0700 (Wed, 25 Jul 2007) Log Message: ----------- version 0.9 Modified Paths: -------------- trunk/plugins/UitzendingGemist/Readme.txt trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.cs trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs trunk/plugins/UitzendingGemist/UitGemist/NLSecondScreen.cs trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs trunk/plugins/UitzendingGemist/UitGemist/TienGemist.cs trunk/plugins/UitzendingGemist/UitGemist/TienSecondScreen.cs trunk/plugins/UitzendingGemist/UitGemist/UitGemist.csproj trunk/plugins/UitzendingGemist/UitGemist/UitGemistMain.cs Added Paths: ----------- trunk/plugins/UitzendingGemist/UitGemist/MultipartForm.cs trunk/plugins/UitzendingGemist/UitGemist/TienLogin.cs trunk/plugins/UitzendingGemist/images/hover_nlgemist.png trunk/plugins/UitzendingGemist/images/hover_rtlgemist.png trunk/plugins/UitzendingGemist/images/hover_tiengemist.png trunk/plugins/UitzendingGemist/images/nlgemist.png trunk/plugins/UitzendingGemist/images/tiengemist.png Modified: trunk/plugins/UitzendingGemist/Readme.txt =================================================================== --- trunk/plugins/UitzendingGemist/Readme.txt 2007-07-24 23:02:23 UTC (rev 760) +++ trunk/plugins/UitzendingGemist/Readme.txt 2007-07-25 13:37:32 UTC (rev 761) @@ -3,25 +3,28 @@ This plugin for MediaPortal makes it possible to browse and watch the -internet streams provided by uitzendinggemist.nl and www.rtl.nl. +internet streams provided by uitzendinggemist.nl,www.rtl.nl and tien.tv. This plugin is a frontend to the website and allows the user watch these streams from within Mediaportal. - installation: +- Use Dukus's MPInstaller utility (available in the plugins/utilities download section) to install the plugin -- Unpack -- Use Dukus's MPInstaller utility (available in the plugins/utilities download section) to install the plugin. Be sure to use the 0.2.2_SVN MPI when you are using the latest MP snapshot. +usage: +- First go to the configuration pane and choose default speed +- To be able to watch Tien emissions: + - Get an account at http://www.tien.tv (it's free!) + - Enter the account data in the 'Tien Account' tab -bugs needed to be fixed -- After an emission finishes, MP isn't notified and will not go back to the menu. -(you have to stop the playback manually) +thanks: +A big thanks to ZipperZip for letting me use his original Uitzending_Gemist Plugin code. -thanks: +0.9 +- Added support for Tien Gemist! +- Some minor changes +- No PM3 skin for TienGemist yet -A big thanks to ZipperZip for letting me use his Uitzending_Gemist Plugin code. - 0.8 - Fixed the TopTen screen of RTLGemist - Recompiled against the latest SVN Modified: trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs 2007-07-24 23:02:23 UTC (rev 760) +++ trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs 2007-07-25 13:37:32 UTC (rev 761) @@ -33,7 +33,17 @@ this.groupBox1 = new System.Windows.Forms.GroupBox(); this.okBtn = new System.Windows.Forms.Button(); this.button1 = new System.Windows.Forms.Button(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.Speed = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.passBox = new System.Windows.Forms.MaskedTextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.userBox = new System.Windows.Forms.TextBox(); this.groupBox1.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.Speed.SuspendLayout(); + this.tabPage2.SuspendLayout(); this.SuspendLayout(); // // sbBtn @@ -62,7 +72,7 @@ // this.groupBox1.Controls.Add(this.bbBtn); this.groupBox1.Controls.Add(this.sbBtn); - this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Location = new System.Drawing.Point(6, 6); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(169, 70); this.groupBox1.TabIndex = 2; @@ -71,7 +81,7 @@ // // okBtn // - this.okBtn.Location = new System.Drawing.Point(12, 88); + this.okBtn.Location = new System.Drawing.Point(12, 129); this.okBtn.Name = "okBtn"; this.okBtn.Size = new System.Drawing.Size(75, 23); this.okBtn.TabIndex = 3; @@ -81,27 +91,102 @@ // // button1 // - this.button1.Location = new System.Drawing.Point(93, 88); + this.button1.Location = new System.Drawing.Point(93, 129); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 23); this.button1.TabIndex = 4; this.button1.Text = "Cancel"; this.button1.UseVisualStyleBackColor = true; - + this.button1.Click += new System.EventHandler(this.button1_Click); // + // tabControl1 + // + this.tabControl1.AccessibleName = ""; + this.tabControl1.Controls.Add(this.Speed); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Location = new System.Drawing.Point(12, 12); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(262, 111); + this.tabControl1.TabIndex = 5; + this.tabControl1.Tag = ""; + // + // Speed + // + this.Speed.Controls.Add(this.groupBox1); + this.Speed.Location = new System.Drawing.Point(4, 22); + this.Speed.Name = "Speed"; + this.Speed.Padding = new System.Windows.Forms.Padding(3); + this.Speed.Size = new System.Drawing.Size(254, 85); + this.Speed.TabIndex = 0; + this.Speed.Text = "Speed"; + this.Speed.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.passBox); + this.tabPage2.Controls.Add(this.label2); + this.tabPage2.Controls.Add(this.label1); + this.tabPage2.Controls.Add(this.userBox); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(254, 85); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Tien Account"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // passBox + // + this.passBox.Location = new System.Drawing.Point(77, 45); + this.passBox.Name = "passBox"; + this.passBox.PasswordChar = '*'; + this.passBox.Size = new System.Drawing.Size(164, 20); + this.passBox.TabIndex = 3; + this.passBox.UseSystemPasswordChar = true; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 48); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(59, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Password: "; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 23); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(61, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Username: "; + // + // userBox + // + this.userBox.Location = new System.Drawing.Point(77, 16); + this.userBox.Name = "userBox"; + this.userBox.Size = new System.Drawing.Size(164, 20); + this.userBox.TabIndex = 0; + // // ConfigurationForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(246, 120); + this.ClientSize = new System.Drawing.Size(292, 156); + this.Controls.Add(this.tabControl1); this.Controls.Add(this.button1); this.Controls.Add(this.okBtn); - this.Controls.Add(this.groupBox1); this.Name = "ConfigurationForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "UitzendingGemist Configuration"; this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); + this.tabControl1.ResumeLayout(false); + this.Speed.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); this.ResumeLayout(false); } @@ -113,5 +198,12 @@ private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.Button okBtn; private System.Windows.Forms.Button button1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage Speed; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox userBox; + private System.Windows.Forms.MaskedTextBox passBox; + private System.Windows.Forms.Label label2; } } \ No newline at end of file Modified: trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.cs 2007-07-24 23:02:23 UTC (rev 760) +++ trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.cs 2007-07-25 13:37:32 UTC (rev 761) @@ -22,6 +22,10 @@ this.sbBtn.Checked = !broadband; this.bbBtn.Checked = broadband; + + string[] account = ShowWaitCursor.getTienAccount(); + userBox.Text = account[0]; + passBox.Text = account[1]; } private void okBtn_Click(object sender, EventArgs e) @@ -36,8 +40,16 @@ if(broadband) writer.SetValue("settings", "broadband", "yes"); else writer.SetValue("settings", "broadband", "no"); + + writer.SetValue("settings", "tienUser", userBox.Text); + writer.SetValue("settings", "tienPassword", passBox.Text); } this.Dispose(true); } + + private void button1_Click(object sender, EventArgs e) + { + this.Dispose(true); + } } } \ No newline at end of file Added: trunk/plugins/UitzendingGemist/UitGemist/MultipartForm.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/MultipartForm.cs (rev 0) +++ trunk/plugins/UitzendingGemist/UitGemist/MultipartForm.cs 2007-07-25 13:37:32 UTC (rev 761) @@ -0,0 +1,337 @@ +using System; +using System.Net; +using System.Text; +using System.IO; +using System.Collections; +using MediaPortal.GUI.Library; + +namespace MediaPortal.GUI.UitGemist +{ + /// <summary> + /// Allow the transfer of data files using the W3C's specification + /// for HTTP multipart form data. Microsoft's version has a bug + /// where it does not format the ending boundary correctly. + /// Written by: gre...@no... + /// </summary> + public class MultipartForm + { + /// <summary> + /// Holds any form fields and values that you + /// wish to transfer with your data. + /// </summary> + private ArrayList coFormFields; + /// <summary> + /// Used mainly to avoid passing parameters to other routines. + /// Could have been local to sendFile(). + /// </summary> + protected HttpWebRequest coRequest; + /// <summary> + /// Used if we are testing and want to output the raw + /// request, minus http headers, out to a file. + /// </summary> + System.IO.Stream coFileStream; + /// <summary> + /// Difined to build the form field data that is being + /// passed along with the request. + /// </summary> + static string CONTENT_DISP = "Content-Disposition: form-data; name="; + /// <summary> + /// Allows you to specify the specific version of HTTP to use for uploads. + /// The dot NET stuff currently does not allow you to remove the continue-100 header + /// from 1.1 and 1.0 currently has a bug in it where it adds the continue-100. MS + /// has sent a patch to remove the continue-100 in HTTP 1.0. + /// </summary> + public Version TransferHttpVersion + {get{return coHttpVersion;}set{coHttpVersion=value;}} + Version coHttpVersion; + + /// <summary> + /// Used to change the content type of the file being sent. + /// Currently defaults to: text/xml. Other options are + /// text/plain or binary + /// </summary> + public string FileContentType + {get{return coFileContentType;}set{coFileContentType=value;}} + string coFileContentType; + + /// <summary> + /// Initialize our class for use to send data files. + /// </summary> + /// <param name="url">The web address of the recipient of the data transfer.</param> + public MultipartForm(string url) + { + URL = url; + coFormFields = new ArrayList(); + ResponseText = new StringBuilder(); + BufferSize = 1024 * 10; + BeginBoundary = "---------------------------4089736519495"; + TransferHttpVersion = HttpVersion.Version11; + } + //---------- BEGIN PROPERTIES SECTION ---------- + string _BeginBoundary; + /// <summary> + /// The string that defines the begining boundary of + /// our multipart transfer as defined in the w3c specs. + /// This method also sets the Content and Ending + /// boundaries as defined by the w3c specs. + /// </summary> + public string BeginBoundary + { + get{return _BeginBoundary;} + set + { + _BeginBoundary =value; + ContentBoundary = "--" + BeginBoundary; + EndingBoundary = ContentBoundary + "--"; + } + } + /// <summary> + /// The string that defines the content boundary of + /// our multipart transfer as defined in the w3c specs. + /// </summary> + protected string ContentBoundary + {get{return _ContentBoundary;}set{_ContentBoundary=value;}} + string _ContentBoundary; + /// <summary> + /// The string that defines the ending boundary of + /// our multipart transfer as defined in the w3c specs. + /// </summary> + protected string EndingBoundary + {get{return _EndingBoundary;}set{_EndingBoundary=value;}} + string _EndingBoundary; + /// <summary> + /// The cookies returned to us after the transfer is completed. + /// </summary> + public string ResponseCookies + { get { return _ResponseCookies; } set { _ResponseCookies = value; } } + string _ResponseCookies; + /// <summary> + /// The data returned to us after the transfer is completed. + /// </summary> + public StringBuilder ResponseText + {get{return _ResponseText;}set{_ResponseText=value;}} + StringBuilder _ResponseText; + /// <summary> + /// The web address of the recipient of the transfer. + /// </summary> + public string URL + {get{return _URL;}set{_URL = value;}} + string _URL; + /// <summary> + /// Allows us to determine the size of the buffer used + /// to send a piece of the file at a time out the IO + /// stream. Defaults to 1024 * 10. + /// </summary> + public int BufferSize + {get{return _BufferSize;}set{_BufferSize = value;}} + int _BufferSize; + //---------- END PROPERTIES SECTION ---------- + /// <summary> + /// Used to signal we want the output to go to a + /// text file verses being transfered to a URL. + /// </summary> + /// <param name="path"></param> + public void setFilename(string path) + { + coFileStream = new System.IO.FileStream(path,FileMode.Create,FileAccess.Write); + } + /// <summary> + /// Allows you to add some additional field data to be + /// sent along with the transfer. This is usually used + /// for things like userid and password to validate the + /// transfer. + /// </summary> + /// <param name="key">The form field name</param> + /// <param name="str">The form field value</param> + public void setField(string key, string str) + { + coFormFields.Add(new string[]{key,str}); + } + /// <summary> + /// Determines if we have a file stream set, and returns either + /// the HttpWebRequest stream of the file. + /// </summary> + /// <returns></returns> + public virtual System.IO.Stream getStream() + { + System.IO.Stream io; + if( null == coFileStream ) + io = coRequest.GetRequestStream(); + else + io = coFileStream; + return io; + } + /// <summary> + /// Here we actually make the request to the web server and + /// retrieve it's response into a text buffer. + /// </summary> + public virtual void getResponse() + { + if( null == coFileStream ) + { + System.IO.Stream io; + HttpWebResponse oResponse; + + oResponse = (HttpWebResponse)coRequest.GetResponse(); + if( null != oResponse ) + { + _ResponseCookies = oResponse.GetResponseHeader("Set-Cookie"); + io = oResponse.GetResponseStream(); + StreamReader sr = new StreamReader(io); + string str; + ResponseText.Length = 0; + while( (str = sr.ReadLine()) != null ) + ResponseText.Append(str); + oResponse.Close(); + } + else + throw new Exception("MultipartForm: Error retrieving server response"); + } + } + /// <summary> + /// Transmits a file to the web server stated in the + /// URL property. You may call this several times and it + /// will use the values previously set for fields and URL. + /// </summary> + /// <param name="aFilename">The full path of file being transfered.</param> + public void sendFile(string aFilename) + { + // The live of this object is only good during + // this function. Used mainly to avoid passing + // around parameters to other functions. + coRequest = (HttpWebRequest) WebRequest.Create(URL); + // Set use HTTP 1.0 or 1.1. + coRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; nl; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5"; + coRequest.ProtocolVersion = TransferHttpVersion; + coRequest.Method = "POST"; + coRequest.ContentType = "multipart/form-data; boundary=" + BeginBoundary; + coRequest.KeepAlive = true; + string strFields = getFormfields(); + string strFileHdr = getFileheader(aFilename); + string strFileTlr = getFiletrailer(); + FileInfo info = new FileInfo(aFilename); + coRequest.ContentLength = strFields.Length + + strFileHdr.Length + + strFileTlr.Length + + info.Length; + System.IO.Stream io; + io = getStream(); + writeString(io,strFields); + writeString(io,strFileHdr); + this.writeFile(io, aFilename); + writeString(io,strFileTlr); + getResponse(); + io.Close(); + // End the life time of this request object. + coRequest = null; + } + + public void sendForm() + { + // The live of this object is only good during + // this function. Used mainly to avoid passing + // around parameters to other functions. + coRequest = (HttpWebRequest)WebRequest.Create(URL); + // Set use HTTP 1.0 or 1.1. + coRequest.ProtocolVersion = TransferHttpVersion; + coRequest.AllowAutoRedirect = false; + coRequest.MaximumAutomaticRedirections = 30; + coRequest.Method = "POST"; + coRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; nl; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5"; + coRequest.ContentType = "multipart/form-data; boundary=" + BeginBoundary; + coRequest.KeepAlive = true; + string strFields = getFormfields(); + string strTlr = getTrailer(); + coRequest.ContentLength = strFields.Length + strTlr.Length; + System.IO.Stream io; + io = getStream(); + writeString(io, strFields); + writeString(io, strTlr); + getResponse(); + io.Close(); + // End the life time of this request object. + coRequest = null; + } + /// <summary> + /// Mainly used to turn the string into a byte buffer and then + /// write it to our IO stream. + /// </summary> + /// <param name="io">The io stream for output.</param> + /// <param name="str">The data to write.</param> + public void writeString(System.IO.Stream io, string str) + { + byte[] PostData = System.Text.Encoding.ASCII.GetBytes(str); + io.Write(PostData,0,PostData.Length); + } + /// <summary> + /// Builds the proper format of the multipart data that + /// contains the form fields and their respective values. + /// </summary> + /// <returns>The data to send in the multipart upload.</returns> + public string getFormfields() + { + string str=""; + IEnumerator myEnumerator = coFormFields.GetEnumerator(); + while ( myEnumerator.MoveNext() ) + { + string[] field = (string[]) myEnumerator.Current; + str += ContentBoundary + "\r\n" + + CONTENT_DISP + '"' + field[0] + "\"\r\n\r\n" + + field[1] + "\r\n"; + } + return str; + } + /// <summary> + /// Returns the proper content information for the + /// file we are sending. + /// </summary> + /// <remarks> + /// Hits Patel reported a bug when used with ActiveFile. + /// Added semicolon after sendfile to resolve that issue. + /// Tested for compatibility with IIS 5.0 and Java. + /// </remarks> + /// <param name="aFilename"></param> + /// <returns></returns> + public string getFileheader(string aFilename) + { + return ContentBoundary + "\r\n" + + CONTENT_DISP + + "\"sendfile\"; filename=\"" + + Path.GetFileName(aFilename) + "\"\r\n" + + "Content-type: " + FileContentType + "\r\n\r\n"; + } + /// <summary> + /// Creates the proper ending boundary for the multipart upload. + /// </summary> + /// <returns>The ending boundary.</returns> + public string getFiletrailer() + { + return "\r\n" + EndingBoundary; + } + + public string getTrailer() + { + return EndingBoundary + "\r\n"; + } + + /// <summary> + /// Reads in the file a chunck at a time then sends it to the + /// output stream. + /// </summary> + /// <param name="io">The io stream to write the file to.</param> + /// <param name="aFilename">The name of the file to transfer.</param> + public void writeFile(System.IO.Stream io, string aFilename) + { + FileStream readIn = new FileStream(aFilename, FileMode.Open, FileAccess.Read); + readIn.Seek(0, SeekOrigin.Begin); // move to the start of the file + byte[] fileData = new byte[BufferSize]; + int bytes; + while( (bytes = readIn.Read(fileData,0, BufferSize)) > 0 ) + { + // read the file data and send a chunk at a time + io.Write(fileData,0,bytes); + } + readIn.Close(); + } + } +} Modified: trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs 2007-07-24 23:02:23 UTC (rev 760) +++ trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs 2007-07-25 13:37:32 UTC (rev 761) @@ -254,9 +254,8 @@ UrlsSecondScreen.Clear(); ViewFavorieten = false; - string result = wc.GetUrl(url, true); + string result = wc.GetUrl(url); - int i = 0; MatchCollection mc = Regex.Matches(result, @"title.\shref=.(?<url>.*?).>(?<name>.*?)<"); foreach (Match m in mc) @@ -365,12 +364,13 @@ Match m = Regex.Match(MainUrlBody, "id=." + search + ".*?</select>", RegexOptions.Singleline); string temp = m.Value; - MatchCollection mc = Regex.Matches(temp, @"value=.(?<url>\d*).*?.>(?<name>.*?)<"); + MatchCollection mc = Regex.Matches(temp, @"value=.(?<url>\d*).*?.>(?<name>.*?)<", RegexOptions.Singleline); foreach (Match m1 in mc) { NavUrls.Add("http://www.uitzendinggemist.nl/index.php/selectie?searchitem=" + search + "&" + search + "=" + m1.Groups["url"].Value); NavNames.Add(m1.Groups["name"].Value); } + NavNames.RemoveAt(0); NavUrls.RemoveAt(0); } @@ -484,7 +484,7 @@ string result = m.Value; int i = 0; - MatchCollection mc = Regex.Matches(result, @"img\ssrc=.(?<image>.*?.png).*?href=.(?<url2>/index.php.*?).\s.*?>(?<name>.*?)<"); + MatchCollection mc = Regex.Matches(result, @"<a\shref=.(?<url2>.*?).\sclass=.title.*?img\ssrc=.(?<image>.*?.png).*?class=.title.>(?<name>.*?)</a>", RegexOptions.Singleline); foreach (Match m1 in mc) { ImageUrls.Add(@"http://www.uitzendinggemist.nl"+m1.Groups["image"].Value); @@ -496,7 +496,7 @@ i++; } i = 0; - mc = Regex.Matches(result, @"(http://player.*?).\starget"); + mc = Regex.Matches(result, @"(http://player.*?).\starget", RegexOptions.Singleline); foreach(Match m1 in mc) { Urls.Add(m1.Groups[1].Value); @@ -504,7 +504,7 @@ i++; } i= 0; - mc = Regex.Matches(result, @"margin:5px..>(.*?)<"); + mc = Regex.Matches(result, @"margin:5px..>(.*?)<", RegexOptions.Singleline); foreach (Match m1 in mc) { Plot.Add(m1.Groups[1].Value); Modified: trunk/plugins/UitzendingGemist/UitGemist/NLSecondScreen.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/NLSecondScreen.cs 2007-07-24 23:02:23 UTC (rev 760) +++ trunk/plugins/UitzendingGemist/UitGemist/NLSecondScreen.cs 2007-07-25 13:37:32 UTC (rev 761) @@ -112,7 +112,7 @@ Waardering.Clear(); StreamUrl.Clear(); - string result = NLGemist.wc.GetUrl(url, true); + string result = NLGemist.wc.GetUrl(url); result = NLGemist.ConvertString(result); //get image @@ -143,7 +143,7 @@ if (moreEmissions) { string series2url = url.Replace(@"/index.php/serie", @"/index.php/serie2"); - GetAfleveringen(NLGemist.wc.GetUrl(series2url, true), out moreEmissions); + GetAfleveringen(NLGemist.wc.GetUrl(series2url), out moreEmissions); } } Modified: trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs 2007-07-24 23:02:23 UTC (rev 760) +++ trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs 2007-07-25 13:37:32 UTC (rev 761) @@ -455,7 +455,7 @@ //sw.Close(); int i = 0; - MatchCollection mc = Regex.Matches(result, @"target=._parent.*?href=.(?<url>.*?.xml).*?>(?<name>.*?)</a>"); + MatchCollection mc = Regex.Matches(result, @"<a.*?href=.(?<url>.*?.xml).*?>(?<name>.*?)</a>"); if (mc.Count == 0) Log.Info("UitGemist: No emissions found"); foreach (Match m1 in mc) { Modified: trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs 2007-07-24 23:02:23 UTC (rev 760) +++ trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs 2007-07-25 13:37:32 UTC (rev 761) @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Text; +using System.Text.RegularExpressions; using System.Threading; using MediaPortal.Dialogs; using MediaPortal.GUI.Library; @@ -15,10 +16,8 @@ private string result = String.Empty; private string workUrl = String.Empty; private bool _workerCompleted = true; - private bool Cookies = false; - private string agent = "Mozilla/4.0 (compatible; MSIE 6.0; WindowsNT 5.0; .NET CLR 1 .1.4322)"; + private string agent = "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)"; private string postType = "application/x-www-form-urlencoded"; - private string secondUrl = String.Empty; private HttpWebRequest firstRequest = null; private HttpWebResponse firstResponse = null; private Stream recstream = null; @@ -67,10 +66,9 @@ return result; } - public string GetUrl(string url, bool useCookies) + public string GetTienUrl(string url, bool showWait) { - Cookies = useCookies; - secondUrl = url; + workUrl = url; if (_workerCompleted) { @@ -78,18 +76,26 @@ BackgroundWorker worker = new BackgroundWorker(); - worker.DoWork += new DoWorkEventHandler(DownloadWorker); + worker.DoWork += new DoWorkEventHandler(TienDownloadWorker); worker.RunWorkerAsync(url); using (WaitCursor cursor = new WaitCursor()) { while (_workerCompleted == false) - GUIWindowManager.Process(); + { + if(showWait) GUIWindowManager.Process(); + } } } return result; } + public string GetTienUrl(string url) + { + return GetTienUrl(url, true); + } + + private void XMLDownloadWorker(object sender, DoWorkEventArgs e) { System.Uri url = new System.Uri(workUrl); @@ -100,7 +106,7 @@ { WebClient client = new WebClient(); client.Encoding = Encoding.GetEncoding("iso-8859-1"); - client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); + client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)"); Stream data = client.OpenRead(url); StreamReader reader = new StreamReader(data,client.Encoding); result = reader.ReadToEnd(); @@ -118,39 +124,85 @@ } } - public void DownloadWorker(object sender, DoWorkEventArgs e) + public void TienDownloadWorker(object sender, DoWorkEventArgs e) { - if (Cookies==false) + // Make the request + HttpWebRequest firstRequest = (HttpWebRequest)WebRequest.Create(workUrl); + firstRequest.UserAgent = agent; + firstRequest.ContentType = postType; + firstRequest.CookieContainer = new CookieContainer(); + + string[] account = getTienAccount(); + + Cookie c = new Cookie(); + c.Domain = "www.tien.tv"; + c.Name = "u"; + c.Value = account[0]; + firstRequest.CookieContainer.Add(c); + + Cookie c2 = new Cookie(); + c2.Domain = "www.tien.tv"; + c2.Name = "p"; + c2.Value = account[1]; + firstRequest.CookieContainer.Add(c2); + + Cookie c3 = new Cookie(); + c3.Domain = "www.tien.tv"; + c3.Name = "loggedinsession"; + c3.Value = "true"; + firstRequest.CookieContainer.Add(c3); + + // Add login cookies, if any + if (TienLogin.loginCookies != null) { - firstRequest = (HttpWebRequest)WebRequest.Create(workUrl); - firstRequest.UserAgent = agent; - firstRequest.ContentType = postType; - firstRequest.CookieContainer = new CookieContainer(); - firstResponse = (HttpWebResponse) - firstRequest.GetResponse(); - recstream = firstResponse.GetResponseStream(); + string[] cookie = TienLogin.loginCookies.Split(new char[] { '=', ';' }); + Cookie c4 = new Cookie(); + c4.Domain = "www.tien.tv"; + c4.Name = cookie[0]; + c4.Value = cookie[1]; + c4.Path = cookie[cookie.Length - 1]; + firstRequest.CookieContainer.Add(c4); } - if (Cookies == true) - { - HttpWebRequest secondRequest = (HttpWebRequest)WebRequest.Create(secondUrl); - secondRequest.UserAgent = agent; - secondRequest.ContentType = postType; - secondRequest.CookieContainer = new CookieContainer(); - //Cookie c = new Cookie(); - //c.Domain = "player.omroep.nl"; - //c.Name = "player_instellingen"; - //c.Value = "formaat:wmv&kwaliteit:bb"; + HttpWebResponse firstResponse = (HttpWebResponse)firstRequest.GetResponse(); + recstream = firstResponse.GetResponseStream(); + + readResult(); + firstResponse.Close(); + _workerCompleted = true; + } - //secondRequest.CookieContainer.Add(c); + public void DownloadWorker(object sender, DoWorkEventArgs e) + { - CookieCollection cookies = firstResponse.Cookies; - secondRequest.CookieContainer.Add(cookies); + firstRequest = (HttpWebRequest)WebRequest.Create(workUrl); + firstRequest.UserAgent = agent; + firstRequest.ContentType = postType; + firstRequest.CookieContainer = new CookieContainer(); - HttpWebResponse secondResponse = (HttpWebResponse)secondRequest.GetResponse(); - recstream = secondResponse.GetResponseStream(); - //secondResponse.Close(); - } + Cookie c = new Cookie(); + c.Domain = "www.uitzendinggemist.nl"; + c.Name = "CheckUGCookie"; + c.Path = "/index.php/"; + c.Value = "true"; + firstRequest.CookieContainer.Add(c); + + Cookie c2 = new Cookie(); + c2.Domain = "www.uitzendinggemist.nl"; + c2.Name = "UGSES"; + c2.Value = "i6e59muv44i4h6m9lfa1h1lip6"; + firstRequest.CookieContainer.Add(c2); + + firstResponse = (HttpWebResponse) + firstRequest.GetResponse(); + recstream = firstResponse.GetResponseStream(); + + readResult(); + _workerCompleted = true; + } + + public void readResult() + { StringBuilder sb = new StringBuilder(); byte[] buf = new byte[8192]; @@ -169,11 +221,9 @@ } while (count > 0); + recstream.Close(); + result = sb.ToString(); - Cookies = false; - //recstream.Close(); - - _workerCompleted = true; } public string DownloadImage(string url) @@ -182,13 +232,15 @@ { WebClient wc = new WebClient(); string filename = url.Substring(url.LastIndexOf("/") + 1); + wc.DownloadFile(url, @"thumbs\MPTemp-" + filename); while (System.IO.File.Exists(@"thumbs\MPTemp-" + filename) != true) GUIWindowManager.Process(); return @"thumbs\MPTemp-" + filename; } - catch (Exception) + catch (Exception e) { + Log.Info(e.Message); return string.Empty; } } @@ -201,6 +253,18 @@ return reader.GetValueAsBool("settings", "broadband", true); } } + + public static string[] getTienAccount() + { + string dir = Directory.GetCurrentDirectory(); + using (MediaPortal.Profile.Settings reader = new MediaPortal.Profile.Settings(dir + @"\UitGemist.xml", false)) + { + string[] s = new string[2]; + s[0] = reader.GetValueAsString("settings", "tienUser", ""); + s[1] = reader.GetValueAsString("settings", "tienPassword", ""); + return s; + } + } } } Modified: trunk/plugins/UitzendingGemist/UitGemist/TienGemist.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/TienGemist.cs 2007-07-24 23:02:23 UTC (rev 760) +++ trunk/plugins/UitzendingGemist/UitGemist/TienGemist.cs 2007-07-25 13:37:32 UTC (rev 761) @@ -16,10 +16,11 @@ { struct Program { - public string name; - public string ep; - public string date; - public string link; + public string name; + public string ep; + public string date; + public string link; + public string desc; } public class TienGemist : GUIWindow @@ -107,7 +108,9 @@ } if (control == facadeview) { - TienSecondScreen.Url = ((Program) favs[facadeview.SelectedListItemIndex]).link; + Program pSelected = (Program) progs[facadeview.SelectedListItemIndex]; + TienSecondScreen.ProgTitle = pSelected.name; + TienSecondScreen.Url = pSelected.link; GUIWindowManager.ActivateWindow(6804); } base.OnClicked(controlId, control, actionType); @@ -176,22 +179,30 @@ private void GetUitzendingen() { progs.Clear(); + ViewFavorieten = false; + ViewTopFifty = false; - string result = wc.GetXML(rootPage); + string result = TienGemist.wc.GetTienUrl(rootPage); + + Match m = Regex.Match(result, @"<select\sclass=.gx_overrules_selectionWidth.\sname=.selector_2.*?>(?<data>.*?)</select>", RegexOptions.Singleline); + result = "<root>" + m.Groups["data"].Value + "</root>"; + result = Regex.Replace(result, "<!--.*?-->", "", RegexOptions.Singleline); + result = result.Replace("SELECTED", ""); + result = result.Replace("&", "&"); + try { XPathDocument document = new XPathDocument(new System.IO.StringReader(result)); XPathNavigator navigator = document.CreateNavigator(); - XPathExpression programs = XPathExpression.Compile("//select[name='selector_2']//option"); //returns nodeset with rows per program + XPathExpression programs = XPathExpression.Compile("//option[position() != 1]"); //returns nodeset with rows per program - XPathNodeIterator nodes = navigator.Select(programs); while (nodes.MoveNext()) { XPathNavigator node = nodes.Current; Program p = new Program(); - p.name = node.SelectSingleNode(".").Value; + p.name = node.SelectSingleNode(".").Value.Trim(); p.link = node.SelectSingleNode("./@value").Value; progs.Add(p); } @@ -211,25 +222,44 @@ progs.Clear(); ViewFavorieten = false; - string result = wc.GetXML(url); + string result = wc.GetTienUrl(url); + Match m = Regex.Match(result,@"<div\sclass=.Element_4xflow.>(?<data>.*?)</div>",RegexOptions.Singleline); + result = "<root>" + m.Groups["data"].Value + "</root>"; + result = result.Replace("&", "&"); + + //FileStream fs = new FileStream("d:\\huh.txt", FileMode.Create, FileAccess.Write); + //StreamWriter sw = new StreamWriter(fs); + //try + //{ + // sw.Write(result); + //} + //finally + //{ + // if (sw != null) { sw.Close(); } + //} + try { XPathDocument document = new XPathDocument(new System.IO.StringReader(result)); XPathNavigator navigator = document.CreateNavigator(); - XPathExpression programs = XPathExpression.Compile("//table[class='Program']//tr"); //returns nodeset with rows per program - - + XPathExpression programs = XPathExpression.Compile("//table//tr"); //returns nodeset with rows per program + XPathNodeIterator nodes = navigator.Select(programs); while (nodes.MoveNext()) { - XPathNavigator node = nodes.Current; - Program p = new Program(); - p.name = node.SelectSingleNode("./td[1]/h1").Value; - p.ep = node.SelectSingleNode("./td[1]/h2").Value; - p.date = node.SelectSingleNode("./td[2]/h2").Value; - p.link = node.SelectSingleNode("./td[2]/a/@href").Value; - progs.Add(p); + try + { + XPathNavigator node = nodes.Current; + Program p = new Program(); + p.name = node.SelectSingleNode("./td[1]/h1").Value; + p.ep = node.SelectSingleNode("./td[1]/h2").Value; + p.date = node.SelectSingleNode("./td[2]/h2").Value; + p.link = node.SelectSingleNode("./td[2]/a/@href").Value; + progs.Add(p); + } + catch (NullReferenceException) { /* Last line only contains 1 td, so just ignore */ } } + Log.Info("UitGemist: Finished loading programs"); } catch (XmlException e) { @@ -243,14 +273,63 @@ public static string GetPlayUrl(string url) { - string page = wc.GetUrl(url); - Regex r = new Regex(@"var url =.(?<url>.*?);", RegexOptions.Multiline); + string[] login = ShowWaitCursor.getTienAccount(); + if (login[0].Trim().Equals("") || login[1].Trim().Equals("")) + { + GUIDialogOK pDlgOK = (GUIDialogOK)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_OK); + if (pDlgOK != null) + { + pDlgOK.SetHeading("Geen login gevonden"); + pDlgOK.SetLine(1, "U dient eerst uw inloggegevens in te"); + pDlgOK.SetLine(2, "voeren het het configuratiescherm"); + pDlgOK.DoModal(GUIWindowManager.ActiveWindowEx); + } + return null; + } + Log.Info("Trying to play: " + url); + + string page = wc.GetTienUrl(rootUrl + url); + Regex r = new Regex(@"var\surl\s=\s.(?<url>.*?).;", RegexOptions.Singleline); + Match m = r.Match(page); - Log.Debug("" + m.Success); - url = m.Groups[1].Value; - Log.Debug("url length:" + url.Length); - Log.Debug(url); + + int i = 0; + while (i<2 && !m.Success) + { + //Try to login + TienLogin.login(); + page = wc.GetTienUrl(rootUrl + url); + + //FileStream fs = new FileStream("d:\\huh.txt", FileMode.Create, FileAccess.Write); + //StreamWriter sw = new StreamWriter(fs); + //try + //{ + // sw.Write(page); + //} + //finally + //{ + // if (sw != null) { sw.Close(); } + //} + + m = r.Match(page); + i++; + } + + if (!m.Success) + { + GUIDialogOK pDlgOK = (GUIDialogOK)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_OK); + if (pDlgOK != null) + { + pDlgOK.SetHeading("Inloggen mislukt"); + pDlgOK.SetLine(1, "Controleer uw inloggegevens"); + pDlgOK.DoModal(GUIWindowManager.ActiveWindowEx); + } + return null; + } + + url = m.Groups["url"].Value; + //Log.Info("Found URL: " + url); url = ConvertString(url); return url; @@ -259,18 +338,20 @@ /// Fills the facadeview with item /// </summary> /// <param name="names">labels for the items</param> - private void ShowList(ArrayList progs) + private void ShowList(ArrayList progz) { - ViewTopFifty = false; facadeview.View = GUIFacadeControl.ViewMode.List; facadeview.Clear(); - foreach (Object o in progs) + + foreach (Object o in progz) { Program p = (Program)o; GUIListItem item = new GUIListItem(); item.Label = p.name; - if(p.ep != null) item.Label2 = p.ep; - if(p.date != null) item.Label3 = p.date; + + String date = p.date; + if (date != null) item.Label2 = date.Substring(0,date.LastIndexOf(" ")); + //if(p.ep != null) item.Label3 = p.ep; item.IsFolder = true; Util.Utils.SetDefaultIcons(item); facadeview.Add(item); @@ -369,6 +450,7 @@ /// </summary> private void ShowTopFifty() { + ViewTopFifty = true; GetUitzending(rootPage); } @@ -389,7 +471,5 @@ } - - - + } \ No newline at end of file Added: trunk/plugins/UitzendingGemist/UitGemist/TienLogin.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/TienLogin.cs (rev 0) +++ trunk/plugins/UitzendingGemist/UitGemist/TienLogin.cs 2007-07-25 13:37:32 UTC (rev 761) @@ -0,0 +1,90 @@ +using System.Net; +using System.Text; +using System.IO; +using System; +using MediaPortal.Dialogs; +using MediaPortal.GUI.Library; + +namespace MediaPortal.GUI.UitGemist +{ + public class TienLogin + { + public static string loginCookies; + + public static bool login() + { + /** + * <form name="f177717f" + * action="http://www.tien.tv/web/form" + * method="post" encType="multipart/form-data"> + * + * <input type="hidden" name="ff" value="432453" /> + *<input type="hidden" name="abort" value="" /> + *<input type="hidden" name="formpartcode" value="abort"/> + *<input type="hidden" name="formelement" value="432453" /> + *<input type="hidden" name="element" value="177717" /> + *<input type="hidden" name="form" value="432414" /> + *<input type="hidden" name="pageid" value="54581" /> + *<input type="hidden" name="originalurl" value="http://www.tien.tv/web/show?id=54585&langid=43&aflid=8747&cfe=432453&ff=432453&progid=1923&show=true" /> + *<input type="hidden" name="errorurl" value="http://www.tien.tv/web/show?id=54585&langid=43&aflid=8747&cfe=432453&ff=432453&formerror=432453&progid=1923&show=true" /> + *<INPUT type="hidden" value="f432473" name="formpartcode"/> + *<INPUT type="hidden" value="$USERNAME$" name="f432473" /> + *<INPUT type="hidden" value="f432474" name="formpartcode"/> + *<INPUT type="hidden" value="$PASSWORD$" name="f432474" /> + *<INPUT type="hidden" value="f432479" name="formpartcode"/> + */ + string[] login = ShowWaitCursor.getTienAccount(); + + MultipartForm mp = new MultipartForm("http://www.tien.tv/web/form"); + mp.setField("ff", "432453"); + mp.setField("abort", ""); + mp.setField("formpartcode", "abort"); + mp.setField("formelement", "432453"); + mp.setField("element", "177717"); + mp.setField("form", "432414"); + mp.setField("pageid", "54581"); + mp.setField("originalurl", "http://www.tien.tv/web/show?id=54585&langid=43&aflid=8747&cfe=432453&ff=432453&progid=1923&show=true"); + mp.setField("errorurl", "http://www.google.nl"); + mp.setField("formpartcode", "f432473"); + mp.setField("f432473", login[0]); + mp.setField("formpartcode", "f432474"); + mp.setField("f432474", login[1]); + mp.setField("formpartcode", "f432479"); + mp.sendForm(); + loginCookies = mp.ResponseCookies; + + return true; + } + + public static bool logout() + { + //Not implemented yet; + return true; + } + + public static byte[] getFile(string filePath) + { + FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); + BinaryReader br = new BinaryReader(fs); + + byte[] fileRD = br.ReadBytes((int)fs.Length); + + br.Close(); + fs.Close(); + + return fileRD; + } + + public static byte[] StrToByteArray(string str) + { + System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); + return encoding.GetBytes(str); + } + + public static string ByteArrayToStr(byte[] dBytes) + { + System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); + return enc.GetString(dBytes); + } + } +} Modified: trunk/plugins/UitzendingGemist/UitGemist/TienSecondScreen.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/TienSecondScreen.cs 2007-07-24 23:02:23 UTC (rev 760) +++ trunk/plugins/UitzendingGemist/UitGemist/TienSecondScreen.cs 2007-07-25 13:37:32 UTC (rev 761) @@ -1,5 +1,5 @@ using System; -using System.Collections.Generic; +using System.Collections; using System.Collections.Specialized; using System.Text; using System.Text.RegularExpressions; @@ -7,6 +7,9 @@ using MediaPortal.Player; using MediaPortal.Dialogs; using MediaPortal.Playlists; +using System.Xml; +using System.Xml.XPath; +using System.IO; namespace MediaPortal.GUI.UitGemist { @@ -17,25 +20,14 @@ protected GUIListControl listview = null; [SkinControlAttribute(3)] protected GUIImage image = null; - //[SkinControlAttribute(3)] - //protected GUIImage imgPrgramma = null; - //[SkinControlAttribute(4)] - //protected GUILabelControl lblGenre = null; - //[SkinControlAttribute(5)] - //protected GUILabelControl lblOmroep = null; - //[SkinControlAttribute(6)] - //protected GUISelectButtonControl btnRubriek = null; - //#endregion public static string Url = string.Empty; - public static bool ViewVideo = false; - private string imageurl = string.Empty; - private StringCollection Datum = new StringCollection(); - private StringCollection Omschrijving = new StringCollection(); - private StringCollection Views = new StringCollection(); - private StringCollection Waardering = new StringCollection(); - private StringCollection StreamUrl = new StringCollection(); + public static string ProgTitle = string.Empty; + private string imageurl = string.Empty; + private int lastSelectedIndex = -1; + private ArrayList eps = new ArrayList(); + public override int GetID { get @@ -55,20 +47,24 @@ protected override void OnPageLoad() { - if (ViewVideo) - { - NLGemist.wc.GetUrl("http://www.uitzendinggemist.nl"); - GetInfo(Url); - ViewVideo = false; - } - else - { - GetInfo(Url); - } + lastSelectedIndex = -1; + GUIPropertyManager.SetProperty("#title", ProgTitle); + GUIPropertyManager.SetProperty("#plot", ""); + GetInfo(Url); Showlist(); base.OnPageLoad(); } + public override void OnAction(Action action) + { + if (action.wID == Action.ActionType.ACTION_STOP) + { + g_Player.Stop(); + } + + else base.OnAction(action); + } + protected override void OnPageDestroy(int new_windowId) { image.FileName = GUIGraphicsContext.Skin + @"\media\background.png"; @@ -80,11 +76,11 @@ if (control == listview) { string mmsurl = string.Empty; - mmsurl = NLGemist.GetPlayUrl(StreamUrl[listview.SelectedListItemIndex]); + mmsurl = TienGemist.GetPlayUrl(((Program)eps[listview.SelectedListItemIndex]).link); + if (mmsurl == null) return; GUIGraphicsContext.IsFullScreenVideo = true; GUIWindowManager.ActivateWindow((int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO); g_Player.FullScreen = true; - ViewVideo = true; g_Player.Play(mmsurl); } base.OnClicked(controlId, control, actionType); @@ -94,10 +90,23 @@ { if (message.Message == GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS || message.Message == GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS_CHANGED) { - if (listview.SelectedListItemIndex != -1) + int itemIndex = listview.SelectedListItemIndex; + if (itemIndex != lastSelectedIndex && itemIndex < listview.Count && itemIndex > -1) { - GUIPropertyManager.SetProperty("#rating", Waardering[listview.SelectedListItemIndex]); - GUIPropertyManager.SetProperty("#plotoutline", Omschrijving[listview.SelectedListItemIndex]); + // Get episode plot + + Program pSelected = (Program)eps[itemIndex]; + if (pSelected.desc == null) + { + string ep = TienGemist.wc.GetTienUrl(TienGemist.rootUrl + pSelected.link, false); + Match m = Regex.Match(ep, @"<p\sclass=.progomschrijving.>(?<plot>.*?)</p>", RegexOptions.Singleline); + + string desc = m.Groups["plot"].Value.Replace("<br>", "\n"); + if (desc != null) pSelected.desc = desc; + else pSelected.desc = ""; + } + GUIPropertyManager.SetProperty("#plot", pSelected.desc); + lastSelectedIndex = itemIndex; } } return base.OnMessage(message); @@ -105,107 +114,60 @@ private void GetInfo(string url) { - Datum.Clear(); - Views.Clear(); - Omschrijving.Clear(); - Waardering.Clear(); - StreamUrl.Clear(); + eps.Clear(); - string result = NLGemist.wc.GetUrl(url, true); - result = NLGemist.ConvertString(result); + string result = TienGemist.wc.GetTienUrl(TienGemist.rootUrl + url); - //get image - Match m = Regex.Match(result, @"<img\ssrc=.(http://gids.omroep.nl.*?.png)"); - imageurl = m.Groups[1].Value; - image.FileName = NLGemist.wc.DownloadImage(imageurl); + // Get the plot first + Match m = Regex.Match(result, @"<p\sclass=.progomschrijving.>(?<plot>.*?)</p>", RegexOptions.Singleline); + GUIPropertyManager.SetProperty("#plot", m.Groups["plot"].Value.Replace("<br>","\n")); - //get Programma-Naam - m = Regex.Match(result, @"<title>(.*?)</title>"); - GUIPropertyManager.SetProperty("#title", m.Groups[1].Value); + m = Regex.Match(result, @"<select\sclass=.gx_overrules_selectionWidth.\sname=.selector_3.*?>(?<data>.*?)</select>", RegexOptions.Singleline); + result = "<root>" + m.Groups["data"].Value + "</root>"; + result = Regex.Replace(result, "<!--.*?-->", "", RegexOptions.Singleline); + result = result.Replace("SELECTED", ""); + result = result.Replace("&", "&"); - //get Programma-omschrijving - m = Regex.Match(result, @"<p\sstyle=.margin-top.5px..>(.*?)<", RegexOptions.Singleline); - GUIPropertyManager.SetProperty("#plot", m.Groups[1].Value); - - //get Genre - m = Regex.Match(result, @"genre</b>.*?title=.(.*?).>", RegexOptions.Singleline); - GUIPropertyManager.SetProperty("#genre", m.Groups[1].Value); - - // get Omproep - m = Regex.Match(result, @"omroep</b>.*?title=.(.*?).>", RegexOptions.Singleline); - GUIPropertyManager.SetProperty("#credits", m.Groups[1].Value); - - // get Afleveringen - m = Regex.Match(result, @"tbody\sid=.afleveringen.>(.*?)</tbody>", RegexOptions.Singleline); - if (m.Success) + try { - string afleveringen = m.Groups[1].Value; + XPathDocument document = new XPathDocument(new System.IO.StringReader(result)); + XPathNavigator navigator = document.CreateNavigator(); + XPathExpression programs = XPathExpression.Compile("//option[position() != 1]"); //returns nodeset with rows per program - //get datum - MatchCollection mc = Regex.Matches(afleveringen, @"(\d{2}-\d{2}-\d{4})</td>"); - foreach (Match m1 in mc) + XPathNodeIterator nodes = navigator.Select(programs); + while (nodes.MoveNext()) { - Datum.Add(m1.Groups[1].Value); + XPathNavigator node = nodes.Current; + Program p = new Program(); + p.date = node.SelectSingleNode(".").Value.Trim(); + p.link = node.SelectSingleNode("./@value").Value; + eps.Add(p); } - - //get omschrijving - mc = Regex.Matches(afleveringen, @"(.*?).<a\shref=./index"); - foreach (Match m1 in mc) - { - Omschrijving.Add(m1.Groups[1].Value); - } - - //get views - mc = Regex.Matches(afleveringen, @"right.>(\d.*)... [truncated message content] |
From: <moi...@us...> - 2007-12-13 16:40:26
|
Revision: 1155 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=1155&view=rev Author: moiristo Date: 2007-12-13 08:37:04 -0800 (Thu, 13 Dec 2007) Log Message: ----------- Modified Paths: -------------- trunk/plugins/UitzendingGemist/Readme.txt trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.cs trunk/plugins/UitzendingGemist/UitGemist/MultipartForm.cs trunk/plugins/UitzendingGemist/UitGemist/NLGemist.cs trunk/plugins/UitzendingGemist/UitGemist/RTLGemist.cs trunk/plugins/UitzendingGemist/UitGemist/ShowWaitCursor.cs trunk/plugins/UitzendingGemist/UitGemist/UitGemist.csproj trunk/plugins/UitzendingGemist/UitGemist.sln Added Paths: ----------- trunk/plugins/UitzendingGemist/TVGemist_Installer.xmp trunk/plugins/UitzendingGemist/UitGemist/Favorites.cs trunk/plugins/UitzendingGemist/UitGemist/NLGemistEmissionInfo.cs trunk/plugins/UitzendingGemist/UitGemist/StringUtils.cs trunk/plugins/UitzendingGemist/UitGemist/TVGemistMain.cs trunk/plugins/UitzendingGemist/UitGemist/TVGemistPlugin.cs trunk/plugins/UitzendingGemist/skin/BlueTwo/ trunk/plugins/UitzendingGemist/skin/BlueTwo/Media/ trunk/plugins/UitzendingGemist/skin/BlueTwo/Media/hover_tvgemist.png trunk/plugins/UitzendingGemist/skin/BlueTwo/Media/tvgemist_hover_nlgemist.png trunk/plugins/UitzendingGemist/skin/BlueTwo/Media/tvgemist_hover_rtlgemist.png trunk/plugins/UitzendingGemist/skin/BlueTwo/Media/tvgemist_nlgemist.png trunk/plugins/UitzendingGemist/skin/BlueTwo/Media/tvgemist_nlgemist_logo.png trunk/plugins/UitzendingGemist/skin/BlueTwo/Media/tvgemist_rtlgemist.png trunk/plugins/UitzendingGemist/skin/BlueTwo/Media/tvgemist_rtlgemist_logo.png trunk/plugins/UitzendingGemist/skin/BlueTwo/tvgemist_main.xml trunk/plugins/UitzendingGemist/skin/BlueTwo/tvgemist_rtlgemist.xml trunk/plugins/UitzendingGemist/skin/BlueTwo/tvgemist_uitzendinggemist.xml trunk/plugins/UitzendingGemist/skin/BlueTwo/tvgemist_uitzendinggemist_info.xml trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/ trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/Media/ trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/Media/hover_tvgemist.png trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/Media/tvgemist_hover_nlgemist.png trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/Media/tvgemist_hover_rtlgemist.png trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/Media/tvgemist_nlgemist.png trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/Media/tvgemist_nlgemist_logo.png trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/Media/tvgemist_rtlgemist.png trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/Media/tvgemist_rtlgemist_logo.png trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/tvgemist_main.xml trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/tvgemist_rtlgemist.xml trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/tvgemist_uitzendinggemist.xml trunk/plugins/UitzendingGemist/skin/BlueTwo Wide/tvgemist_uitzendinggemist_info.xml Removed Paths: ------------- trunk/plugins/UitzendingGemist/UitGemist/NLSecondScreen.cs trunk/plugins/UitzendingGemist/UitGemist/TienGemist.cs trunk/plugins/UitzendingGemist/UitGemist/TienLogin.cs trunk/plugins/UitzendingGemist/UitGemist/TienSecondScreen.cs trunk/plugins/UitzendingGemist/UitGemist/UitGemistMain.cs trunk/plugins/UitzendingGemist/UitGemist/UitGemistPlugin.cs Modified: trunk/plugins/UitzendingGemist/Readme.txt =================================================================== --- trunk/plugins/UitzendingGemist/Readme.txt 2007-12-13 14:45:39 UTC (rev 1154) +++ trunk/plugins/UitzendingGemist/Readme.txt 2007-12-13 16:37:04 UTC (rev 1155) @@ -3,23 +3,42 @@ This plugin for MediaPortal makes it possible to browse and watch the -internet streams provided by uitzendinggemist.nl,www.rtl.nl and tien.tv. +internet streams provided by uitzendinggemist.nl and www.rtl.nl. -This plugin is a frontend to the website and allows the user watch these streams from within Mediaportal. - installation: -- Use Dukus's MPInstaller utility (available in the plugins/utilities download section) to install the plugin +- Use Dukus's MediaPortal Installer utility (available in the MP root directory) to install the plugin usage: -- First go to the configuration pane and choose default speed -- To be able to watch Tien emissions: - - Get an account at http://www.tien.tv (it's free!) - - Enter the account data in the 'Tien Account' tab +- Go to the configuration pane and choose default speed +- Try it out! + thanks: A big thanks to ZipperZip for letting me use his original Uitzending_Gemist Plugin code. +version history: + +1.0 + +- Removed support for Tien Gemist + +- Added series and films to RTL Gemist. I have tried viewing DRM series or films (everything has DRM, except GTST), which will give you (as in your browser) a popup screen that asks you to call a number. I do not know whether these streams will work when you make call. I hate the fact that DRM makes debugging very expensive :D You could try though, it would probably work. + +- Changed filenames of images, settings and skin files. They now all start with tvgemist_. Just to organize, but you can also delete the plugin easier (if you'd really want to, of course ) + +- Selecting VMR9 indeed doesn't seem to work. the plugin described at http://forum.team-mediaportal.com/windowsmediaplayerosd_process_plugin-t26655.html will however give you OSD for seeking in the stream (After install, check it first in the Configuration). + +- g_player.Play(url) > g_player.PlayAudioStream(url, true) + +- Navigation path for RTL Gemist + +- Modified (improved is a big word) the UI for BlueTwo and BlueTwo Wide. The MPI does not contain skin files for other skins yet. However, since the UI is very simple, you can use these for other skins. By deleting the hover_tvgemist.png file from the Media directory you can prevent the blue BlueTwo icon from being shown. + +TODO: +- Debug the timeout problem. I tried to reproduce this, but it didn't timeout, even after 5 mins... +- Frontends to other websites? + 0.9 - Added support for Tien Gemist! - Some minor changes Added: trunk/plugins/UitzendingGemist/TVGemist_Installer.xmp =================================================================== --- trunk/plugins/UitzendingGemist/TVGemist_Installer.xmp (rev 0) +++ trunk/plugins/UitzendingGemist/TVGemist_Installer.xmp 2007-12-13 16:37:04 UTC (rev 1155) @@ -0,0 +1,247 @@ +<MPinstaler> + <ver>1.00.000</ver> + <FileList> + <File> + <FileName>hover_tvgemist.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo\Media\hover_tvgemist.png</Source> + <Id>02020</Id> + <Option /> + <Guid>51edc05e-c680-4609-a8ea-aed6e65567b0</Guid> + </File> + <File> + <FileName>hover_tvgemist.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo wide</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo wide\Media\hover_tvgemist.png</Source> + <Id>02020</Id> + <Option /> + <Guid>7eba0539-a09f-4f86-935a-775529e490ac</Guid> + </File> + <File> + <FileName>Readme.txt</FileName> + <Type>Text</Type> + <SubType>Ream_me</SubType> + <Source>Readme.txt</Source> + <Id>03010</Id> + <Option /> + <Guid>804cdfca-9505-4591-ac9c-1efb7c8a4380</Guid> + </File> + <File> + <FileName>tvgemist_hover_nlgemist.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo\Media\tvgemist_hover_nlgemist.png</Source> + <Id>02020</Id> + <Option /> + <Guid>e98f6238-8aba-4d6c-9f9e-185995e76b0e</Guid> + </File> + <File> + <FileName>tvgemist_hover_nlgemist.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo wide</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo wide\Media\tvgemist_hover_nlgemist.png</Source> + <Id>02020</Id> + <Option /> + <Guid>bb6dd6cd-7e73-47ff-bc70-0317e2e98688</Guid> + </File> + <File> + <FileName>tvgemist_hover_rtlgemist.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo\Media\tvgemist_hover_rtlgemist.png</Source> + <Id>02020</Id> + <Option /> + <Guid>1444728f-3c18-4599-b1b8-51513ee74bee</Guid> + </File> + <File> + <FileName>tvgemist_hover_rtlgemist.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo wide</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo wide\Media\tvgemist_hover_rtlgemist.png</Source> + <Id>02020</Id> + <Option /> + <Guid>4f1eaf39-a8f5-4e80-9a78-0a12298cbce9</Guid> + </File> + <File> + <FileName>tvgemist_main.xml</FileName> + <Type>Skin</Type> + <SubType>BlueTwo</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo\tvgemist_main.xml</Source> + <Id>02010</Id> + <Option /> + <Guid>2e967641-d818-4e66-b542-ce1c54a27a79</Guid> + </File> + <File> + <FileName>tvgemist_main.xml</FileName> + <Type>Skin</Type> + <SubType>BlueTwo wide</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo wide\tvgemist_main.xml</Source> + <Id>02010</Id> + <Option /> + <Guid>dd5bc888-bee1-4727-bd8d-29b958559538</Guid> + </File> + <File> + <FileName>tvgemist_nlgemist.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo\Media\tvgemist_nlgemist.png</Source> + <Id>02020</Id> + <Option /> + <Guid>95f91ec8-4d0c-44d2-8b70-6edd9cb7fdb1</Guid> + </File> + <File> + <FileName>tvgemist_nlgemist.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo wide</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo wide\Media\tvgemist_nlgemist.png</Source> + <Id>02020</Id> + <Option /> + <Guid>0ba53a8d-47a6-4359-8acc-5d37f77acee0</Guid> + </File> + <File> + <FileName>tvgemist_nlgemist_logo.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo\Media\tvgemist_nlgemist_logo.png</Source> + <Id>02020</Id> + <Option /> + <Guid>49c10c87-3950-4c04-8050-0006d50b3532</Guid> + </File> + <File> + <FileName>tvgemist_nlgemist_logo.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo wide</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo wide\Media\tvgemist_nlgemist_logo.png</Source> + <Id>02020</Id> + <Option /> + <Guid>01dfdd97-8815-4d34-8969-c0d3a0d72aeb</Guid> + </File> + <File> + <FileName>tvgemist_rtlgemist.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo\Media\tvgemist_rtlgemist.png</Source> + <Id>02020</Id> + <Option /> + <Guid>7015384b-2bb2-454d-87e9-b2e9f38a4d31</Guid> + </File> + <File> + <FileName>tvgemist_rtlgemist.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo wide</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo wide\Media\tvgemist_rtlgemist.png</Source> + <Id>02020</Id> + <Option /> + <Guid>89a4eea6-d0ec-48c1-b4a0-b062c9da0628</Guid> + </File> + <File> + <FileName>tvgemist_rtlgemist.xml</FileName> + <Type>Skin</Type> + <SubType>BlueTwo</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo\tvgemist_rtlgemist.xml</Source> + <Id>02010</Id> + <Option /> + <Guid>06af95ed-1067-48a4-8991-c0e0b9489179</Guid> + </File> + <File> + <FileName>tvgemist_rtlgemist.xml</FileName> + <Type>Skin</Type> + <SubType>BlueTwo wide</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo wide\tvgemist_rtlgemist.xml</Source> + <Id>02010</Id> + <Option /> + <Guid>0e64671c-f5cb-40f9-abba-b7be56707a36</Guid> + </File> + <File> + <FileName>tvgemist_rtlgemist_logo.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo\Media\tvgemist_rtlgemist_logo.png</Source> + <Id>02020</Id> + <Option /> + <Guid>7748aed4-67b3-4fc1-8907-e8fb0b20e7d6</Guid> + </File> + <File> + <FileName>tvgemist_rtlgemist_logo.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo wide</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo wide\Media\tvgemist_rtlgemist_logo.png</Source> + <Id>02020</Id> + <Option /> + <Guid>6a17f6f0-eb6d-4663-b6fe-c90b2b6c36c6</Guid> + </File> + <File> + <FileName>tvgemist_uitzendinggemist.xml</FileName> + <Type>Skin</Type> + <SubType>BlueTwo</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo\tvgemist_uitzendinggemist.xml</Source> + <Id>02010</Id> + <Option /> + <Guid>43a06ac4-9ee1-4bb5-82a6-43e668722caa</Guid> + </File> + <File> + <FileName>tvgemist_uitzendinggemist.xml</FileName> + <Type>Skin</Type> + <SubType>BlueTwo wide</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo wide\tvgemist_uitzendinggemist.xml</Source> + <Id>02010</Id> + <Option /> + <Guid>5daa325f-d99b-4e84-8350-b36aaf3525e9</Guid> + </File> + <File> + <FileName>tvgemist_uitzendinggemist_info.xml</FileName> + <Type>Skin</Type> + <SubType>BlueTwo</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo\tvgemist_uitzendinggemist_info.xml</Source> + <Id>02010</Id> + <Option /> + <Guid>0e00e316-4707-413c-9127-5f9504ecfc5f</Guid> + </File> + <File> + <FileName>tvgemist_uitzendinggemist_info.xml</FileName> + <Type>Skin</Type> + <SubType>BlueTwo wide</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Skin\BlueTwo wide\tvgemist_uitzendinggemist_info.xml</Source> + <Id>02010</Id> + <Option /> + <Guid>fb585457-b86d-46b4-8896-bb6b9eefdf38</Guid> + </File> + <File> + <FileName>UitGemist.dll</FileName> + <Type>Plugin</Type> + <SubType>Window</SubType> + <Source>C:\Program Files\Team MediaPortal\MediaPortal\Plugins\Windows\UitGemist.dll</Source> + <Id>01010</Id> + <Option /> + <Guid>dba232b2-ccfa-4ced-9ce0-74b88e3b37d0</Guid> + </File> + </FileList> + <StringList /> + <Actions /> + <SetupGroups /> + <SetupGroupMappings /> + <Option> + <BuildFileName /> + <ProiectFileName>D:\MediaPortal\devel\TVGemist_Installer.xmp</ProiectFileName> + <ProiectName>TV Gemist</ProiectName> + <Author>Moiristo</Author> + <UpdateURL>http://www.team-mediaportal.com</UpdateURL> + <Version>1.0</Version> + <Description>TV Gemist is a plugin for Dutch MediaPortal users. It provides a frontend for UitzendingGemist.nl and RtlGemist.nl</Description> + <Group>Web</Group> + <Release>Stable </Release> + <Logo>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</Logo> + </Option> + <Properties> + <MPMaxVersion>0.2.3</MPMaxVersion> + <MPMinVersion>0.2.2</MPMinVersion> + <MinExtensionVersion /> + <MaxExtensionVersion /> + <ForumURL>http://forum.team-mediaportal.com/uitzendinggemist_nl_plugin_v2-t18930.html</ForumURL> + <WebURL /> + <CreationDate>Thursday, December 13, 2007 12:00:00 AM</CreationDate> + <SingleGroupSelect>False</SingleGroupSelect> + </Properties> +</MPinstaler> \ No newline at end of file Modified: trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs 2007-12-13 14:45:39 UTC (rev 1154) +++ trunk/plugins/UitzendingGemist/UitGemist/ConfigurationForm.Designer.cs 2007-12-13 16:37:04 UTC (rev 1155) @@ -31,19 +31,14 @@ this.sbBtn = new System.Windows.Forms.RadioButton(); this.bbBtn = new System.Windows.Forms.RadioButton(); this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.rtlHiBpsBox = new System.Windows.Forms.CheckBox(); this.okBtn = new System.Windows.Forms.Button(); this.button1 = new System.Windows.Forms.Button(); this.tabControl1 = new System.Windows.Forms.TabControl(); this.Speed = new System.Windows.Forms.TabPage(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.passBox = new System.Windows.Forms.MaskedTextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.userBox = new System.Windows.Forms.TextBox(); this.groupBox1.SuspendLayout(); this.tabControl1.SuspendLayout(); this.Speed.SuspendLayout(); - this.tabPage2.SuspendLayout(); this.SuspendLayout(); // // sbBtn @@ -51,10 +46,10 @@ ... [truncated message content] |
From: <moi...@us...> - 2008-01-17 01:30:18
|
Revision: 1255 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=1255&view=rev Author: moiristo Date: 2008-01-16 17:30:00 -0800 (Wed, 16 Jan 2008) Log Message: ----------- Version 1.1: Favorites fix, g_Player.PlayAudioStream for all streams, renamed project Added Paths: ----------- trunk/plugins/UitzendingGemist/TVGemist.sln trunk/plugins/UitzendingGemist/skin/Xface/ trunk/plugins/UitzendingGemist/skin/Xface/Media/ trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_hover_nlgemist.png trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_hover_rtlgemist.png trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_nlgemist.png trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_nlgemist_logo.png trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_rtlgemist.png trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_rtlgemist_logo.png trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_main.xml trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_rtlgemist.xml trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_uitzendinggemist.xml trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_uitzendinggemist_info.xml Removed Paths: ------------- trunk/plugins/UitzendingGemist/UitGemist/ trunk/plugins/UitzendingGemist/UitGemist.sln Added: trunk/plugins/UitzendingGemist/TVGemist.sln =================================================================== --- trunk/plugins/UitzendingGemist/TVGemist.sln (rev 0) +++ trunk/plugins/UitzendingGemist/TVGemist.sln 2008-01-17 01:30:00 UTC (rev 1255) @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C# Express 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVGemist", "TVGemist\TVGemist.csproj", "{ED97F6CB-D6CB-4503-97BB-CD1F3FA8D9D2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {ED97F6CB-D6CB-4503-97BB-CD1F3FA8D9D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ED97F6CB-D6CB-4503-97BB-CD1F3FA8D9D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ED97F6CB-D6CB-4503-97BB-CD1F3FA8D9D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ED97F6CB-D6CB-4503-97BB-CD1F3FA8D9D2}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal Deleted: trunk/plugins/UitzendingGemist/UitGemist.sln =================================================================== --- trunk/plugins/UitzendingGemist/UitGemist.sln 2008-01-16 17:15:21 UTC (rev 1254) +++ trunk/plugins/UitzendingGemist/UitGemist.sln 2008-01-17 01:30:00 UTC (rev 1255) @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C# Express 2008 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UitGemist", "UitGemist\UitGemist.csproj", "{ED97F6CB-D6CB-4503-97BB-CD1F3FA8D9D2}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {ED97F6CB-D6CB-4503-97BB-CD1F3FA8D9D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED97F6CB-D6CB-4503-97BB-CD1F3FA8D9D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED97F6CB-D6CB-4503-97BB-CD1F3FA8D9D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED97F6CB-D6CB-4503-97BB-CD1F3FA8D9D2}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal Added: trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_hover_nlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_hover_nlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_hover_rtlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_hover_rtlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_nlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_nlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_nlgemist_logo.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_nlgemist_logo.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_rtlgemist.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_rtlgemist.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_rtlgemist_logo.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/UitzendingGemist/skin/Xface/Media/tvgemist_rtlgemist_logo.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_main.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_main.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_main.xml 2008-01-17 01:30:00 UTC (rev 1255) @@ -0,0 +1,45 @@ +<window> + <id>6799</id> + <defaultcontrol>2</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:TV Gemist - Hoofdscherm</define> + <define>#header.image:</define> + <define>#header.hover:hover_tvgemist.png</define> + + <controls> + <import>common.window.xml</import> + + <!-- topmost item needs an onup with a value of 17 for topbar to work --> + <control> + <description>UitzendingGemist.nl</description> + <type>button</type> + <id>2</id> + <width>1150</width> + <height>180</height> + <posX>160</posX> + <posY>140</posY> + <textureNoFocus>tvgemist_nlgemist.png</textureNoFocus> + <textureFocus>tvgemist_hover_nlgemist.png</textureFocus> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <onup>17</onup> + </control> + + <!-- last item needs an ondown with a value of 2 to support wraparound --> + <control> + <description>RTL Gemist</description> + <type>button</type> + <id>3</id> + <posX>160</posX> + <posY>330</posY> + <width>1150</width> + <height>180</height> + <textureNoFocus>tvgemist_rtlgemist.png</textureNoFocus> + <textureFocus>tvgemist_hover_rtlgemist.png</textureFocus> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <ondown>2</ondown> + </control> + + </controls> +</window> Added: trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_rtlgemist.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_rtlgemist.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_rtlgemist.xml 2008-01-17 01:30:00 UTC (rev 1255) @@ -0,0 +1,67 @@ +<window> + <id>6802</id> + <defaultcontrol>50</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:RTL Gemist</define> +<controls> + <import>common.window.xml</import> + <control> + <type>group</type> + <description>group element</description> + + <layout>StackLayout</layout> + <posX>130</posX> + <posY>150</posY> + <control> + <description>Favorieten</description> + <type>button</type> + <id>2</id> + <label>Favorieten</label> + <onup>17</onup> + <ondown>3</ondown> + </control> + <control> + <description>Laatste Tien</description> + <type>button</type> + <id>3</id> + <label>Laatste Tien Video's</label> + <onup>2</onup> + <ondown>4</ondown> + </control> + <control> + <description>Programma's</description> + <type>button</type> + <id>4</id> + <label>Programma's</label> + <onup>3</onup> + <ondown>5</ondown> + </control> + <control> + <description>Programma's</description> + <type>button</type> + <id>5</id> + <label>Series</label> + <onup>4</onup> + <ondown>6</ondown> + </control> + <control> + <description>Programma's</description> + <type>button</type> + <id>6</id> + <label>Films</label> + <onup>5</onup> + <ondown>2</ondown> + </control> + </control> + <control> + <description>Navigation path</description> + <type>label</type> + <id>124</id> + <posX>485</posX> + <posY>675</posY> + <label>#navpath</label> + <textcolor>ffffffff</textcolor> + </control> + <import>common.facade.xml</import> +</controls> +</window> \ No newline at end of file Added: trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_uitzendinggemist.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_uitzendinggemist.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_uitzendinggemist.xml 2008-01-17 01:30:00 UTC (rev 1255) @@ -0,0 +1,116 @@ +<window> + <id>6800</id> + <defaultcontrol>50</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:UitzendingGemist.nl</define> +<controls> + <import>common.window.xml</import> + <control> + <type>group</type> + <description>group element</description> + <layout>StackLayout</layout> + <posX>130</posX> + <posY>150</posY> + <control> + <description>Favorieten</description> + <type>button</type> + <id>2</id> + <label>Favorieten</label> + <onup>17</onup> + <ondown>3</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>3</id> + <label>Titel</label> + <onup>2</onup> + <ondown>4</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>4</id> + <label>Dag</label> + <onup>3</onup> + <ondown>5</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>5</id> + <label>Net/zender</label> + <onup>4</onup> + <ondown>6</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>6</id> + <label>Omroep</label> + <onup>5</onup> + <ondown>7</ondown> + </control> + <control> + <type>selectbutton</type> + <description>Letter button</description> + <id>7</id> + <label>Genre</label> + <onup>6</onup> + <ondown>8</ondown> + </control> + <control> + <description>Moet je Zien</description> + <type>button</type> + <id>8</id> + <label>Moet je zien</label> + <onup>7</onup> + <onright>50</onright> + <ondown>50</ondown> + </control> + <control> + <type>group</type> + <description>group element</description> + <control> + <type>imagelist</type> + <id>11</id> + <posX>1150</posX> + <posY>405</posY> + <width>100</width> + <height>32</height> + <textureWidth>16</textureWidth> + <textureHeight>16</textureHeight> + <subitems> + <subitem>greystar.png</subitem> + <subitem>star.png</subitem> + </subitems> + <orientation>horizontal</orientation> + <align>left</align> + <percentage>#rating</percentage> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>12</id> + <posX>460</posX> + <posY>440</posY> + <width>790</width> + <height>100</height> + <label>#plot</label> + <textcolor>ffffffff</textcolor> + <font>font12</font> + </control> + <control> + <description>Bekeken</description> + <type>label</type> + <id>13</id> + <posX>460</posX> + <posY>400</posY> + <label>#votes keer bekeken</label> + <textcolor>ffffffff</textcolor> + </control> + </control> + </control> + <import>common.facade.xml</import> +</controls> +</window> \ No newline at end of file Added: trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_uitzendinggemist_info.xml =================================================================== --- trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_uitzendinggemist_info.xml (rev 0) +++ trunk/plugins/UitzendingGemist/skin/Xface/tvgemist_uitzendinggemist_info.xml 2008-01-17 01:30:00 UTC (rev 1255) @@ -0,0 +1,113 @@ +<window> + <id>6801</id> + <defaultcontrol>10</defaultcontrol> + <allowoverlay>yes</allowoverlay> + <define>#header.label:Programmainformatie</define> + <controls> + <import>common.window.xml</import> + <control> + <type>group</type> + <description>group element</description> + <control> + <type>image</type> + <description>Program image</description> + <id>3</id> + <posX>200</posX> + <posY>190</posY> + <width>100</width> + <height>75</height> + <texture>background.png</texture> + </control> + <control> + <description>Naam van gekozen programma</description> + <type>label</type> + <id>2</id> + <posX>350</posX> + <posY>145</posY> + <label>#title</label> + </control> + <control> + <description>Rating</description> + <type>label</type> + <id>0</id> + <posX>200</posX> + <posY>285</posY> + <label>Rating</label> + <textcolor>ffffffff</textcolor> + </control> + <control> + <type>imagelist</type> + <id>1</id> + <posX>210</posX> + <posY>320</posY> + <width>100</width> + <height>32</height> + <textureWidth>16</textureWidth> + <textureHeight>16</textureHeight> + <subitems> + <subitem>greystar.png</subitem> + <subitem>star.png</subitem> + </subitems> + <orientation>horizontal</orientation> + <align>left</align> + <percentage>#rating</percentage> + </control> + <control> + <description>Genre</description> + <type>label</type> + <id>0</id> + <posX>200</posX> + <posY>350</posY> + <label>Genre</label> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>Display wich genre</description> + <type>label</type> + <id>4</id> + <posX>210</posX> + <posY>375</posY> + <label>#genre</label> + </control> + <control> + <description>Omroep</description> + <type>label</type> + <id>0</id> + <posX>200</posX> + <posY>415</posY> + <label>Omroep</label> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>Display which omroep</description> + <type>label</type> + <id>5</id> + <posX>210</posX> + <posY>440</posY> + <label>#credits</label> + </control> + <control> + <type>textboxscrollup</type> + <description>Programma-info</description> + <id>6</id> + <posX>380</posX> + <posY>180</posY> + <width>830</width> + <height>90</height> + <label>#plot</label> + <font>font12</font> + <textcolor>ffffffff</textcolor> + </control> + <control> + <description>afleveringen</description> + <type>listcontrol</type> + <id>10</id> + <posX>380</posX> + <posY>290</posY> + <width>790</width> + <height>300</height> + <onup>17</onup> + </control> + </control> + </controls> +</window> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |