|
From: <moi...@us...> - 2007-01-29 21:35:59
|
Revision: 47
http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=47&view=rev
Author: moiristo
Date: 2007-01-29 13:35:54 -0800 (Mon, 29 Jan 2007)
Log Message:
-----------
Add IPTV@UT plugin and VideoLAN plugin
Added Paths:
-----------
trunk/plugins/IPTV@UT/
trunk/plugins/IPTV@UT/IPTV@UT/
trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.Designer.cs
trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.cs
trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.resx
trunk/plugins/IPTV@UT/IPTV@UT/IPTV.cs
trunk/plugins/IPTV@UT/IPTV@UT/IP...@UT...
trunk/plugins/IPTV@UT/IPTV@UT/IPTVPlugin.cs
trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCIO.cs
trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCItem.cs
trunk/plugins/IPTV@UT/IPTV@UT/Properties/
trunk/plugins/IPTV@UT/IPTV@UT/Properties/AssemblyInfo.cs
trunk/plugins/IPTV@UT/IPTV@UT/ShowWaitCursor.cs
trunk/plugins/IPTV@UT/IP...@UT...
trunk/plugins/IPTV@UT/IP...@UT...
trunk/plugins/IPTV@UT/[ Default Skin ]/
trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1/
trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1/MyIPTV.xml
trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1_SVN/
trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1_SVN/MyIPTV.xml
trunk/plugins/IPTV@UT/[ Project Mayhem 3 ]/
trunk/plugins/IPTV@UT/[ Project Mayhem 3 ]/MyIPTV.xml
trunk/plugins/VideoLAN/
trunk/plugins/VideoLAN/ConfigurationForm.cs
trunk/plugins/VideoLAN/ConfigurationForm.resx
trunk/plugins/VideoLAN/IPlayer.cs
trunk/plugins/VideoLAN/InnerVlcWindow.cs
trunk/plugins/VideoLAN/InnerVlcWindow.designer.cs
trunk/plugins/VideoLAN/InnerVlcWindow.resx
trunk/plugins/VideoLAN/NativeLibVlc.cs
trunk/plugins/VideoLAN/VideoLanControl.cs
trunk/plugins/VideoLAN/VideoLanControl.designer.cs
trunk/plugins/VideoLAN/VideoLanControl.resx
trunk/plugins/VideoLAN/VideoLanPlugin.cs
trunk/plugins/VideoLAN/VideoLanPlugin.cs.bak
trunk/plugins/VideoLAN/VlcControl/
trunk/plugins/VideoLAN/VlcControl/IPlayer.cs
trunk/plugins/VideoLAN/VlcControl/InnerVlcWindow.Designer.cs
trunk/plugins/VideoLAN/VlcControl/InnerVlcWindow.cs
trunk/plugins/VideoLAN/VlcControl/NativeLibVlc.cs
trunk/plugins/VideoLAN/VlcControl/VLanControl.csproj
trunk/plugins/VideoLAN/VlcControl/VlcUserControl.Designer.cs
trunk/plugins/VideoLAN/VlcControl/VlcUserControl.cs
trunk/plugins/VideoLAN/VlcControl/VlcUserControl.resx
trunk/plugins/VideoLAN/VlcUserControl.cs
trunk/plugins/VideoLAN/VlcUserControl.designer.cs
trunk/plugins/VideoLAN/VlcUserControl.resx
Added: trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.Designer.cs
===================================================================
--- trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.Designer.cs (rev 0)
+++ trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.Designer.cs 2007-01-29 21:35:54 UTC (rev 47)
@@ -0,0 +1,152 @@
+namespace MediaPortal.GUI.IPTV
+{
+ 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.textBox1 = new System.Windows.Forms.TextBox();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.button1 = new System.Windows.Forms.Button();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.button2 = new System.Windows.Forms.Button();
+ this.textBox2 = new System.Windows.Forms.TextBox();
+ this.button3 = new System.Windows.Forms.Button();
+ this.button4 = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.groupBox2.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(6, 19);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(238, 20);
+ this.textBox1.TabIndex = 0;
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.button1);
+ this.groupBox1.Controls.Add(this.textBox1);
+ this.groupBox1.Location = new System.Drawing.Point(12, 12);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(302, 47);
+ this.groupBox1.TabIndex = 1;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Playlists Folder";
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(250, 19);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(25, 20);
+ this.button1.TabIndex = 1;
+ this.button1.Text = "...";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.button2);
+ this.groupBox2.Controls.Add(this.textBox2);
+ this.groupBox2.Location = new System.Drawing.Point(12, 65);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(302, 47);
+ this.groupBox2.TabIndex = 2;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Text = "Default Playlist";
+ //
+ // button2
+ //
+ this.button2.Location = new System.Drawing.Point(250, 18);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(25, 20);
+ this.button2.TabIndex = 2;
+ this.button2.Text = "...";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // textBox2
+ //
+ this.textBox2.Location = new System.Drawing.Point(6, 19);
+ this.textBox2.Name = "textBox2";
+ this.textBox2.Size = new System.Drawing.Size(238, 20);
+ this.textBox2.TabIndex = 0;
+ //
+ // button3
+ //
+ this.button3.Location = new System.Drawing.Point(18, 134);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(75, 23);
+ this.button3.TabIndex = 3;
+ this.button3.Text = "OK";
+ this.button3.UseVisualStyleBackColor = true;
+ this.button3.Click += new System.EventHandler(this.button3_Click);
+ //
+ // button4
+ //
+ this.button4.Location = new System.Drawing.Point(100, 133);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(75, 23);
+ this.button4.TabIndex = 4;
+ this.button4.Text = "Cancel";
+ this.button4.UseVisualStyleBackColor = true;
+ this.button4.Click += new System.EventHandler(this.button4_Click);
+ //
+ // ConfigurationForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(364, 169);
+ this.Controls.Add(this.button4);
+ this.Controls.Add(this.button3);
+ this.Controls.Add(this.groupBox2);
+ this.Controls.Add(this.groupBox1);
+ this.Name = "ConfigurationForm";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "IPTV@UT Configuration";
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.TextBox textBox2;
+ private System.Windows.Forms.OpenFileDialog openFileDialog1;
+ private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Button button4;
+ }
+}
\ No newline at end of file
Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.Designer.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.cs
===================================================================
--- trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.cs (rev 0)
+++ trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.cs 2007-01-29 21:35:54 UTC (rev 47)
@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.IO;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using MediaPortal.GUI.Library;
+using MediaPortal.Util;
+
+namespace MediaPortal.GUI.IPTV
+{
+ public partial class ConfigurationForm : Form
+ {
+ public ConfigurationForm()
+ {
+ InitializeComponent();
+ textBox1.Text = IPTV.GetPlayListDir();
+ textBox2.Text = IPTV.GetDefaultPlayList();
+ }
+
+ // Path
+ private void button1_Click(object sender, EventArgs e)
+ {
+ folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
+ folderBrowserDialog1.SelectedPath = textBox1.Text;
+ if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
+ {
+ //folderBrowserDialog1.SelectedPath
+ textBox1.Text = folderBrowserDialog1.SelectedPath;
+ }
+ }
+
+ // File
+ private void button2_Click(object sender, EventArgs e)
+ {
+ openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
+ openFileDialog1.Filter = "VLC Playlists (*.vlc)|*.vlc|M3U Playlists (*.m3u)|*.m3u";
+ openFileDialog1.FileName = textBox2.Text;
+ if (!textBox1.Text.Equals("")) openFileDialog1.InitialDirectory = textBox1.Text;
+ if (openFileDialog1.ShowDialog() == DialogResult.OK)
+ {
+ //openFileDialog1.FileName
+ textBox2.Text = openFileDialog1.FileName;
+ }
+ }
+
+ private void button4_Click(object sender, EventArgs e)
+ {
+ //Cancel Button
+ this.Dispose(true);
+ }
+
+ private void button3_Click(object sender, EventArgs e)
+ {
+ //OK Button
+ string dir = Directory.GetCurrentDirectory();
+ using (MediaPortal.Profile.Settings writer = new MediaPortal.Profile.Settings(dir + @"\MyIPTV.xml"))
+ {
+ writer.SetValue("settings", "PlayListDir", textBox1.Text.Trim());
+ writer.SetValue("settings", "DefaultPlayList", textBox2.Text.Trim());
+ }
+ this.Dispose(true);
+ }
+ }
+}
\ No newline at end of file
Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.resx
===================================================================
--- trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.resx (rev 0)
+++ trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.resx 2007-01-29 21:35:54 UTC (rev 47)
@@ -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/IPTV@UT/IPTV@UT/ConfigurationForm.resx
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/IPTV@UT/IPTV.cs
===================================================================
--- trunk/plugins/IPTV@UT/IPTV@UT/IPTV.cs (rev 0)
+++ trunk/plugins/IPTV@UT/IPTV@UT/IPTV.cs 2007-01-29 21:35:54 UTC (rev 47)
@@ -0,0 +1,273 @@
+using MediaPortal.GUI.Library;
+using MediaPortal.Player;
+using MediaPortal.Util;
+using MediaPortal.Dialogs;
+using MediaPortal.Playlists;
+using MediaPortal.VideoLanPlugin;
+using System.Drawing;
+using System.IO;
+
+namespace MediaPortal.GUI.IPTV
+{
+ public class IPTV : GUIWindow
+ {
+ #region SkinControlAttributes
+ [SkinControlAttribute(2)]
+ protected GUIButtonControl btnLoad = null;
+ [SkinControlAttribute(99)]
+ protected GUIVideoControl videoWindow = null;
+ #endregion
+
+ private static PlayList playlist = new PlayList();
+ private static int currentChannel = 0;
+ private static PlayListVLCIO plvi = new PlayListVLCIO();
+ private static VirtualDirectory plDirectory = new VirtualDirectory();
+ private static string playListPath;
+ private static OnActionHandler ah;
+ private static bool inited = false;
+
+ public override int GetID
+ {
+ get
+ {
+ return 7500;
+ }
+ set
+ {
+ base.GetID = value;
+ }
+ }
+
+ public override bool Init()
+ {
+ bool result = Load(GUIGraphicsContext.Skin + @"\MyIPTV.xml");
+
+ playListPath = GetPlayListDir();
+ if (playListPath.Equals("")) playListPath = Directory.GetCurrentDirectory();
+
+ plDirectory.AddExtension(".vlc");
+ plDirectory.AddExtension(".m3u");
+ plDirectory.ShowFilesWithoutExtension = false;
+
+ Share share = new Share();
+ share.Name = "Playlists";
+ share.Path = playListPath;
+ plDirectory.IsRootShare(playListPath);
+
+ if(ah == null) ah = new OnActionHandler(OnAction2);
+
+ return result;
+ }
+
+ public void OnAction2(Action action)
+ {
+ if (GUIWindowManager.ActiveWindowEx == (int) GUIWindow.Window.WINDOW_DIALOG_MENU) return;
+
+ switch (action.wID)
+ {
+ case Action.ActionType.ACTION_PREV_CHANNEL:
+ IPTV.OnPreviousChannel();
+ break;
+ case Action.ActionType.ACTION_PAGE_DOWN:
+ IPTV.OnPreviousChannel();
+ break;
+
+ case Action.ActionType.ACTION_NEXT_CHANNEL:
+ IPTV.OnNextChannel();
+ break;
+ case Action.ActionType.ACTION_PAGE_UP:
+ IPTV.OnNextChannel();
+ break;
+ case Action.ActionType.ACTION_PLAY:
+ Play(currentChannel);
+ break;
+ case Action.ActionType.ACTION_KEY_PRESSED:
+ switch (action.m_key.KeyChar)
+ {
+ case '1':
+ if (playlist.Count > 0) currentChannel = 0;
+ Play(currentChannel);
+ break;
+ case '2':
+ if (playlist.Count > 1) currentChannel = 1;
+ Play(currentChannel);
+ break;
+ case '3':
+ if (playlist.Count > 2) currentChannel = 2;
+ Play(currentChannel);
+ break;
+ case '4':
+ if (playlist.Count > 3) currentChannel = 3;
+ Play(currentChannel);
+ break;
+ case '5':
+ if (playlist.Count > 4) currentChannel = 4;
+ Play(currentChannel);
+ break;
+ case '6':
+ if (playlist.Count > 5) currentChannel = 5;
+ Play(currentChannel);
+ break;
+ case '7':
+ if (playlist.Count > 6) currentChannel = 6;
+ Play(currentChannel);
+ break;
+ case '8':
+ if (playlist.Count > 7) currentChannel = 7;
+ Play(currentChannel);
+ break;
+ case '9':
+ if (playlist.Count > 8) currentChannel = 8;
+ Play(currentChannel);
+ break;
+ }
+ break;
+ }
+ }
+
+ public override void OnAction(Action action)
+ {
+ base.OnAction(action);
+ }
+
+ private static void OnNextChannel()
+ {
+ if (currentChannel + 1 < playlist.Count) Play(++currentChannel);
+ }
+
+ private static void OnPreviousChannel()
+ {
+ if (currentChannel > 0 && currentChannel - 1 < playlist.Count) Play(--currentChannel);
+ }
+
+ protected override void OnClicked(int controlId, GUIControl control, Action.ActionType actionType)
+ {
+ if (control == btnLoad)
+ {
+ if (g_Player.Playing) g_Player.Stop();
+ GUIDialogSelect diag = (GUIDialogSelect)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_SELECT);
+ diag.SetHeading("Choose Playlist");
+ diag.Reset();
+ foreach (GUIListItem item in plDirectory.GetDirectory(playListPath))
+ {
+ if(!item.IsFolder) diag.Add(item.Label);
+ }
+ diag.EnableButton(true);
+ diag.SetButtonLabel("Load Playlist");
+ diag.DoModal(GUIWindowManager.ActiveWindow);
+
+ // and wait till user selects one, then load it immediately
+ string selected = diag.SelectedLabelText;
+
+ if(File.Exists(playListPath + @"\" + selected + ".vlc"))
+ LoadAndPlay(playListPath + @"\" + selected + ".vlc");
+ else LoadAndPlay(playListPath + @"\" + selected + ".m3u");
+ }
+
+ base.OnClicked(controlId, control, actionType);
+ }
+
+ public override bool OnMessage(GUIMessage message)
+ {
+ return base.OnMessage(message);
+ }
+
+
+ protected override void OnPageLoad()
+ {
+ base.OnPageLoad();
+
+ GUIGraphicsContext.OnNewAction -= ah;
+ GUIGraphicsContext.OnNewAction += ah;
+
+ //set video window position
+ if (videoWindow != null)
+ {
+ GUIGraphicsContext.VideoWindow = new Rectangle(videoWindow.XPosition, videoWindow.YPosition, videoWindow.Width, videoWindow.Height);
+ }
+
+ if (!inited)
+ {
+ GUIPropertyManager.SetProperty("#IPTV.View.channel", "");
+ // Read a playlist, if configured, and start playing it
+ LoadAndPlay(GetDefaultPlayList());
+
+ inited = true;
+ }
+
+ }
+
+ protected override void OnPageDestroy(int new_windowId)
+ {
+ if (new_windowId != (int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO) GUIGraphicsContext.OnNewAction -= ah;
+ base.OnPageDestroy(new_windowId);
+ }
+
+ protected override void OnShowContextMenu()
+ {
+ if (playlist.Count == 0) return;
+
+ GUIDialogMenu menu = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
+ menu.Reset();
+
+ menu.SetHeading("Channel List");
+ foreach (PlayListItem item in playlist)
+ menu.Add(item.Description);
+ if (menu.SelectedId == -1) return;
+ else
+ {
+ currentChannel = menu.SelectedId - 1;
+ Play(currentChannel);
+ }
+
+ base.OnShowContextMenu();
+ }
+
+ protected void LoadAndPlay(string plFile)
+ {
+ GUIPropertyManager.SetProperty("#IPTV.View.channel", "");
+ if(plFile.Equals("")) return;
+
+ playlist.Clear();
+ bool result = plvi.Load(playlist, plFile);
+ if (result)
+ {
+ if (currentChannel < playlist.Count) Play(currentChannel);
+ else if (playlist.Count > 0) Play(0);
+ }
+ }
+
+ public static string GetDefaultPlayList()
+ {
+ string plFile;
+ string dir = Directory.GetCurrentDirectory();
+ using (MediaPortal.Profile.Settings reader = new MediaPortal.Profile.Settings(dir + @"\MyIPTV.xml"))
+ {
+ plFile = reader.GetValueAsString("settings", "DefaultPlayList", "");
+ }
+ return plFile;
+ }
+
+ public static string GetPlayListDir()
+ {
+ string plDir;
+ string dir = Directory.GetCurrentDirectory();
+ using (MediaPortal.Profile.Settings reader = new MediaPortal.Profile.Settings(dir + @"\MyIPTV.xml"))
+ {
+ plDir = reader.GetValueAsString("settings", "PlayListDir", "");
+ }
+ return plDir;
+ }
+
+ public static void Play(int plIndex)
+ {
+ if (plIndex > playlist.Count) return;
+
+ PlayListItem item = playlist[plIndex];
+ Log.Info("MyIPTV: Trying to play channel '" + item.Description + "' (" + item.FileName + ").");
+ GUIGraphicsContext.IsFullScreenVideo = false;
+ g_Player.Play(item.FileName);
+ GUIPropertyManager.SetProperty("#IPTV.View.channel", item.Description);
+ }
+ }
+}
\ No newline at end of file
Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/IPTV.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/IPTV@UT/IP...@UT...
===================================================================
--- trunk/plugins/IPTV@UT/IPTV@UT/IP...@UT... (rev 0)
+++ trunk/plugins/IPTV@UT/IPTV@UT/IP...@UT... 2007-01-29 21:35:54 UTC (rev 47)
@@ -0,0 +1,78 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.50727</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{FB58017D-6946-49EB-A0B7-F446BCA01A72}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>MediaPortal.GUI.IPTV</RootNamespace>
+ <AssemblyName>IPTV</AssemblyName>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Core, Version=1.0.2524.28381, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\..\trunk\mediaportal\xbmc\bin\Release\Core.dll</HintPath>
+ </Reference>
+ <Reference Include="Dialogs, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\..\trunk\mediaportal\Dialogs\bin\Release\Dialogs.dll</HintPath>
+ </Reference>
+ <Reference Include="ExternalPlayers, Version=1.0.2543.36238, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\..\trunk\mediaportal\ExternalPlayers\bin\Release\ExternalPlayers.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.DirectoryServices" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Windows.Forms" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="ConfigurationForm.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="ConfigurationForm.Designer.cs">
+ <DependentUpon>ConfigurationForm.cs</DependentUpon>
+ </Compile>
+ <Compile Include="IPTV.cs" />
+ <Compile Include="PlayListVLCIO.cs" />
+ <Compile Include="PlayListVLCItem.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="ShowWaitCursor.cs" />
+ <Compile Include="IPTVPlugin.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="ConfigurationForm.resx">
+ <SubType>Designer</SubType>
+ <DependentUpon>ConfigurationForm.cs</DependentUpon>
+ </EmbeddedResource>
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
\ No newline at end of file
Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/IP...@UT...
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/IPTV@UT/IPTVPlugin.cs
===================================================================
--- trunk/plugins/IPTV@UT/IPTV@UT/IPTVPlugin.cs (rev 0)
+++ trunk/plugins/IPTV@UT/IPTV@UT/IPTVPlugin.cs 2007-01-29 21:35:54 UTC (rev 47)
@@ -0,0 +1,120 @@
+#region Copyright (C) 2005-2006 Team MediaPortal
+
+/*
+ * Copyright (C) 2005-2006 Team MediaPortal
+ * http://www.team-mediaportal.com
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Make; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#endregion
+
+using System;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Net;
+
+using MediaPortal.GUI.Library;
+
+namespace MediaPortal.GUI.IPTV
+{
+ public class IPTVPlugin : ISetupForm, IShowPlugin
+ {
+ // Returns the name of the plugin which is shown in the plugin menu
+ public string PluginName()
+ {
+ return "My IPTV";
+ }
+
+ // Returns the description of the plugin is shown in the plugin menu
+ public string Description()
+ {
+ return "View digital TV channels from an M3U playlist (uses VideoLan external player)";
+ }
+
+ // Returns the author of the plugin which is shown in the plugin menu
+ public string Author()
+ {
+ return "Moiristo";
+ }
+
+ // show the setup dialog
+ public void ShowPlugin()
+ {
+ ConfigurationForm form = new ConfigurationForm();
+ form.ShowDialog();
+ }
+
+ // Indicates whether plugin can be enabled/disabled
+ public bool CanEnable()
+ {
+ return true;
+ }
+
+ // get ID of windowplugin belonging to this setup
+ public int GetWindowId()
+ {
+ return 7500;
+ }
+
+ // Indicates if plugin is enabled by default;
+ public bool DefaultEnabled()
+ {
+ return true;
+ }
+ // indicates if a plugin has its own setup screen
+ public bool HasSetup()
+ {
+ return true;
+ }
+
+ /// <summary>
+ /// If the plugin should have its own button on the main menu of Mediaportal then it
+ /// should return true to this method, otherwise if it should not be on home
+ /// it should return false
+ /// </summary>
+ /// <param name="strButtonText">text the button should have</param>
+ /// <param name="strButtonImage">image for the button, or empty for default</param>
+ /// <param name="strButtonImageFocus">image for the button, or empty for default</param>
+ /// <param name="strPictureImage">subpicture for the button or empty for none</param>
+ /// <returns>true : plugin needs its own button on home
+ /// false : plugin does not need its own button on home</returns>
+ public bool GetHome(out string strButtonText, out string strButtonImage, out string strButtonImageFocus, out string strPictureImage)
+ {
+ string buttonText = GUIPropertyManager.GetProperty("#name");
+ if (buttonText.Equals("")) buttonText = PluginName();
+
+ strButtonText = buttonText;
+ strButtonImage = String.Empty;
+ strButtonImageFocus = String.Empty;
+ strPictureImage = "hover_my tv.png";
+ return true;
+ }
+
+ #region IShowPlugin Members
+
+ public bool ShowDefaultHome()
+ {
+ return true;
+ }
+
+ #endregion
+
+ }
+}
+
+
Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/IPTVPlugin.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCIO.cs
===================================================================
--- trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCIO.cs (rev 0)
+++ trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCIO.cs 2007-01-29 21:35:54 UTC (rev 47)
@@ -0,0 +1,176 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using MediaPortal.Util;
+using MediaPortal.Playlists;
+using MediaPortal.GUI.Library;
+
+namespace MediaPortal.GUI.IPTV
+{
+ public class PlayListVLCIO : IPlayListIO
+ {
+ const string M3U_START_MARKER = "#EXTM3U";
+ const string M3U_INFO_MARKER = "#EXTINF";
+ const string M3U_COMMENT_MARKER = "##";
+ const string VLC_OPT_MARKER = "#EXTVLCOPT";
+
+ public PlayList playlist;
+ private StreamReader file;
+ private string basePath;
+
+ public PlayListVLCIO()
+ {
+ }
+
+ public bool Load(PlayList incomingPlaylist, string playlistFileName)
+ {
+ Log.Info("MyIPTV: Loading " + playlistFileName);
+ if (playlistFileName == null)
+ return false;
+ playlist = incomingPlaylist;
+ playlist.Clear();
+
+ try
+ {
+ playlist.Name = Path.GetFileName(playlistFileName);
+ basePath = Path.GetDirectoryName(Path.GetFullPath(playlistFileName));
+
+ using (file = new StreamReader(playlistFileName))
+ {
+ if (file == null)
+ return false;
+
+ string line = file.ReadLine();
+ if (line == null || line.Length == 0)
+ return false;
+
+ string trimmedLine = line.Trim();
+
+ if (trimmedLine != M3U_START_MARKER)
+ {
+ //This is probably not a valid M3u file
+ return false;
+ }
+
+ Boolean parseChannel = false;
+ PlayListVLCItem currentItem = null;
+ while ((line = file.ReadLine()) != null)
+ {
+ trimmedLine = line.Trim();
+
+ if (trimmedLine.StartsWith(M3U_COMMENT_MARKER) || trimmedLine.Equals(""))
+ {
+ //Just ignore this
+ }
+ else if (trimmedLine.StartsWith(M3U_INFO_MARKER))
+ {
+ parseChannel = true;
+ string channelName = null;
+ int lDuration = 0;
+
+ if (ExtractM3uInfo(trimmedLine, ref channelName, ref lDuration))
+ {
+ currentItem = new PlayListVLCItem(channelName, lDuration);
+ currentItem.Type = PlayListItem.PlayListItemType.VideoStream;
+ }
+ }
+ else if (trimmedLine.StartsWith(VLC_OPT_MARKER))
+ {
+ if (!parseChannel || currentItem == null)
+ {
+ //No EXTINF tag found, give default name
+ parseChannel = true;
+ currentItem = new PlayListVLCItem("Stream " + playlist.Count, -1);
+ currentItem.Type = PlayListItem.PlayListItemType.VideoStream;
+ }
+
+ string option = null;
+ if (ExtractVLCInfo(trimmedLine, ref option))
+ {
+ currentItem.AddOption(option);
+ }
+ }
+ else
+ {
+ //Stream found?
+ if (!parseChannel || currentItem == null)
+ {
+ //No EXTINF tag or EXTVLCOPT found, give default name & no parameters
+ currentItem = new PlayListVLCItem("Stream " + playlist.Count, -1);
+ currentItem.Type = PlayListItem.PlayListItemType.VideoStream;
+ }
+
+ //(TODO: Validate that this really is stream data and not some rubbish)
+ //Filename = StreamName in this case
+ currentItem.FileName = trimmedLine;
+
+ //Add it to the playlist
+ playlist.Add(currentItem);
+
+ //Finally, tell that we just ended parsing a channel
+ parseChannel = false;
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Log.Info("MyIPTV: Exception loading playlist {0} err:{1} stack:{2}", playlistFileName, ex.Message, ex.StackTrace);
+ return false;
+ }
+ return true;
+ }
+
+ private static bool ExtractM3uInfo(string trimmedLine, ref string channelName, ref int lDuration)
+ {
+ //bool successfull;
+ int iColon = (int)trimmedLine.IndexOf(":");
+ int iComma = (int)trimmedLine.IndexOf(",");
+ if (iColon >= 0 && iComma >= 0 && iComma > iColon)
+ {
+ iColon++;
+ string duration = trimmedLine.Substring(iColon, iComma - iColon);
+ iComma++;
+ channelName = trimmedLine.Substring(iComma);
+ lDuration = System.Int32.Parse(duration);
+ return true;
+ }
+ return false;
+ }
+
+ private static bool ExtractVLCInfo(string trimmedLine, ref string option)
+ {
+ //bool successfull;
+ int iColon = (int)trimmedLine.IndexOf(":");
+ if (iColon >= 0)
+ {
+ iColon++;
+ option = trimmedLine.Substring(iColon);
+ return true;
+ }
+ return false;
+ }
+
+ public void Save(PlayList playlist, string fileName)
+ {
+ try
+ {
+ using (StreamWriter writer = new StreamWriter(fileName, false))
+ {
+ writer.WriteLine(M3U_START_MARKER);
+
+ foreach (PlayListItem item in playlist)
+ {
+ writer.WriteLine("{0}:{1},{2}", M3U_INFO_MARKER, item.Duration, item.Description);
+ writer.WriteLine("{0}", item.FileName);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Log.Info("MyIPTV: Failed to save a playlist {0}. err: {1} stack: {2}", fileName, e.Message, e.StackTrace);
+ }
+ }
+ }
+}
Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCIO.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCItem.cs
===================================================================
--- trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCItem.cs (rev 0)
+++ trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCItem.cs 2007-01-29 21:35:54 UTC (rev 47)
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using MediaPortal.Playlists;
+
+namespace MediaPortal.GUI.IPTV
+{
+ class PlayListVLCItem : PlayListItem
+ {
+ protected List<string> _options = new List<string>();
+
+ public PlayListVLCItem(string description, int duration)
+ {
+ if (description == null)
+ return;
+ _description = description;
+ _duration = duration;
+ }
+
+ public List<string> Options
+ {
+ get { return _options; }
+ set
+ {
+ if (value == null)
+ return;
+ _options = value;
+ }
+ }
+
+ public void AddOption(string option)
+ {
+ Options.Add(option);
+ }
+
+ }
+}
Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCItem.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/IPTV@UT/Properties/AssemblyInfo.cs
===================================================================
--- trunk/plugins/IPTV@UT/IPTV@UT/Properties/AssemblyInfo.cs (rev 0)
+++ trunk/plugins/IPTV@UT/IPTV@UT/Properties/AssemblyInfo.cs 2007-01-29 21:35:54 UTC (rev 47)
@@ -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("IPTV")]
+[assembly: AssemblyDescription("IPTV plugin (using VLC) for MediaPortal")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("UT")]
+[assembly: AssemblyProduct("IPTV")]
+[assembly: AssemblyCopyright("Copyright © UT 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("c1930e93-c8e6-486d-bde0-a6faf4753e69")]
+
+// 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.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/Properties/AssemblyInfo.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/IPTV@UT/ShowWaitCursor.cs
===================================================================
--- trunk/plugins/IPTV@UT/IPTV@UT/ShowWaitCursor.cs (rev 0)
+++ trunk/plugins/IPTV@UT/IPTV@UT/ShowWaitCursor.cs 2007-01-29 21:35:54 UTC (rev 47)
@@ -0,0 +1,139 @@
+using System;
+using System.IO;
+using System.Net;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Text;
+using System.Threading;
+using MediaPortal.Dialogs;
+using MediaPortal.GUI.Library;
+
+namespace MediaPortal.GUI.IPTV
+{
+ public class ShowWaitCursor
+ {
+ 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 postType = "application/x-www-form-urlencoded";
+ private string secondUrl = String.Empty;
+ private HttpWebRequest firstRequest = null;
+ private HttpWebResponse firstResponse = null;
+ private Stream recstream = null;
+
+ public string GetUrl(string url)
+ {
+ workUrl = url;
+
+ if (_workerCompleted)
+ {
+ _workerCompleted = false;
+
+ BackgroundWorker worker = new BackgroundWorker();
+
+ worker.DoWork += new DoWorkEventHandler(DownloadWorker);
+ worker.RunWorkerAsync(url);
+
+ using (WaitCursor cursor = new WaitCursor())
+ {
+ while (_workerCompleted == false)
+ GUIWindowManager.Process();
+ }
+ }
+ return result;
+ }
+
+ public string GetUrl(string url, bool useCookies)
+ {
+ Cookies = useCookies;
+ secondUrl = url;
+
+ if (_workerCompleted)
+ {
+ _workerCompleted = false;
+
+ BackgroundWorker worker = new BackgroundWorker();
+
+ worker.DoWork += new DoWorkEventHandler(DownloadWorker);
+ worker.RunWorkerAsync(url);
+
+ using (WaitCursor cursor = new WaitCursor())
+ {
+ while (_workerCompleted == false)
+ GUIWindowManager.Process();
+ }
+ }
+ return result;
+ }
+
+ public void DownloadWorker(object sender, DoWorkEventArgs e)
+ {
+ if (Cookies==false)
+ {
+ firstRequest = (HttpWebRequest)WebRequest.Create(workUrl);
+ firstRequest.UserAgent = agent;
+ firstRequest.ContentType = postType;
+ firstRequest.CookieContainer = new CookieContainer();
+ firstResponse = (HttpWebResponse)
+ firstRequest.GetResponse();
+ recstream = firstResponse.GetResponseStream();
+ }
+ if (Cookies == true)
+ {
+ HttpWebRequest secondRequest = (HttpWebRequest)WebRequest.Create(secondUrl);
+ secondRequest.UserAgent = agent;
+ secondRequest.ContentType = postType;
+ secondRequest.CookieContainer = new CookieContainer();
+ CookieCollection cookies = firstResponse.Cookies;
+ secondRequest.CookieContainer.Add(cookies);
+
+ HttpWebResponse secondResponse = (HttpWebResponse)secondRequest.GetResponse();
+ recstream = secondResponse.GetResponseStream();
+ //secondResponse.Close();
+ }
+ StringBuilder sb = new StringBuilder();
+
+ byte[] buf = new byte[8192];
+
+ string tempstring = null;
+ int count = 0;
+
+ do
+ {
+ count = recstream.Read(buf, 0, buf.Length);
+ if (count != 0)
+ {
+ tempstring = Encoding.UTF8.GetString(buf, 0, count);
+ sb.Append(tempstring);
+ }
+ }
+ while (count > 0);
+
+ result = sb.ToString();
+ Cookies = false;
+ //recstream.Close();
+
+ _workerCompleted = true;
+ }
+
+ public string DownloadImage(string url)
+ {
+ try
+ {
+ 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)
+ {
+ return string.Empty;
+ }
+ }
+
+ }
+}
Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/ShowWaitCursor.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/IP...@UT...
===================================================================
--- trunk/plugins/IPTV@UT/IP...@UT... (rev 0)
+++ trunk/plugins/IPTV@UT/IP...@UT... 2007-01-29 21:35:54 UTC (rev 47)
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPTV@UT", "IPTV@UT\IP...@UT...", "{FB58017D-6946-49EB-A0B7-F446BCA01A72}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {FB58017D-6946-49EB-A0B7-F446BCA01A72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FB58017D-6946-49EB-A0B7-F446BCA01A72}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FB58017D-6946-49EB-A0B7-F446BCA01A72}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FB58017D-6946-49EB-A0B7-F446BCA01A72}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
Property changes on: trunk/plugins/IPTV@UT/IP...@UT...
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/IP...@UT...
===================================================================
(Binary files differ)
Property changes on: trunk/plugins/IPTV@UT/IP...@UT...
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1/MyIPTV.xml
===================================================================
--- trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1/MyIPTV.xml (rev 0)
+++ trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1/MyIPTV.xml 2007-01-29 21:35:54 UTC (rev 47)
@@ -0,0 +1,89 @@
+<window>
+ <id>7500</id>
+
+ <defaultcontrol>2</defaultcontrol>
+
+ <allowoverlay>no</allowoverlay>
+
+ <define>#header.label:My IPTV</define>
+ <define>#header.image:</define>
+ <define>#header.hover:hover_my tv.png</define>
+
+ <controls>
+ <import>common.window.xml</import>
+
+ <control>
+ <type>group</type>
+ <layout>StackLayout</layout>
+ <description>group element</description>
+
+ <posX>60</posX>
+ <posY>97</posY>
+ <control>
+ <description>Load Playlist button</description>
+ <type>button</type>
+ <id>2</id>
+ <label>Load...</label>
+ <onup>17</onup>
+ <ondown>3</ondown>
+ <onright>99</onright>
+ </control>
+ </control>
+
+ <control>
+ <description>TV background</description>
+
+ <type>image</type>
+
+ <id>1</id>
+
+ <posX>281</posX>
+
+ <posY>87</posY>
+
+ <width>396</width>
+
+ <height>335</height>
+
+ <texture>tv_background.png</texture>
+ </control>
+
+ <control>
+ <description>video window</description>
+
+ <type>videowindow</type>
+
+ <id>99</id>
+
+ <posX>300</posX>
+
+ <posY>107</posY>
+
+ <width>350</width>
+
+ <height>260</height>
+
+ <onleft>2</onleft>
+
+ <onright>2</onright>
+
+ <action>18</action>
+
+ <textureFocus>tv_green_border.png</textureFocus>
+ </control>
+
+ <control>
+ <description>Current Channelname</description>
+ <type>fadelabel</type>
+ <id>13</id>
+ <posX>300</posX>
+ <posY>435</posY>
+ <width>350</width>
+ <label>#IPTV.View.channel</label>
+ <font>font13</font>
+ <align>center</align>
+ <textcolor>white</textcolor>
+
+ </control>
+ </controls>
+</window>
\ No newline at end of file
Property changes on: trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1/MyIPTV.xml
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1_SVN/MyIPTV.xml
===================================================================
--- trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1_SVN/MyIPTV.xml (rev 0)
+++ trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1_SVN/MyIPTV.xml 2007-01-29 21:35:54 UTC (rev 47)
@@ -0,0 +1,97 @@
+<window>
+ <id>7500</id>
+
+ <defaultcontrol>2</defaultcontrol>
+
+ <allowoverlay>no</allowoverlay>
+
+ <define>#header.label:My IPTV</define>
+ <define>#header.image:</define>
+ <define>#header.hover:hover_my tv.png</define>
+
+ <controls>
+ <import>common.window.xml</import>
+
+ <control>
+ <type>group</type>
+ <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>
+ <description>group element</description>
+
+ <posX>60</posX>
+ <posY>97</posY>
+ <control>
+ <description>Load Playlist button</description>
+ <type>button</type>
+ <id>2</id>
+ <label>Load...</label>
+ <onup>17</onup>
+ <ondown>3</ondown>
+ <onright>99</onright>
+ </control>
+ </control>
+
+ <control>
+ <description>TV background</description>
+
+ <type>image</type>
+
+ <id>1</id>
+
+ <posX>281</posX>
+
+ <posY>87</posY>
+
+ <width>396</width>
+
+ <height>335</height>
+
+ <texture>tv_background.png</texture>
+ <animation effect="fade" time="250">WindowOpen</animation>
+ <animation effect="fade" time="500">WindowClose</animation>
+ </control>
+
+ <control>
+ <description>video window</description>
+
+ <type>videowindow</type>
+
+ <id>99</id>
+
+ <posX>300</posX>
+
+ <posY>107</posY>
+
+ <width>350</width>
+
+ <height>260</height>
+
+ <onleft>2</onleft>
+
+ <onright>2</onright>
+
+ <action>18</action>
+
+ <textureFocus>tv_green_border.png</textureFocus>
+ <animation effect="fade" time="250">WindowOpen</animation>
+ <animation effect="fade" time="500">WindowClose</animation>
+ </control>
+
+ <control>
+ <description>Current Channelname</description>
+ <type>fadelabel</type>
+ <id>13</id>
+ <posX>300</posX>
+ <posY>435</posY>
+ <width>350</width>
+ <label>#IPTV.View.channel</label>
+ <font>font13</font>
+ <align>center</align>
+ <textcolor>white</textcolor>
+
+ </control>
+ </controls>
+</window>
\ No newline at end of file
Property changes on: trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1_SVN/MyIPTV.xml
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/plugins/IPTV@UT/[ Project Mayhem 3 ]/MyIPTV.xml
===================================================================
--- trunk/plugins/IPTV@UT/[ Project Mayhem 3 ]/MyIPTV.xml (rev 0)
+++ trunk/plugins/IPTV@UT/[ Project Mayhem 3 ]/MyIPTV.xml 2007-01-29 21:35:54 UTC (rev 47)
@@ -0,0 +1,115 @@
+<window>
+ <id>7500</id>
+
+ <defaultcontrol>2</defaultcontrol>
+
+ <allowoverlay>no</allowoverlay>
+
+ <define>#header.label:My IPTV</define>
+ <define>#header.image:</define>
+ <define>#header.hover:hover_my tv.png</define>
+
+ <controls>
+ <import>common.window.xml</import>
+
+ <control>
+ <description>background image</description>
+
+ <type>image</type>
+
+ <id>1</id>
+
+ <posX>0</posX>
+
+ <posY>0</posY>
+
+ <width>720</width>
+
+ <height>576</height>
+
+ <texture>background-xlink16x9.png</texture>
+ </control>
+
+ <control>
+ <type>group</type>
+ <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>
+ ...
[truncated message content] |