|
From: <Ju...@us...> - 2008-05-24 17:08:37
|
Revision: 1808
http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=1808&view=rev
Author: Jupek
Date: 2008-05-24 10:08:34 -0700 (Sat, 24 May 2008)
Log Message:
-----------
Added Paths:
-----------
trunk/plugins/YleAreena/
trunk/plugins/YleAreena/AreenaMedia.cs
trunk/plugins/YleAreena/AreenaUtility.cs
trunk/plugins/YleAreena/GUIAreena.cs
trunk/plugins/YleAreena/GUIAreenaPlugin.cs
trunk/plugins/YleAreena/GUIAreenaSetupForm.Designer.cs
trunk/plugins/YleAreena/GUIAreenaSetupForm.cs
trunk/plugins/YleAreena/GUIAreenaSetupForm.resx
trunk/plugins/YleAreena/Properties/
trunk/plugins/YleAreena/Properties/AssemblyInfo.cs
trunk/plugins/YleAreena/Skin/
trunk/plugins/YleAreena/Skin/YLEAreena.xml
trunk/plugins/YleAreena/YleAreena.csproj
trunk/plugins/YleAreena/YleAreena.sln
trunk/plugins/YleAreena/YleAreena.suo
trunk/plugins/YleAreena/installation_notes.txt
Added: trunk/plugins/YleAreena/AreenaMedia.cs
===================================================================
--- trunk/plugins/YleAreena/AreenaMedia.cs (rev 0)
+++ trunk/plugins/YleAreena/AreenaMedia.cs 2008-05-24 17:08:34 UTC (rev 1808)
@@ -0,0 +1,447 @@
+#region Copyright (C) 2008 Faithflame Productions
+
+/*
+ * Copyright (C) 2008 Faithflame Productions
+ * http://www.faithflame.net
+ *
+ * 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.Net;
+using System.Xml;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading;
+using MediaPortal.Player;
+using MediaPortal.GUI.Library;
+
+namespace MediaPortal.YleAreena
+{
+ /// <summary>
+ /// Summary description for Yle Areena media
+ /// </summary>
+ public class AreenaMedia
+ {
+ public const string videoURLTemplate = "http://www.yle.fi/java/areena/dispatcher/{0}.asx?bitrate=1000000";
+ public static string TempXML = string.Empty;
+ public static string TempHTML = string.Empty;
+
+ public static string[] ClipName = new string[2000];
+ public static string[] ClipURL = new string[2000];
+ public static string[] ClipID = new string[2000];
+ public static string[] ClipPicture = new string[2000]; // strings for section items
+ public static string ProgramInfo = string.Empty;
+ public static string ProgramPoster = string.Empty;
+ public static string PosterUrl = string.Empty;
+
+ // mediaportal.xml
+ public static string server = string.Empty;
+
+ /// <summary>
+ /// Make needed changes to HTML so it work as XML
+ /// </summary>
+ /// <param name="html"></param>
+ /// <returns></returns>
+ private static string convert2XML(string html)
+ {
+ string xmldoc = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>";
+
+ html = html.Replace(" ", "");
+
+ html = html.Replace("&", " ");
+ html = html.Replace("<br>", " ");
+
+ //check img tags that those are okay
+ int start = 0;
+ int end = 0;
+
+ start = html.IndexOf("<img");
+
+ if (start > 0)
+ do
+ {
+ end = html.IndexOf(">", start + 1);
+ if (html.Substring(end-1,1) != "/")
+ html = html.Substring(0,end) + "/" + html.Substring(end);
+
+ start = html.IndexOf("<img",start+1);
+ } while (start > 0);
+
+
+
+ return xmldoc + html;
+ }
+
+ /// <summary>
+ /// Search right part of the HTML
+ /// </summary>
+ /// <param name="tempHTML">Input HTML</param>
+ /// <param name="part">start of the part to be search</param>
+ /// <param name="searchStart">start index</param>
+ /// <returns></returns>
+ private static string searchHTMLSection(string tempHTML, string part, ref int searchStart)
+ {
+ int start = 0;
+ int searchTagPosition = 0;
+ int tagOpen = 1;
+ string tag = "";
+ string HTMLSection = "";
+
+ start = tempHTML.IndexOf(part, searchStart);
+
+ if (start > 0)
+ {
+ searchTagPosition = tempHTML.IndexOf(" ",start);
+ tag = tempHTML.Substring(start+1, searchTagPosition - start-1);
+
+ do
+ {
+ searchTagPosition = tempHTML.IndexOf(tag, searchTagPosition+1);
+
+ if (tempHTML.Substring(searchTagPosition - 1, 1) == "/")
+ tagOpen = tagOpen - 1;
+ else
+ tagOpen = tagOpen + 1;
+
+ if (tagOpen > 200)
+ return ""; //safety break if we fail for some reason
+
+ } while (tagOpen > 0);
+
+ searchTagPosition = tempHTML.IndexOf(">", searchTagPosition +1);
+
+ HTMLSection = tempHTML.Substring(start, searchTagPosition - start+1);
+
+ }
+ searchStart = searchTagPosition + 1;
+
+ return HTMLSection;
+ }
+
+
+ /// <summary>
+ /// Search programlists for common parts on the main page of the service
+ /// </summary>
+ /// <param name="htmlurl">HTML URL</param>
+ /// <param name="part">Section header</param>
+ public static void GetProgramList(string htmlurl, string part)
+ {
+
+ Array.Clear(ClipName, 0, 2000);
+ Array.Clear(ClipURL, 0, 2000);
+ Array.Clear(ClipPicture, 0, 2000);
+ Array.Clear(ClipID, 0, 2000);
+
+ AreenaUtility AU = new AreenaUtility();
+ AU.GetWebPage(htmlurl, out TempHTML);
+
+
+ if (TempHTML == null || TempHTML == string.Empty)
+ return;
+
+ bool sectionFound = false;
+ XmlDocument XmlDoc = new XmlDocument();
+ int searchStart = 0;
+ string sectionTempHTML = "";
+
+ //search right section
+ do
+ {
+
+ sectionTempHTML = searchHTMLSection(TempHTML, "<div class=\"insert list clip-details \">", ref searchStart);
+
+ if (sectionTempHTML == string.Empty)
+ return;
+
+ TempXML = convert2XML(sectionTempHTML);
+
+ XmlDoc.LoadXml(TempXML);
+ if (XmlDoc.SelectSingleNode("/div/h2").InnerText == part)
+ sectionFound = true;
+
+ } while (!sectionFound);
+
+
+ XmlNodeList items = XmlDoc.SelectNodes("/div/ul")[0].ChildNodes;
+ int i = 0;
+ string itemHref = "";
+
+ foreach (XmlNode item in items)
+ {
+
+ XmlNodeList iteminfo = item.ChildNodes;
+
+ foreach (XmlNode info in iteminfo)
+ {
+ switch (info.Attributes["class"].Value)
+ {
+ case "clip-info thumbnail":
+ {
+ ClipPicture[i] = info.ChildNodes[0].ChildNodes[0].Attributes["src"].Value;
+ break;
+ }
+
+ case "clip-info title":
+ {
+ ClipName[i] = ClipName[i] + " " + info.InnerText;
+ break;
+ }
+
+ case "clip-info link-to-media":
+ {
+ ClipName[i] = ClipName[i] + " " + info.InnerText;
+ itemHref = info.ChildNodes[0].Attributes["href"].Value;
+ ClipID[i] = itemHref.Substring(itemHref.LastIndexOf("=")+1);
+ ClipURL[i] = string.Format(videoURLTemplate,ClipID[i]);
+ break;
+ }
+
+ case "clip-info datetime":
+ {
+ ClipName[i] = ClipName[i] + " (" + info.InnerText + ")";
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+ ClipName[i] = ClipName[i].TrimStart(null);
+ i++;
+
+ }
+
+ }
+
+ /// <summary>
+ /// Search program list from that all programs
+ /// </summary>
+ /// <param name="htmlurl">URL to be used</param>
+ public static void GetProgramList(string htmlurl)
+ {
+
+ Array.Clear(ClipName, 0, 2000);
+ Array.Clear(ClipURL, 0, 2000);
+ Array.Clear(ClipPicture, 0, 2000);
+ Array.Clear(ClipID, 0, 2000);
+
+ string baseURL = "";
+ baseURL = htmlurl.Substring(0, htmlurl.IndexOf("/", 8));
+
+
+ AreenaUtility AU = new AreenaUtility();
+ AU.GetWebPage(htmlurl, out TempHTML);
+
+ if (TempHTML == null || TempHTML == string.Empty)
+ return;
+
+ XmlDocument XmlDoc = new XmlDocument();
+ int searchStart = 0;
+ string sectionTempHTML = "";
+
+ sectionTempHTML = searchHTMLSection(TempHTML, "<table class=\"productlist stripe\">", ref searchStart);
+
+ if (sectionTempHTML == string.Empty)
+ return;
+
+ TempXML = convert2XML(sectionTempHTML);
+
+ XmlDoc.LoadXml(TempXML);
+
+ XmlNodeList items = XmlDoc.SelectNodes("/table/tbody")[0].ChildNodes;
+ int i = 0;
+ string itemHref = "";
+
+ foreach (XmlNode item in items)
+ {
+
+ XmlNodeList iteminfo = item.ChildNodes;
+
+ foreach (XmlNode info in iteminfo)
+ {
+ switch (info.Attributes["class"].Value)
+ {
+ case "product":
+ {
+ ClipName[i] = info.InnerText;
+ itemHref = info.ChildNodes[0].Attributes["href"].Value;
+ ClipID[i] = itemHref.Substring(itemHref.LastIndexOf("=") + 1);
+ ClipURL[i] = baseURL + itemHref;
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+ i++;
+
+ }
+
+ }
+
+ /// <summary>
+ /// Get program's recorded list + info
+ /// </summary>
+ /// <param name="htmlurl">URL to be used</param>
+ public static void GetProgramListandInfo(string htmlurl)
+ {
+
+ try
+ {
+
+ ProgramInfo = string.Empty;
+ ProgramPoster = string.Empty;
+
+ Array.Clear(ClipName, 0, 2000);
+ Array.Clear(ClipURL, 0, 2000);
+ Array.Clear(ClipPicture, 0, 2000);
+ Array.Clear(ClipID, 0, 2000);
+
+ AreenaUtility AU = new AreenaUtility();
+ string sectionTempHTML = "";
+ int searchStart = 0;
+ XmlDocument XmlDoc = new XmlDocument();
+
+ AU.GetWebPage(htmlurl, out TempHTML);
+
+ if (TempHTML == null || TempHTML == string.Empty)
+ return;
+
+ sectionTempHTML = searchHTMLSection(TempHTML, "<div class=\"insert highlight visio-box image-on-left \">", ref searchStart);
+
+ if (sectionTempHTML != string.Empty)
+ {
+ TempXML = convert2XML(sectionTempHTML);
+
+ XmlDoc.LoadXml(TempXML);
+
+ try
+ {
+ ProgramInfo = XmlDoc.SelectNodes("/div/div/h4")[0].InnerText;
+ ProgramInfo = ProgramInfo + "\n\n" + XmlDoc.SelectNodes("/div/div/p")[0].InnerText;
+ ProgramPoster = XmlDoc.SelectNodes("/div/img")[0].Attributes["src"].Value;
+ }
+ catch (Exception ex)
+ {
+ //if error happens please continue...
+ }
+ }
+
+ searchStart = 0;
+
+ sectionTempHTML = searchHTMLSection(TempHTML, "<div class=\"paging\">", ref searchStart);
+
+ if (sectionTempHTML == string.Empty)
+ return;
+
+ TempXML = convert2XML(sectionTempHTML);
+
+ XmlDoc.LoadXml(TempXML);
+
+ char[] delimiters = { ' ' };
+
+ int pagecount = XmlDoc.SelectNodes("/div/div/div")[0].InnerText.Replace("\t", "").Replace("\n", "").Trim().Split(delimiters).Length;
+
+ int i = 0;
+
+ for (int page = 1; page < pagecount + 1; page++)
+ {
+
+ AU.GetWebPage(htmlurl + "&s=" + page.ToString(), out TempHTML);
+
+ if (TempHTML == null || TempHTML == string.Empty)
+ return;
+
+ searchStart = 0;
+
+ sectionTempHTML = searchHTMLSection(TempHTML, "<div class=\"insert list clip-details simplier\">", ref searchStart);
+
+ if (sectionTempHTML == string.Empty)
+ return;
+
+ TempXML = convert2XML(sectionTempHTML);
+
+ XmlDoc.LoadXml(TempXML);
+
+ XmlNodeList items = XmlDoc.SelectNodes("/div/ul")[0].ChildNodes;
+ string itemHref = "";
+
+ foreach (XmlNode item in items)
+ {
+
+ XmlNodeList iteminfo = item.ChildNodes;
+
+ foreach (XmlNode info in iteminfo)
+ {
+ switch (info.Attributes["class"].Value)
+ {
+ case "clip-info thumbnail":
+ {
+ ClipPicture[i] = info.ChildNodes[0].ChildNodes[0].Attributes["src"].Value;
+ break;
+ }
+
+ case "clip-info title":
+ {
+ ClipName[i] = ClipName[i] + " " + info.InnerText;
+ break;
+ }
+
+ case "clip-info link-to-media":
+ {
+ ClipName[i] = ClipName[i] + " " + info.InnerText;
+ itemHref = info.ChildNodes[0].Attributes["href"].Value;
+ ClipID[i] = itemHref.Substring(itemHref.LastIndexOf("=") + 1);
+ ClipURL[i] = string.Format(videoURLTemplate, ClipID[i]);
+ break;
+ }
+
+ case "clip-info datetime":
+ {
+ ClipName[i] = ClipName[i] + " (" + info.InnerText + ")";
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+ ClipName[i] = ClipName[i].TrimStart(null);
+ i++;
+
+ }
+
+ }
+
+ }
+ catch (Exception ex)
+ {
+ throw ex;
+ }
+
+ }
+
+ public AreenaMedia()
+ {
+
+ }
+ }
+}
\ No newline at end of file
Added: trunk/plugins/YleAreena/AreenaUtility.cs
===================================================================
--- trunk/plugins/YleAreena/AreenaUtility.cs (rev 0)
+++ trunk/plugins/YleAreena/AreenaUtility.cs 2008-05-24 17:08:34 UTC (rev 1808)
@@ -0,0 +1,132 @@
+#region Copyright (C) 2008 Faithflame Productions
+
+/*
+ * Copyright (C) 2008 Faithflame Productions
+ * http://www.faithflame.net
+ *
+ * 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.Net;
+using System.Text;
+using System.Threading;
+using System.ComponentModel;
+using MediaPortal.GUI.Library;
+using MediaPortal.Util;
+
+namespace MediaPortal.YleAreena
+{
+ /// <summary>
+ /// Summary description for AreenaUtility. Almost a copy from TrailersUtility.cs (from GUITrailers plugin)
+ /// </summary>
+ public class AreenaUtility
+ {
+ string _downloadedText = string.Empty;
+
+ public void GetWebPage(string url, out string HTMLDownload) // Get url and put in string
+ {
+ 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();
+ }
+
+ HTMLDownload = _downloadedText;
+
+ _downloadedText = null;
+ }
+ else
+ {
+ HTMLDownload = string.Empty;
+ }
+ }
+
+ public void DownloadWorker(object sender, DoWorkEventArgs e)
+ {
+ Thread.CurrentThread.Name = "Areena";
+ WebClient wc = new WebClient();
+
+ try
+ {
+ byte[] HTMLBuffer;
+
+ HTMLBuffer = wc.DownloadData((string)e.Argument);
+
+ _downloadedText = Encoding.UTF8.GetString(HTMLBuffer);
+ }
+ catch (Exception ex)
+ {
+
+ Log.Info("YleAreena.DownloadWorker: {0}", ex.Message);
+ }
+ finally
+ {
+ wc.Dispose();
+ }
+
+ _workerCompleted = true;
+ }
+
+ public static bool _workerCompleted = true;
+ public static bool interupted = false;
+
+ public void DownloadIcon(string downloadurl, string programID)
+ {
+ if (!System.IO.File.Exists(System.IO.Path.Combine(Thumbs.Trailers, programID + ".jpg")))
+ {
+ using (WaitCursor cursor = new WaitCursor())
+ {
+ try
+ {
+ // Download Poster
+ WebClient wc = new WebClient();
+ Util.Utils.DownLoadAndCacheImage(downloadurl, System.IO.Path.Combine(Thumbs.Trailers, programID + ".jpg"));
+ //wc.DownloadFile(downloadurl, Config.GetFile(Config.Dir.Thumbs, "MPTemp -" + moviename + ".jpg"));
+
+ while (System.IO.File.Exists(System.IO.Path.Combine(Thumbs.Trailers, programID + ".jpg")) != true)
+ {
+ Thread.Sleep(50);
+ GUIWindowManager.Process();
+ }
+
+ }
+ catch (Exception ex)
+ {
+ Log.Warn("AreenaUtility: an error occured downloading icon for {0} - {1}", programID, ex.Message);
+ }
+
+ }
+ }
+ }
+
+ public AreenaUtility()
+ {
+ }
+ }
+}
\ No newline at end of file
Added: trunk/plugins/YleAreena/GUIAreena.cs
===================================================================
--- trunk/plugins/YleAreena/GUIAreena.cs (rev 0)
+++ trunk/plugins/YleAreena/GUIAreena.cs 2008-05-24 17:08:34 UTC (rev 1808)
@@ -0,0 +1,528 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using MediaPortal.GUI.Library;
+using MediaPortal.Util;
+using MediaPortal.Dialogs;
+using MediaPortal.Player;
+using MediaPortal.Playlists;
+
+namespace MediaPortal.YleAreena
+{
+ public class GUIAreena : GUIWindow
+ {
+ #region SkinControlAttributes
+ [SkinControlAttribute(3)] protected GUISelectButtonControl btnletter = null;
+ [SkinControlAttribute(4)] protected GUIListControl listview = null;
+ [SkinControlAttribute(24)] protected GUIImage poster = null;
+ [SkinControlAttribute(25)] protected GUIImage programPoster = null;
+ [SkinControlAttribute(26)] protected GUITextScrollUpControl programDesc = null;
+ #endregion
+ #region Variables
+
+ int Prev_SelectedItem = 0;
+ string currentletter = "";
+ string backgroundposter = null;
+
+ string[] LMovieUrl = new string[2000]; // strings for letterbutton movies
+ string[] LMovieName = new string[2000];
+ string[] LMovieID = new string[2000];
+
+ bool mainview = false;
+ bool letterview = false;
+ bool searchview = false;
+ bool programView = false;
+
+ public enum pageMode
+ {
+ LetterView,
+ MainView,
+ ProgramView,
+ SearchView
+ }
+
+ pageMode prevMode = pageMode.MainView;
+ string[] MainListMenu = new String[15]; //Decause the number of menu item is dynamic.
+
+ #endregion
+ #region Override functions
+
+ public override int GetID
+ {
+ get
+ {
+ return 800000;
+ }
+ set
+ {
+ base.GetID = value;
+ }
+ }
+ public override bool Init()
+ {
+ return Load(GUIGraphicsContext.Skin + @"\YLEAreena.xml");
+ }
+
+ protected override void OnClicked(int controlId, GUIControl control, MediaPortal.GUI.Library.Action.ActionType actionType) // For when a button is pressed
+ {
+ if (control == btnletter)
+ OnButtonTwo();
+ if (control == listview)
+ {
+ GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_ITEM_SELECTED, GetID, 0, controlId, 0, 0, null);
+ OnMessage(msg);
+ int itemIndex = (int)msg.Param1;
+ if (actionType == Action.ActionType.ACTION_SELECT_ITEM)
+ {
+ OnClick(itemIndex);
+ }
+ }
+ base.OnClicked(controlId, control, actionType);
+ }
+ public override void OnAction(Action action)
+ {
+ if (action.wID == Action.ActionType.ACTION_PREVIOUS_MENU && mainview != true)
+ {
+ if (AreenaUtility._workerCompleted == false)
+ {
+ AreenaUtility._workerCompleted = true;
+ AreenaUtility.interupted = true;
+ ShowLabelsFalse();
+ }
+ OnClick(0);
+ return;
+ }
+
+ base.OnAction(action);
+
+ if (programView == true)
+ {
+ if (listview.SelectedListItemIndex > 0)
+ ShowPoster(AreenaMedia.ClipPicture[listview.SelectedListItemIndex-1],"Areena_" + AreenaMedia.ClipID[listview.SelectedListItemIndex-1]);
+ }
+
+ }
+
+ protected override void OnPageDestroy(int newWindowId)
+ {
+ base.OnPageDestroy(newWindowId);
+ }
+
+ protected override void OnPageLoad()
+ {
+ base.OnPageLoad();
+ btnletter.RestoreSelection = false;
+ btnletter.AddSubItem("#");
+ for (char k = 'A'; k <= 'Z'; k++)
+ {
+ btnletter.AddSubItem(k.ToString());
+ }
+ LoadSettings();
+
+ ShowLabelsFalse();
+ GUIPropertyManager.SetProperty("#title", "");
+ if (backgroundposter == null)
+ backgroundposter = poster.FileName;
+ poster.SetFileName(GUIGraphicsContext.Skin + @"\media\" + backgroundposter);
+ ShowMainListView();
+ listview.Focus = true;
+ }
+ protected override void OnPreviousWindow()
+ {
+ base.OnPreviousWindow();
+ }
+
+ #endregion
+
+ #region Button/Click functions
+
+ private string GetSelectedListViewItemText()
+ {
+ string strLabel1 = "", strLabel2 = "", strThumb = "";
+ listview.GetSelectedItem(ref strLabel1, ref strLabel2, ref strThumb);
+ return strLabel1;
+ }
+
+ private void OnButtonTwo()
+ {
+ searchview = false;
+ letterview = true;
+ ShowLetterListView(AreenaMedia.ClipName,AreenaMedia.ClipURL,AreenaMedia.ClipID);
+ }
+
+
+ private void OnClick(int itemindex) // // When something is pressed in the listview
+ {
+
+ try
+ {
+ if (mainview == true)
+ {
+ if (itemindex == 0) // Newest news
+ {
+ mainview = false;
+ AreenaMedia.GetProgramList("http://areena.yle.fi/", "Uusimmat Tv-uutisetTv-uutiset 20.30");
+ ShowListView(AreenaMedia.ClipName, 800002);
+ programView = true;
+ prevMode = pageMode.MainView;
+ }
+ else if (itemindex == 1) // Newest
+ {
+ mainview = false;
+ AreenaMedia.GetProgramList("http://areena.yle.fi/", "Uusimmat");
+ ShowListView(AreenaMedia.ClipName, 800003);
+ programView = true;
+ prevMode = pageMode.MainView;
+ }
+ else if (itemindex == 2) //all
+ {
+ mainview = false;
+ AreenaMedia.GetProgramList("http://areena.yle.fi/selaa");
+ ShowListView(AreenaMedia.ClipName, 800005);
+ searchview = true;
+ btnletter.Visible = true;
+ prevMode = pageMode.MainView;
+ }
+
+ }
+ else if (programView == true)
+ {
+ if (itemindex == 0) //back to main page
+ {
+ if (prevMode == pageMode.MainView)
+ {
+ mainview = true;
+ ShowMainListView();
+ poster.Visible = false;
+ }
+ else
+ {
+ searchview = true;
+ ShowLabelsFalse();
+ btnletter.Visible = true;
+ AreenaMedia.GetProgramList("http://areena.yle.fi/selaa");
+ ShowListView(AreenaMedia.ClipName, 800005);
+ }
+
+ programView = false;
+ prevMode = pageMode.ProgramView;
+ }
+ else
+ {
+ PlayMedia(AreenaMedia.ClipURL[itemindex-1], GetSelectedListViewItemText());
+ programView = false;
+ mainview = true;
+ prevMode = pageMode.ProgramView;
+ }
+
+ }
+ else if (searchview == true)
+ {
+ if (itemindex == 0) //back to main page
+ {
+ mainview = true;
+ searchview = false;
+ ShowLabelsFalse();
+ ShowMainListView();
+ btnletter.Visible = false;
+ prevMode = pageMode.SearchView;
+ }
+ else
+ {
+ string programID = AreenaMedia.ClipID[listview.SelectedListItemIndex - 1];
+ AreenaMedia.GetProgramListandInfo(AreenaMedia.ClipURL[itemindex - 1]);
+ ShowProgramPoster(AreenaMedia.ProgramPoster, "Areena_" + programID);
+ GUIPropertyManager.SetProperty("#programinfo", AreenaMedia.ProgramInfo);
+ ShowListView(AreenaMedia.ClipName, 800004);
+
+ if (AreenaMedia.ProgramPoster != string.Empty)
+ programPoster.Visible = true;
+
+ if (AreenaMedia.ProgramInfo != string.Empty)
+ programDesc.Visible = true;
+
+ programView = true;
+ btnletter.Visible = false;
+ prevMode = pageMode.SearchView;
+
+ }
+ }
+ else if (letterview == true)
+ {
+ if (itemindex == 0) //back to main page
+ {
+ mainview = true;
+ letterview = false;
+ ShowLabelsFalse();
+ ShowMainListView();
+ btnletter.Visible = false;
+ prevMode = pageMode.LetterView;
+ }
+ else
+ {
+ string programID = LMovieID[listview.SelectedListItemIndex - 1];
+ AreenaMedia.GetProgramListandInfo(LMovieUrl[itemindex - 1]);
+ ShowProgramPoster(AreenaMedia.ProgramPoster, "Areena_" + programID);
+ GUIPropertyManager.SetProperty("#programinfo", AreenaMedia.ProgramInfo);
+ ShowListView(AreenaMedia.ClipName, 800004);
+
+ if (AreenaMedia.ProgramPoster != string.Empty)
+ programPoster.Visible = true;
+
+ if (AreenaMedia.ProgramInfo != string.Empty)
+ programDesc.Visible = true;
+
+ programView = true;
+ btnletter.Visible = false;
+ prevMode = pageMode.SearchView;
+
+ }
+
+ }
+ }
+ catch (Exception ex)
+ {
+ Log.Info("GUIAreena: Unable to get page ({0})", ex.Message);
+ GUIDialogNotify dlg = (GUIDialogNotify)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_NOTIFY);
+ dlg.SetHeading("ERROR");
+ dlg.SetText(GUILocalizeStrings.Get(800006));
+ dlg.DoModal(GUIWindowManager.ActiveWindow);
+ }
+
+ }
+ #endregion
+
+ void ShowMainListView()
+ {
+ mainview = true;
+ letterview = false;
+ poster.SetFileName(GUIGraphicsContext.Skin + @"\media\" + backgroundposter);
+ GUIPropertyManager.SetProperty("#title", GUILocalizeStrings.Get(800001)); //Show which movies?
+
+ string[] MainListOptions = new string[15];
+ MainListOptions[0] = GUILocalizeStrings.Get(800002);
+ MainListMenu[0] = MainListOptions[0];
+ MainListOptions[1] = GUILocalizeStrings.Get(800003);
+ MainListMenu[1] = MainListOptions[1];
+ MainListOptions[2] = GUILocalizeStrings.Get(800005);
+ MainListMenu[2] = MainListOptions[3];
+
+ listview.Clear();
+ int i = 0;
+ while (MainListOptions[i] != null)
+ {
+ GUIListItem item = new GUIListItem();
+ item.IsFolder = true;
+ MediaPortal.Util.Utils.SetDefaultIcons(item);
+ item.Label = MainListOptions[i];
+ listview.Add(item);
+ i++;
+ }
+ }
+
+ void LoadSettings()
+ {
+ }
+
+ public void ShowListView(string[] _ProgramName, int _titlenumber)
+ {
+ if (AreenaUtility.interupted == true)
+ {
+ AreenaUtility.interupted = false;
+ return;
+ }
+ poster.SetFileName(GUIGraphicsContext.Skin + @"\media\" + backgroundposter);
+ GUIPropertyManager.SetProperty("#title", GUILocalizeStrings.Get(_titlenumber));
+
+ listview.Clear();
+ GUIListItem item1 = new GUIListItem();
+ item1.Label = "..";
+ item1.IsFolder = true;
+ MediaPortal.Util.Utils.SetDefaultIcons(item1);
+ listview.Add(item1);
+
+ int i = 0;
+ while (_ProgramName[i] != null)
+ {
+ GUIListItem item = new GUIListItem();
+ item.IsFolder = true;
+ MediaPortal.Util.Utils.SetDefaultIcons(item);
+ item.Label = _ProgramName[i];
+ listview.Add(item);
+ i++;
+ }
+ }
+
+ void ShowLabelsFalse()
+ {
+ btnletter.Visible = false;
+ poster.Visible = false;
+ programPoster.Visible = false;
+ programDesc.Visible = false;
+ btnletter.NavigateDown = 4;
+ }
+
+ public void ShowPoster(string downloadurl, string movieID)
+ {
+ if (downloadurl == null | downloadurl == string.Empty)
+ return;
+ else
+ {
+ AreenaUtility AU = new AreenaUtility();
+ AU.DownloadIcon(downloadurl, movieID);
+
+ // TODO - add utils function here
+ string thumbFile = System.IO.Path.Combine(Thumbs.Trailers, movieID + ".jpg");
+ if (System.IO.File.Exists(thumbFile))
+ {
+ poster.Visible = true;
+ poster.SetFileName(thumbFile);
+ }
+ }
+ }
+
+ public void ShowProgramPoster(string downloadurl, string movieID)
+ {
+ if (downloadurl == null | downloadurl == string.Empty)
+ return;
+ else
+ {
+ AreenaUtility AU = new AreenaUtility();
+ AU.DownloadIcon(downloadurl, movieID);
+
+ string thumbFile = System.IO.Path.Combine(Thumbs.Trailers, movieID + ".jpg");
+ if (System.IO.File.Exists(thumbFile))
+ {
+ programPoster.Visible = true;
+ programPoster.SetFileName(thumbFile);
+ }
+ }
+ }
+
+ public static void PlayMedia(string url, string videoName)
+ {
+
+ bool playOk = false;
+ playOk = g_Player.Play(url, g_Player.MediaType.Video);
+
+ if (playOk)
+ {
+ g_Player.ShowFullScreenWindow();
+ g_Player.FullScreen = true;
+ }
+ else
+ {
+ Log.Info("GUIAreena: Unable to play {0}", url);
+ GUIDialogNotify dlg = (GUIDialogNotify)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_NOTIFY);
+ dlg.SetHeading("ERROR");
+ dlg.SetText("Unable to play the selected video. Please try again later.");
+ dlg.DoModal(GUIWindowManager.ActiveWindow);
+ }
+ }
+
+ public void ShowLetterListView(string[] movienames, string[] movieurls, string[] movieids)
+ {
+ int i = 0;
+ int j = 0;
+ string letter;
+ listview.Clear();
+ ShowLabelsFalse();
+ btnletter.Visible = true;
+ Array.Clear(LMovieName, 0, 2000);
+ Array.Clear(LMovieUrl, 0, 2000);
+ Array.Clear(LMovieID, 0, 2000);
+
+ poster.SetFileName(GUIGraphicsContext.Skin + @"\media\" + backgroundposter);
+ GUIPropertyManager.SetProperty("#title", "");
+ letter = btnletter.SelectedLabel;
+
+ GUIListItem item1 = new GUIListItem();
+ item1.Label = "..";
+ item1.IsFolder = true;
+ MediaPortal.Util.Utils.SetDefaultIcons(item1);
+ listview.Add(item1);
+
+ while (movienames[i] != null)
+ {
+ if (movienames[i].StartsWith("The " + letter) == true)
+ {
+ LMovieName[j] = movienames[i];
+ LMovieUrl[j] = movieurls[i];
+ LMovieID[j] = movieids[i];
+ GUIListItem item = new GUIListItem();
+ item.Label = LMovieName[j];
+ item.IsFolder = true;
+ MediaPortal.Util.Utils.SetDefaultIcons(item);
+ listview.Add(item);
+ j++;
+ }
+ else if (movienames[i].StartsWith("The ") == true) { }
+ else if (movienames[i].StartsWith("A " + letter) == true)
+ {
+ LMovieName[j] = movienames[i];
+ LMovieUrl[j] = movieurls[i];
+ LMovieID[j] = movieids[i];
+ GUIListItem item = new GUIListItem();
+ item.Label = LMovieName[j];
+ item.IsFolder = true;
+ MediaPortal.Util.Utils.SetDefaultIcons(item);
+ listview.Add(item);
+ j++;
+ }
+ else if (movienames[i].StartsWith("A ") == true) { }
+ else if (movienames[i].StartsWith("An " + letter) == true)
+ {
+ LMovieName[j] = movienames[i];
+ LMovieUrl[j] = movieurls[i];
+ LMovieID[j] = movieids[i];
+ GUIListItem item = new GUIListItem();
+ item.Label = LMovieName[j];
+ item.IsFolder = true;
+ MediaPortal.Util.Utils.SetDefaultIcons(item);
+ listview.Add(item);
+ j++;
+ }
+ else if (movienames[i].StartsWith("An ") == true) { }
+ else if (movienames[i].StartsWith(letter) == true)
+ {
+ LMovieName[j] = movienames[i];
+ LMovieID[j] = movieids[i];
+ LMovieUrl[j] = movieurls[i];
+ GUIListItem item = new GUIListItem();
+ item.Label = LMovieName[j];
+ listview.Add(item);
+ item.IsFolder = true;
+ MediaPortal.Util.Utils.SetDefaultIcons(item);
+ j++;
+ }
+ else if (letter.Equals("#") == true)
+ {
+ for (int n = 0; n <= 9; n++)
+ if (movienames[i].StartsWith(n.ToString()) == true)
+ {
+ LMovieName[j] = movienames[i];
+ LMovieUrl[j] = movieurls[i];
+ LMovieID[j] = movieids[i];
+ GUIListItem item = new GUIListItem();
+ item.Label = LMovieName[j];
+ item.IsFolder = true;
+ MediaPortal.Util.Utils.SetDefaultIcons(item);
+ listview.Add(item);
+ j++;
+ }
+ }
+
+ i++;
+ }
+ if (currentletter == letter)
+ listview.SelectedListItemIndex = Prev_SelectedItem;
+ else
+ {
+ listview.SelectedListItemIndex = 0;
+ currentletter = letter;
+ }
+ }
+
+ }
+}
Added: trunk/plugins/YleAreena/GUIAreenaPlugin.cs
===================================================================
--- trunk/plugins/YleAreena/GUIAreenaPlugin.cs (rev 0)
+++ trunk/plugins/YleAreena/GUIAreenaPlugin.cs 2008-05-24 17:08:34 UTC (rev 1808)
@@ -0,0 +1,88 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using MediaPortal.GUI.Library;
+
+namespace MediaPortal.YleAreena
+{
+ public class GUIAreenaPlugin : ISetupForm, IShowPlugin
+ {
+ // Returns the name of the plugin which is shown in the plugin menu
+ public string PluginName()
+ {
+ return "Yle Areena";
+ }
+
+ // Returns the description of the plugin is shown in the plugin menu
+ public string Description()
+ {
+ return "Browse material on Finnish YLE Areena service";
+ }
+
+ // Returns the author of the plugin which is shown in the plugin menu
+ public string Author()
+ {
+ return "Jupek Faithflame";
+ }
+
+ // show the setup dialog
+ public void ShowPlugin()
+ {
+ GUIAreenaSetupForm setup = new GUIAreenaSetupForm();
+ setup.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 800000;
+ }
+
+ // Indicates if plugin is enabled by default;
+ public bool DefaultEnabled()
+ {
+ return false;
+ }
+ // 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)
+ {
+ strButtonText = GUILocalizeStrings.Get(800000);
+ strButtonImage = string.Empty;
+ strButtonImageFocus = string.Empty;
+ strPictureImage = "YleAreena.png";
+ return true;
+ }
+
+ #region IShowPlugin Members
+
+ public bool ShowDefaultHome()
+ {
+ return false;
+ }
+
+ #endregion
+ }
+}
Added: trunk/plugins/YleAreena/GUIAreenaSetupForm.Designer.cs
===================================================================
--- trunk/plugins/YleAreena/GUIAreenaSetupForm.Designer.cs (rev 0)
+++ trunk/plugins/YleAreena/GUIAreenaSetupForm.Designer.cs 2008-05-24 17:08:34 UTC (rev 1808)
@@ -0,0 +1,50 @@
+namespace MediaPortal.YleAreena
+{
+ partial class GUIAreenaSetupForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+
+ #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.btnCancel = new MediaPortal.UserInterface.Controls.MPButton();
+ this.SuspendLayout();
+ //
+ // btnCancel
+ //
+ this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.btnCancel.Location = new System.Drawing.Point(205, 231);
+ this.btnCancel.Name = "btnCancel";
+ this.btnCancel.Size = new System.Drawing.Size(75, 23);
+ this.btnCancel.TabIndex = 11;
+ this.btnCancel.Text = "&Cancel";
+ this.btnCancel.UseVisualStyleBackColor = true;
+ this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+ //
+ // GUIAreenaSetupForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(292, 266);
+ this.Controls.Add(this.btnCancel);
+ this.Name = "GUIAreenaSetupForm";
+ this.Text = "GUIAreenaSetupForm";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private MediaPortal.UserInterface.Controls.MPButton btnCancel;
+ }
+}
\ No newline at end of file
Added: trunk/plugins/YleAreena/GUIAreenaSetupForm.cs
===================================================================
--- trunk/plugins/YleAreena/GUIAreenaSetupForm.cs (rev 0)
+++ trunk/plugins/YleAreena/GUIAreenaSetupForm.cs 2008-05-24 17:08:34 UTC (rev 1808)
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace MediaPortal.YleAreena
+{
+ public partial class GUIAreenaSetupForm : System.Windows.Forms.Form
+ {
+ public GUIAreenaSetupForm()
+ {
+ InitializeComponent();
+ }
+
+ private void btnCancel_Click(object sender, EventArgs e)
+ {
+ this.Close();
+ }
+ }
+}
Added: trunk/plugins/YleAreena/GUIAreenaSetupForm.resx
===================================================================
--- trunk/plugins/YleAreena/GUIAreenaSetupForm.resx (rev 0)
+++ trunk/plugins/YleAreena/GUIAreenaSetupForm.resx 2008-05-24 17:08:34 UTC (rev 1808)
@@ -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
Added: trunk/plugins/YleAreena/Properties/AssemblyInfo.cs
===================================================================
--- trunk/plugins/YleAreena/Properties/AssemblyInfo.cs (rev 0)
+++ trunk/plugins/YleAreena/Properties/AssemblyInfo.cs 2008-05-24 17:08:34 UTC (rev 1808)
@@ -0,0 +1,36 @@
+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("YleAreena")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("YleAreena")]
+[assembly: AssemblyCopyright("Copyright © 2008")]
+[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("7627a567-14cc-4be7-9a8b-f3d661b63df7")]
+
+// 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 Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Added: trunk/plugins/YleAreena/Skin/YLEAreena.xml
===================================================================
--- trunk/plugins/YleAreena/Skin/YLEAreena.xml (rev 0)
+++ trunk/plugins/YleAreena/Skin/YLEAreena.xml 2008-05-24 17:08:34 UTC (rev 1808)
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<window>
+ <id>800000</id>
+ <defaultcontrol>4</defaultcontrol>
+ <allowoverlay>yes</allowoverlay>
+ <define>#header.label:800000</define>
+ <controls>
+ <import>common.window.xml</import>
+ <control>
+ <type>image</type>
+ <description>item poster</description>
+ <id>24</id>
+ <posX>104</posX>
+ <posY>120</posY>
+ <width>120</width>
+ <height>67</height>
+ </control>
+ <control>
+ <type>image</type>
+ <description>program poster</description>
+ <id>25</id>
+ <posX>30</posX>
+ <posY>200</posY>
+ <width>180</width>
+ <height>101</height>
+ </control>
+ <control>
+ <type>textboxscrollup</type>
+ <description>program description</description>
+ <id>26</id>
+ <posX>20</posX>
+ <posY>300</posY>
+ <width>250</width>
+ <height>280</height>
+ <colordiffuse>ffffffff</colordiffuse>
+ <font>font13</font>
+ <label>#programinfo</label>
+ <textcolor>FFFFFFFF</textcolor>
+ </control>
+ <control>
+ <type>selectbutton</type>
+ <description>Letter button</description>
+ <id>3</id>
+ <posX>60</posX>
+ <posY>97</posY>
+ <onleft>4</onleft>
+ <onright>4</onright>
+ <onup>4</onup>
+ <ondown>4</ondown>
+ <subitems>-</subitems>
+ <label>872</label>
+ <textureFocus>menu_list_nofocus.png</textureFocus>
+ <subitems />
+ </control>
+ <control>
+ <type>listcontrol</type>
+ <description>listview</description>
+ <id>4</id>
+ <posX>250</posX>
+ <width>440</width>
+ <height>432</height>
+ <onleft>3</onleft>
+ <onright>3</onright>
+ <onup>3</onup>
+ <ondown>3</ondown>
+ <font>font13</font>
+ </control>
+ </controls>
+</window>
\ No newline at end of file
Added: trunk/plugins/YleAreena/YleAreena.csproj
===================================================================
--- trunk/plugins/YleAreena/YleAreena.csproj (rev 0)
+++ trunk/plugins/YleAreena/YleAreena.csproj 2008-05-24 17:08:34 UTC (rev 1808)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.21022</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{F02A7FDC-4783-48FA-87D2-7FDF12A7D838}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>YleAreena</RootNamespace>
+ <AssemblyName>YleAreena</AssemblyName>
+ <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </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\debug\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Windows.Forms" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="GUIAreena.cs" />
+ <Compile Include="GUIAreenaPlugin.cs" />
+ <Compile Include="GUIAreenaSetupForm.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="GUIAreenaSetupForm.Designer.cs">
+ <DependentUpon>GUIAreenaSetupForm.cs</DependentUpon>
+ </Compile>
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="AreenaMedia.cs" />
+ <Compile Include="AreenaUtility.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="GUIAreenaSetupForm.resx">
+ <DependentUpon>GUIAreenaSetupForm.cs</DependentUpon>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\MP17778\Core\Core.csproj">
+ <Project>{02FFFC1F-2555-4B99-8B01-3432D0673855}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\MP17778\Dialogs\Dialogs.csproj">
+ <Project>{396C5208-5D46-4A11-92C1-FD0F2F42D7DD}</Project>
+ <Name>Dialogs</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\MP17778\Utils\Utils.csproj">
+ <Project>{6DA0E4DF-6230-4642-98B5-E690BB6942BB}</Project>
+ <Name>Utils</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\WindowPlugins\WindowPlugins.csproj">
+ <Project>{B282C55B-A37B-4CEC-A4FC-00791069BF00}</Project>
+ <Name>WindowPlugins</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\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
Added: trunk/plugins/YleAreena/YleAreena.sln
===================================================================
--- trunk/plugins/YleAreena/YleAreena.sln (rev 0)
+++ trunk/plugins/YleAreena/YleAreena.sln 2008-05-24 17:08:34 UTC (rev 1808)
@@ -0,0 +1,20 @@
+
+...
[truncated message content] |