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] |