From: <pb...@us...> - 2007-03-27 09:06:40
|
Revision: 231 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=231&view=rev Author: pbb72 Date: 2007-03-27 02:06:39 -0700 (Tue, 27 Mar 2007) Log Message: ----------- Sorry, meant to put them in subfolder... Removed Paths: ------------- trunk/plugins/Documentation.cs trunk/plugins/Documentation.csproj trunk/plugins/DocumentationImage.cs trunk/plugins/DocumentationPage.cs Deleted: trunk/plugins/Documentation.cs =================================================================== --- trunk/plugins/Documentation.cs 2007-03-27 09:05:32 UTC (rev 230) +++ trunk/plugins/Documentation.cs 2007-03-27 09:06:39 UTC (rev 231) @@ -1,407 +0,0 @@ -#region Copyright (C) 2005-2007 Team MediaPortal - -/* - * Copyright (C) 2005-2007 Team MediaPortal - * http://www.team-mediaportal.com - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#endregion - -using System; -using System.ComponentModel; -using System.Windows.Forms; -using System.Net; -using System.IO; -using System.Text; -using System.Threading; -using System.Collections; -using MediaPortal.GUI.Library; -using MediaPortal.Dialogs; -using MediaPortal.Util; -using MediaPortal.Configuration; - -namespace Wikipedia -{ - /// <summary> - /// Windowplugin to search in Wikipedia and display articles using the MP Wikipedia Classes. - /// </summary> - public class GUIWikipedia : GUIWindow, ISetupForm - { - #region SkinControls - [SkinControlAttribute(10)] - protected GUIButtonControl buttonSearch = null; - [SkinControlAttribute(11)] - protected GUIButtonControl buttonLocal = null; - [SkinControlAttribute(14)] - protected GUIButtonControl buttonBack = null; - [SkinControlAttribute(12)] - protected GUIButtonControl buttonLinks = null; - [SkinControlAttribute(13)] - protected GUIButtonControl buttonImages = null; - - [SkinControlAttribute(4)] - protected GUILabelControl searchtermLabel = null; - [SkinControlAttribute(5)] - protected GUILabelControl imagedescLabel = null; - [SkinControlAttribute(20)] - protected GUITextControl txtArticle = null; - - [SkinControlAttribute(25)] - protected GUIImage imageControl = null; - #endregion - - private string language = "Default"; - private string articletext = string.Empty; - private ArrayList linkArray = new ArrayList(); - private ArrayList imagenameArray = new ArrayList(); - private ArrayList imagedescArray = new ArrayList(); - - - public GUIWikipedia() - { - GetID = (int)GUIWindow.Window.WINDOW_WIKIPEDIA; - } - #region ISetupForm Members - - // Returns the name of the plugin which is shown in the plugin menu - public string PluginName() - { - return "Wikipedia"; - } - - // Returns the description of the plugin is shown in the plugin menu - public string Description() - { - return "A Plugin to search in Wikipedia"; - } - - // Returns the author of the plugin which is shown in the plugin menu - public string Author() - { - return "Maschine"; - } - - // show the setup dialog - public void ShowPlugin() - { - MessageBox.Show("Edit the wikipedia.xml file in MP's root directory to add new sites."); - } - - // Indicates whether plugin can be enabled/disabled - public bool CanEnable() - { - return true; - } - - // get ID of windowplugin belonging to this setup - public int GetWindowId() - { - return 4711; - } - - // 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 false; - } - - /// <summary> - /// If the plugin should have its own button on the main menu of Media Portal 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(2516); - strButtonImage = ""; - strButtonImageFocus = ""; - strPictureImage = ""; - return true; - } - #endregion - - public override bool Init() - { - return Load(GUIGraphicsContext.Skin + @"\wikipedia.xml"); - } - - protected override void OnClicked(int controlId, GUIControl control, MediaPortal.GUI.Library.Action.ActionType actionType) - { - // we don't want the user to start another search while one is already active - if (_workerCompleted == false) - return; - - // Here we want to open the OSD Keyboard to enter the searchstring - if (control == buttonSearch) - { - // If the search Button was clicked we need to bring up the search keyboard. - VirtualKeyboard keyboard = (VirtualKeyboard)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_VIRTUAL_KEYBOARD); - if (null == keyboard) return; - string searchterm = string.Empty; - keyboard.IsSearchKeyboard = true; - keyboard.Reset(); - keyboard.Text = ""; - keyboard.DoModal(GetID); // show it... - - Log.Info("Wikipedia: OSD keyboard loaded!"); - - // If input is finished, the string is saved to the searchterm var. - if (keyboard.IsConfirmed) - searchterm = keyboard.Text; - - // If there was a string entered try getting the article. - if (searchterm != "") - { - Log.Info("Wikipedia: Searchterm gotten from OSD keyboard: {0}", searchterm); - GetAndDisplayArticle(searchterm); - } - // Else display an error dialog. - else - { - GUIDialogOK dlg = (GUIDialogOK)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_OK); - dlg.SetHeading(GUILocalizeStrings.Get(257)); // Error - dlg.SetLine(1, GUILocalizeStrings.Get(2500)); // No searchterm entered! - dlg.SetLine(2, String.Empty); - dlg.SetLine(3, GUILocalizeStrings.Get(2501)); // Please enter a valid searchterm! - dlg.DoModal(GUIWindowManager.ActiveWindow); - } - } - // This is the control to select the local Wikipedia site. - if (control == buttonLocal) - { - // Create a new selection dialog. - GUIDialogMenu pDlgOK = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU); - if (pDlgOK != null) - { - pDlgOK.Reset(); - pDlgOK.SetHeading(GUILocalizeStrings.Get(2502)); //Select your local Wikipedia: - - // Add all the local sites we want to be displayed starting with int 0. - MediaPortal.Profile.Settings langreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "wikipedia.xml")); - String allsites = langreader.GetValueAsString("Allsites", "sitenames", ""); - Log.Info("Wikipedia: available sites: " + allsites); - String[] siteArray = allsites.Split(','); - for (int i = 0; i < siteArray.Length; i++) - { - int stringno = langreader.GetValueAsInt(siteArray[i], "string", 2006); - pDlgOK.Add(GUILocalizeStrings.Get(stringno)); //English, German, French ... - } - - pDlgOK.DoModal(GetID); - if (pDlgOK.SelectedLabel >= 0) - { - SelectLocalWikipedia(pDlgOK.SelectedLabel, siteArray); - } - } - } - // The Button holding the Links to other articles - if (control == buttonLinks) - { - if (linkArray.Count > 0) - { - // Create a new selection dialog. - GUIDialogMenu pDlgOK = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU); - if (pDlgOK != null) - { - pDlgOK.Reset(); - pDlgOK.SetHeading(GUILocalizeStrings.Get(2505)); //Links to other articles: - - // Add all the links from the linkarray. - foreach (string link in linkArray) - { - pDlgOK.Add(link); - } - pDlgOK.DoModal(GetID); - if (pDlgOK.SelectedLabel >= 0) - { - Log.Info("Wikipedia: new search from the links array: {0}", pDlgOK.SelectedLabelText); - GetAndDisplayArticle(pDlgOK.SelectedLabelText); - } - } - } - else - { - GUIDialogOK dlg = (GUIDialogOK)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_OK); - dlg.SetHeading(GUILocalizeStrings.Get(257)); // Error - dlg.SetLine(1, GUILocalizeStrings.Get(2506)); // No Links from this article. - dlg.DoModal(GUIWindowManager.ActiveWindow); - } - - } - // The Button containing a list of all images from the article - if (control == buttonImages) - { - if (imagedescArray.Count > 0) - { - // Create a new selection dialog. - GUIDialogMenu pDlgOK = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU); - if (pDlgOK != null) - { - pDlgOK.Reset(); - pDlgOK.SetHeading(GUILocalizeStrings.Get(2507)); //Images from this article - - // Add all the images from the imagearray. - foreach (string image in imagedescArray) - { - pDlgOK.Add(image); - } - pDlgOK.DoModal(GetID); - if (pDlgOK.SelectedLabel >= 0) - { - Log.Info("Wikipedia: new search from the image array: {0}", imagedescArray[pDlgOK.SelectedId - 1]); - GetAndDisplayImage(imagenameArray[pDlgOK.SelectedId - 1].ToString(), imagedescArray[pDlgOK.SelectedId - 1].ToString()); - } - } - } - else - { - GUIDialogOK dlg = (GUIDialogOK)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_OK); - dlg.SetHeading(GUILocalizeStrings.Get(257)); // Error - dlg.SetLine(1, GUILocalizeStrings.Get(2508)); // No Images referenced in this article. - dlg.DoModal(GUIWindowManager.ActiveWindow); - } - } - // Back to the text button to switch from image view - if (control == buttonBack) - { - if (!txtArticle.IsVisible) - GUIControl.ShowControl(GetID, txtArticle.GetID); - if (imageControl.IsVisible) - GUIControl.HideControl(GetID, imageControl.GetID); - if (!searchtermLabel.IsVisible) - GUIControl.ShowControl(GetID, searchtermLabel.GetID); - if (imagedescLabel.IsVisible) - GUIControl.HideControl(GetID, imagedescLabel.GetID); - if (buttonBack.IsVisible) - GUIControl.HideControl(GetID, buttonBack.GetID); - } - base.OnClicked(controlId, control, actionType); - } - - // Depending on which Entry was selected from the listbox we chose the language here. - private void SelectLocalWikipedia(int labelnumber, String[] siteArray) - { - MediaPortal.Profile.Settings langreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "wikipedia.xml")); - language = siteArray[labelnumber]; - - if (searchtermLabel.Label != string.Empty && searchtermLabel.Label != "Wikipedia") - { - Log.Info("Wikipedia: language changed to {0}. Display article {1} again.", language, searchtermLabel.Label); - GetAndDisplayArticle(searchtermLabel.Label); - } - } - - private void GetAndDisplayImage(string imagename, string imagedesc) - { - WikipediaImage image = new WikipediaImage(imagename, language); - string imagefilename = image.GetImageFilename(); - Log.Info("Wikipedia: Trying to display image file: {0}", imagefilename); - - if (imagefilename != string.Empty && System.IO.File.Exists(imagefilename)) - { - if (txtArticle.IsVisible) - GUIControl.HideControl(GetID, txtArticle.GetID); - if (!imageControl.IsVisible) - GUIControl.ShowControl(GetID, imageControl.GetID); - if (searchtermLabel.IsVisible) - GUIControl.HideControl(GetID, searchtermLabel.GetID); - if (!imagedescLabel.IsVisible) - GUIControl.ShowControl(GetID, imagedescLabel.GetID); - if (!buttonBack.IsVisible) - GUIControl.ShowControl(GetID, buttonBack.GetID); - imagedescLabel.Label = imagedesc; - imageControl.SetFileName(imagefilename); - } - else - { - GUIDialogOK dlg = (GUIDialogOK)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_OK); - dlg.SetHeading(GUILocalizeStrings.Get(257)); // Error - dlg.SetLine(1, GUILocalizeStrings.Get(2512)); // Can't display image. - dlg.SetLine(2, GUILocalizeStrings.Get(2513)); // Please have a look at the logfile. - dlg.DoModal(GUIWindowManager.ActiveWindow); - } - } - - // The main function. - void GetAndDisplayArticle(string searchterm) - { - BackgroundWorker worker = new BackgroundWorker(); - - worker.DoWork += new DoWorkEventHandler(DownloadWorker); - worker.RunWorkerAsync(searchterm); - - while (_workerCompleted == false) - GUIWindowManager.Process(); - } - - // All kind of stuff because of the wait cursor ;-) - void DownloadWorker(object sender, DoWorkEventArgs e) - { - _workerCompleted = false; - - using (WaitCursor cursor = new WaitCursor()) - lock (this) - { - if (!txtArticle.IsVisible) - GUIControl.ShowControl(GetID, txtArticle.GetID); - if (imageControl.IsVisible) - GUIControl.HideControl(GetID, imageControl.GetID); - if (!searchtermLabel.IsVisible) - GUIControl.ShowControl(GetID, searchtermLabel.GetID); - if (imagedescLabel.IsVisible) - GUIControl.HideControl(GetID, imagedescLabel.GetID); - if (buttonBack.IsVisible) - GUIControl.HideControl(GetID, buttonBack.GetID); - linkArray.Clear(); - imagenameArray.Clear(); - imagedescArray.Clear(); - searchtermLabel.Label = e.Argument.ToString(); - WikipediaArticle article = new WikipediaArticle(e.Argument.ToString(), language); - articletext = article.GetArticleText(); - linkArray = article.GetLinkArray(); - imagenameArray = article.GetImageArray(); - imagedescArray = article.GetImagedescArray(); - language = article.GetLanguage(); - - if (articletext == "REDIRECT") - txtArticle.Label = GUILocalizeStrings.Get(2509) + "\n" + GUILocalizeStrings.Get(2510); //This page is only a redirect. Please chose the redirect aim from the link list. - else if (articletext == string.Empty) - txtArticle.Label = GUILocalizeStrings.Get(2504); //Sorry, no Article was found for your searchterm... - else - txtArticle.Label = articletext; - } - - _workerCompleted = true; - } - - volatile bool _workerCompleted = true; - } -} \ No newline at end of file Deleted: trunk/plugins/Documentation.csproj =================================================================== --- trunk/plugins/Documentation.csproj 2007-03-27 09:05:32 UTC (rev 230) +++ trunk/plugins/Documentation.csproj 2007-03-27 09:06:39 UTC (rev 231) @@ -1,52 +0,0 @@ -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup> - <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> - <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <ProductVersion>8.0.50727</ProductVersion> - <SchemaVersion>2.0</SchemaVersion> - <ProjectGuid>{B3A735EA-AE81-430A-AB33-214D11F5BE6E}</ProjectGuid> - <OutputType>Library</OutputType> - <AppDesignerFolder>Properties</AppDesignerFolder> - <RootNamespace>Documentation</RootNamespace> - <AssemblyName>Documentation</AssemblyName> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>bin\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> - <DebugType>pdbonly</DebugType> - <Optimize>true</Optimize> - <OutputPath>bin\Release\</OutputPath> - <DefineConstants>TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <ItemGroup> - <Reference Include="Core, Version=1.0.2588.17924, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>D:\Apps\Desktop\MediaPortal\Core.DLL</HintPath> - </Reference> - <Reference Include="System" /> - <Reference Include="System.Data" /> - <Reference Include="System.Windows.Forms" /> - <Reference Include="System.Xml" /> - </ItemGroup> - <ItemGroup> - <Compile Include="Class1.cs" /> - <Compile Include="Properties\AssemblyInfo.cs" /> - </ItemGroup> - <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> - <!-- To modify your build process, add your task inside one of the targets below and uncomment it. - Other similar extension points exist, see Microsoft.Common.targets. - <Target Name="BeforeBuild"> - </Target> - <Target Name="AfterBuild"> - </Target> - --> -</Project> \ No newline at end of file Deleted: trunk/plugins/DocumentationImage.cs =================================================================== --- trunk/plugins/DocumentationImage.cs 2007-03-27 09:05:32 UTC (rev 230) +++ trunk/plugins/DocumentationImage.cs 2007-03-27 09:06:39 UTC (rev 231) @@ -1,196 +0,0 @@ -#region Copyright (C) 2005-2007 Team MediaPortal - -/* - * Copyright (C) 2005-2007 Team MediaPortal - * http://www.team-mediaportal.com - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#endregion - -using System; -using System.ComponentModel; -using System.Windows.Forms; -using System.Net; -using System.IO; -using System.Text; -using System.Threading; -using System.Collections; -using MediaPortal.GUI.Library; -using MediaPortal.Util; -using MediaPortal.Configuration; - -namespace Wikipedia -{ - /// <summary> - /// This class holds all the logic to get an image from Wikipedia for further using in MP. - /// </summary> - public class WikipediaImage - { - #region vars - private string WikipediaURL = "http://en.wikipedia.org/wiki/Special:Export/"; - private string imagename = string.Empty; - private string imagedesc = string.Empty; - private string imageurl = string.Empty; - private string imagelocal = string.Empty; - - #endregion - - #region constructors - /// <summary>This constructor creates a new WikipediaImage</summary> - /// <summary>The name of the image and language need to be given</summary> - /// <param name="imagename">The internal name of the image like "Bild_478.jpg" in "http://de.wikipedia.org/wiki/Bild:Bild_478.jpg"</param> - /// <param name="language">Language of the Wikipedia page</param> - public WikipediaImage(string imagename, string language) - { - SetLanguage(language); - this.imagename = imagename; - GetImageUrl(); - GetImageFile(); - } - - /// <summary>This constructor creates a new WikipediaArticle.</summary> - /// <summary>Only called with a title string, language set to default.</summary> - /// <param name="title">The article's title</param> - public WikipediaImage(string imagename) - : this(imagename, "Default") - { - } - - /// <summary>This constructor creates a new WikipediaArticle if no parameter is given.</summary> - /// <summary>Uses an empty searchterm and the default language.</summary> - public WikipediaImage() - : this(string.Empty, "Default") - { - } - #endregion - - #region class methods - /// <summary>Gets the current MP language from mediaportal.xml and sets the Wikipedia URL accordingly</summary> - private void SetLanguage(string language) - { - if (language == "Default") - { - MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MediaPortal.xml")); - language = xmlreader.GetValueAsString("skin", "language", "English"); - } - - MediaPortal.Profile.Settings detailxmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "wikipedia.xml")); - this.WikipediaURL = detailxmlreader.GetValueAsString(language, "imageurl", "http://en.wikipedia.org/wiki/Image:"); - Log.Info("Wikipedia: Image language set to " + language + "."); - } - - /// <summary>Get the local filename of the downloaded image.</summary> - /// <returns>String: filename of the downloaded image.</returns> - public string GetImageFilename() - { - string imagelocal = Config.GetFile(Config.Dir.Thumbs, @"wikipedia\" + imagename); - return imagelocal; - } - - /// <summary>Getting the link to the full-size image.</summary> - /// <returns>String: parsed article</returns> - private void GetImageUrl() - { - string imagepage = string.Empty; - - // Build the URL to the Image page - System.Uri url = new System.Uri(WikipediaURL + this.imagename); - Log.Info("Wikipedia: Trying to get following Image page: {0}", url.ToString()); - - // Here we get the content from the web and put it to a string - try - { - WebClient client = new WebClient(); - client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); - Stream data = client.OpenRead(url); - StreamReader reader = new StreamReader(data); - imagepage = reader.ReadToEnd(); - reader.Close(); - Log.Info("Wikipedia: Success! Downloaded all data from the image page."); - } - catch (Exception e) - { - Log.Info("Wikipedia: Exception during downloading image page:"); - Log.Info(e.ToString()); - } - - //We're searching for something like this: - //<div class="fullImageLink" id="file"><a href="http://upload.wikimedia.org/wikipedia/commons/7/7d/Bild_478.jpg"> - if (imagepage.IndexOf("class=\"fullImageLink\"") >= 0) - { - Log.Info("Wikipedia: Extracting link to full-size image."); - int iStart = imagepage.IndexOf("class=\"fullImageLink\""); - imagepage = imagepage.Substring(iStart, 1000); - - iStart = imagepage.IndexOf("href") + 6; - int iEnd = imagepage.IndexOf("\"", iStart); - - this.imageurl = imagepage.Substring(iStart, iEnd - iStart); - Log.Info("Wikipedia: URL of full-size image extracted."); - Log.Info(imageurl); - } - else - this.imageurl = string.Empty; - } - - /// <summary>Downloads the full-size image from the wikipedia page</summary> - private void GetImageFile() - { - if (imageurl != "") - { - //Check if we already have the file. - string thumbspath = Config.GetSubFolder(Config.Dir.Thumbs, @"wikipedia\"); - - //Create the wikipedia subdir in thumbs when it not exists. - if (!System.IO.Directory.Exists(thumbspath)) - System.IO.Directory.CreateDirectory(thumbspath); - - if (!System.IO.File.Exists(thumbspath + imagename)) - { - - Log.Info("Wikipedia: Trying to get following URL: {0}", imageurl); - // Here we get the image from the web and save it to disk - try - { - WebClient client = new WebClient(); - client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); - client.DownloadFile(imageurl, thumbspath + imagename); - Log.Info("Wikipedia: Success! Image downloaded."); - } - catch (Exception e) - { - Log.Info("Wikipedia: Exception during downloading:"); - Log.Info(e.ToString()); - } - } - else - { - Log.Info("Wikipedia: Image exists, no need to redownload!"); - } - } - else - { - Log.Info("Wikipedia: No imageurl. Can't download file."); - } - } - - #endregion - } - -} \ No newline at end of file Deleted: trunk/plugins/DocumentationPage.cs =================================================================== --- trunk/plugins/DocumentationPage.cs 2007-03-27 09:05:32 UTC (rev 230) +++ trunk/plugins/DocumentationPage.cs 2007-03-27 09:06:39 UTC (rev 231) @@ -1,553 +0,0 @@ -#region Copyright (C) 2005-2007 Team MediaPortal - -/* - * Copyright (C) 2005-2007 Team MediaPortal - * http://www.team-mediaportal.com - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#endregion - -using System; -using System.ComponentModel; -using System.Windows.Forms; -using System.Net; -using System.IO; -using System.Text; -using System.Threading; -using System.Collections; -using MediaPortal.GUI.Library; -using MediaPortal.Util; -using MediaPortal.Configuration; - -namespace Wikipedia -{ - /// <summary> - /// This class holds all the logic to get info from Wikipedia and parse it for further using in MP. - /// </summary> - public class WikipediaArticle - { - #region vars - private string WikipediaURL = "http://en.wikipedia.org/wiki/Special:Export/"; - private string imagePattern = "Image"; - private string title = string.Empty; - private string unparsedArticle = string.Empty; - private string parsedArticle = string.Empty; - private string language = "Default"; - private ArrayList linkArray = new ArrayList(); - private ArrayList imageArray = new ArrayList(); - private ArrayList imagedescArray = new ArrayList(); - #endregion - - #region constructors - /// <summary>This constructor creates a new WikipediaArticle</summary> - /// <summary>Searchterm and language need to be given</summary> - /// <param name="title">The article's title</param> - /// <param name="language">Language of the Wikipedia page</param> - public WikipediaArticle(string title, string language) - { - SetLanguage(language); - this.title = title; - GetWikipediaXML(); - ParseWikipediaArticle(); - ParseLinksAndImages(); - } - - /// <summary>This constructor creates a new WikipediaArticle.</summary> - /// <summary>Only called with a title string, language set to default.</summary> - /// <param name="title">The article's title</param> - public WikipediaArticle(string title) - : this(title, "Default") - { - } - - /// <summary>This constructor creates a new WikipediaArticle if no parameter is given.</summary> - /// <summary>Uses an empty searchterm and the default language.</summary> - public WikipediaArticle() - : this(string.Empty, "Default") - { - } - #endregion - - /// <summary>Gets the current MP language from mediaportal.xml and sets the Wikipedia URL accordingly</summary> - private void SetLanguage(string language) - { - if (language == "Default") - { - MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MediaPortal.xml")); - language = xmlreader.GetValueAsString("skin", "language", "English"); - } - - this.language = language; - - MediaPortal.Profile.Settings detailxmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "wikipedia.xml")); - this.WikipediaURL = detailxmlreader.GetValueAsString(language, "url", "http://en.wikipedia.org/wiki/Special:Export/"); - this.imagePattern = detailxmlreader.GetValueAsString(language, "imagepattern", "Image"); - Log.Info("Wikipedia: Language set to " + language + "."); - } - - /// <summary>Returns the parsed article text.</summary> - /// <returns>String: parsed article</returns> - public string GetArticleText() - { - return parsedArticle; - } - - /// <summary>Returns the title of the article. Can differ from the passed parameter on redirects for example.</summary> - /// <returns>String: title of the article</returns> - public string GetTitle() - { - return title; - } - - /// <summary>Returns all names of images.</summary> - /// <returns>StringArray: images used in this article</returns> - public ArrayList GetImageArray() - { - return imageArray; - } - - /// <summary>Returns all descriptions of images.</summary> - /// <returns>StringArray: images used in this article</returns> - public ArrayList GetImagedescArray() - { - return imagedescArray; - } - - /// <summary>Returns the titles of all linked articles.</summary> - /// <returns>StringArray: titles of linked (internal) Wikipedia articles</returns> - public ArrayList GetLinkArray() - { - return linkArray; - } - - /// <summary>Returns the currently active language.</summary> - /// <returns>String: language</returns> - public string GetLanguage() - { - return language; - } - - /// <summary>Downloads the xml content from Wikipedia and cuts metadata like version info.</summary> - private void GetWikipediaXML() - { - string wikipediaXML = string.Empty; - // Build the URL to the Wikipedia page - System.Uri url = new System.Uri(WikipediaURL + this.title); - Log.Info("Wikipedia: Trying to get following URL: {0}", url.ToString()); - - // Here we get the content from the web and put it to a string - try - { - WebClient client = new WebClient(); - client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); - Stream data = client.OpenRead(url); - StreamReader reader = new StreamReader(data); - wikipediaXML = reader.ReadToEnd(); - reader.Close(); - Log.Info("Wikipedia: Success! Downloaded all data."); - } - catch (Exception e) - { - Log.Info("Wikipedia: Exception during downloading:"); - Log.Info(e.ToString()); - } - - if (wikipediaXML.IndexOf("<text xml:space=\"preserve\">") > 0) - { - Log.Info("Wikipedia: Extracting unparsed string."); - int iStart = 0; - int iEnd = wikipediaXML.Length; - // Start of the Entry - iStart = wikipediaXML.IndexOf("<text xml:space=\"preserve\">") + 27; - // End of the Entry - iEnd = wikipediaXML.IndexOf("</text>"); - // Extract the Text and update the var - this.unparsedArticle = wikipediaXML.Substring(iStart, iEnd - iStart); - Log.Info("Wikipedia: Unparsed string extracted."); - } - else - this.unparsedArticle = string.Empty; - } - - /// <summary>Cuts all special wiki syntax from the article to display plain text</summary> - private void ParseWikipediaArticle() - { - string tempParsedArticle = this.unparsedArticle; - - // Check if the article is empty, if so do not parse. - if (tempParsedArticle == string.Empty) - { - Log.Info("Wikipedia: Empty article found. Try another Searchterm."); - this.unparsedArticle = string.Empty; - } - // Here we check if there is only a redirect as article to handle it as a special article type - else if (tempParsedArticle.IndexOf("#REDIRECT") == 0) - { - Log.Info("Wikipedia: #REDIRECT found."); - int iStart = tempParsedArticle.IndexOf("[[") + 2; - int iEnd = tempParsedArticle.IndexOf("]]", iStart); - // Extract the Text - string keyword = tempParsedArticle.Substring(iStart, iEnd - iStart); - this.unparsedArticle = string.Empty; - this.title = keyword; - GetWikipediaXML(); - ParseWikipediaArticle(); - } - // Finally a well-formed article ;-) - else - { - Log.Info("Wikipedia: Starting parsing."); - StringBuilder builder = new StringBuilder(tempParsedArticle); - int iStart = 0; - int iEnd = 0; - - // Remove HTML comments - Log.Debug("Wikipedia: Remove HTML comments."); - while (tempParsedArticle.IndexOf("<!--") >= 0) - { - builder = new StringBuilder(tempParsedArticle); - iStart = tempParsedArticle.IndexOf("<!--"); - iEnd = tempParsedArticle.IndexOf("-->", iStart) + 6; - - try - { - builder.Remove(iStart, iEnd - iStart); - } - catch (Exception e) - { - Log.Error(e.ToString()); - Log.Error(builder.ToString()); - } - tempParsedArticle = builder.ToString(); - } - - // surrounded by {{ and }} is (atm) unusable stuff. - //Log.Debug("Wikipedia: Remove stuff between {{ and }}."); - while (tempParsedArticle.IndexOf("{{") >= 0) - { - builder = new StringBuilder(tempParsedArticle); - iStart = tempParsedArticle.IndexOf("{{"); - int iStart2 = iStart; - iEnd = tempParsedArticle.IndexOf("}}") + 2; - - // Between {{ and }} we can again have inner sets of {{ and }} - while (tempParsedArticle.IndexOf("{{", iStart2 + 2) >= 0 && tempParsedArticle.IndexOf("{{", iStart2 + 2) < iEnd) - { - iStart2 = tempParsedArticle.IndexOf("{{", iStart2 + 2); - iEnd = tempParsedArticle.IndexOf("}}", iStart2) + 2; - iEnd = tempParsedArticle.IndexOf("}}", iEnd) + 2; - } - - try - { - builder.Remove(iStart, iEnd - iStart); - } - catch (Exception e) - { - Log.Error(e.ToString()); - Log.Error(builder.ToString()); - } - - tempParsedArticle = builder.ToString(); - } - - // surrounded by {| and |} is (atm) unusable stuff. - //Log.Debug("Wikipedia: Remove stuff between {| and |}."); - while (tempParsedArticle.IndexOf("{|") >= 0) - { - builder = new StringBuilder(tempParsedArticle); - iStart = tempParsedArticle.IndexOf("{|"); - iEnd = tempParsedArticle.IndexOf("|}") + 2; - - try - { - builder.Remove(iStart, iEnd - iStart); - } - catch (Exception e) - { - Log.Error(e.ToString()); - Log.Error(builder.ToString()); - } - - tempParsedArticle = builder.ToString(); - } - - // Remove audio links. - Log.Debug("Wikipedia: Remove audio links."); - while (tempParsedArticle.IndexOf("<span") >= 0) - { - builder = new StringBuilder(tempParsedArticle); - iStart = tempParsedArticle.IndexOf("<span"); - iEnd = tempParsedArticle.IndexOf("</span>") + 13; - - try - { - builder.Remove(iStart, iEnd - iStart); - } - catch (Exception e) - { - Log.Error(e.ToString()); - Log.Error(builder.ToString()); - } - - tempParsedArticle = builder.ToString(); - } - - // Remove web references. - Log.Debug("Wikipedia: Remove web references."); - while (tempParsedArticle.IndexOf("<ref>") >= 0) - { - builder = new StringBuilder(tempParsedArticle); - iStart = tempParsedArticle.IndexOf("<ref"); - iEnd = tempParsedArticle.IndexOf("</ref>") + 12; - - try - { - builder.Remove(iStart, iEnd - iStart); - } - catch (Exception e) - { - Log.Error(e.ToString()); - Log.Error(builder.ToString()); - } - - tempParsedArticle = builder.ToString(); - } - - // Remove <br /> - Log.Debug("Wikipedia: Remove <br />."); - builder.Replace("<br />", "\n"); - builder.Replace("<br style="clear:both"/>", "\n"); - builder.Replace("<br style="clear:left"/>", "\n"); - builder.Replace("<br style="clear:right"/>", "\n"); - - // Remove <sup> - Log.Debug("Wikipedia: Remove <sup>."); - builder.Replace("<sup>", "^"); - builder.Replace("</sup>", ""); - - // surrounded by ''' and ''' is bold text, atm also unusable. - Log.Debug("Wikipedia: Remove \'\'\'."); - builder.Replace("'''", ""); - - // surrounded by '' and '' is italic text, atm also unusable. - Log.Debug("Wikipedia: Remove \'\'."); - builder.Replace("''", ""); - - // Display === as newlines (meaning new line for every ===). - Log.Debug("Wikipedia: Display === as 1 newlines."); - builder.Replace("===", "\n"); - - // Display == as newlines (meaning new line for every ==). - Log.Debug("Wikipedia: Display == as 1 newline."); - builder.Replace("==", "\n"); - - // Display * as list (meaning new line for every *). - Log.Debug("Wikipedia: Display * as list."); - builder.Replace("*", "\n +"); - - // Remove HTML whitespace. - Log.Debug("Wikipedia: Remove HTML whitespace."); - builder.Replace(" ", " "); - - // Display " as ". - Log.Debug("Wikipedia: Remove Quotations."); - builder.Replace(""", "\""); - - // Display — as -. - Log.Debug("Wikipedia: Remove —."); - builder.Replace("—", "-"); - - // Remove gallery tags. - Log.Debug("Wikipedia: Remove gallery tags."); - builder.Replace("<gallery>", ""); - builder.Replace("</gallery>", ""); - - // Remove gallery tags. - Log.Debug("Wikipedia: Remove &."); - builder.Replace("&", "&"); - - // Remove (too many) newlines - Log.Debug("Wikipedia: Remove (too many) newlines."); - builder.Replace("\n\n\n\n", "\n"); - builder.Replace("\n\n\n", "\n"); - builder.Replace("\n\n", "\n"); - - // Remove (too many) newlines - Log.Debug("Wikipedia: Remove (too many) whitespaces."); - builder.Replace(" ", " "); - builder.Replace(" ", " "); - builder.Replace(" ", " "); - - tempParsedArticle = builder.ToString(); - - // The text shouldn't start with a newline. - if (tempParsedArticle.IndexOf("\n") == 0) - tempParsedArticle.Remove(0, 2); - - // For Debug purposes it is nice to see how the whole article text is parsed until here - //Log.Debug(tempParsedArticle); - - Log.Info("Wikipedia: Finished parsing."); - this.unparsedArticle = tempParsedArticle; - } - } - - /// <summary>Gets Links out of the article. External links are thrown away, links to other wikipedia articles get into the link array, images to the image array</summary> - private void ParseLinksAndImages() - { - Log.Info("Wikipedia: Starting parsing of links and images."); - string tempParsedArticle = this.unparsedArticle; - int iStart = 0, iEnd = 0, iPipe = 0; - - // Surrounded by [[IMAGEPATTERN: and ]] are the links to IMAGES. - // We need to check for the localized image keyword but also for the English as this is commonly used in some local sites. - // Example: [[Bild:H_NeuesRathaus1.jpg|left|thumb|Das [[Neues Rathaus (Hannover)|Neue Rathaus]] mit Maschteich]] - while ((iStart = tempParsedArticle.IndexOf("[[" + imagePattern + ":", iStart)) >= 0 || (iStart = tempParsedArticle.IndexOf("[[Image:")) >= 0) - { - iEnd = tempParsedArticle.IndexOf("]]", (iStart + 2)) + 2; - int disturbingLink = iStart; - - // Descriptions of images can contain links! - // [[Bild:Hannover Merian.png|thumb|[[Matth?us Merian|Merian]]-Kupferstich um 1650, im Vordergrund Windm?hle auf dem [[Lindener Berg]]]] - while (tempParsedArticle.IndexOf("[[", disturbingLink + 2) >= 0 && tempParsedArticle.IndexOf("[[", disturbingLink + 2) < iEnd) - { - disturbingLink = tempParsedArticle.IndexOf("[[", disturbingLink + 2); - iEnd = tempParsedArticle.IndexOf("]]", disturbingLink) + 2; - iEnd = tempParsedArticle.IndexOf("]]", iEnd) + 2; - } - // Extract the Text - string keyword = tempParsedArticle.Substring(iStart, iEnd - iStart); - - //Remove all links from the image description. - while (keyword.IndexOf("[[", 2) >= 0) - { - int iStartlink = keyword.IndexOf("[[", 2); - int iEndlink = keyword.IndexOf("]]", iStartlink) + 2; - // Extract the Text - string linkkeyword = keyword.Substring(iStartlink, iEndlink - iStartlink); - - // Parse Links to other keywords. - // 1st type of keywords is like [[article|displaytext]] - // for the 2nd the article and displayed text are equal [[article]]. - if (linkkeyword.IndexOf("|") > 0) - linkkeyword = linkkeyword.Substring(linkkeyword.IndexOf("|") + 1, linkkeyword.IndexOf("]]") - linkkeyword.IndexOf("|") - 1); - else - linkkeyword = linkkeyword.Substring(linkkeyword.IndexOf("[[") + 2, linkkeyword.IndexOf("]]") - linkkeyword.IndexOf("[[") - 2); - - keyword = keyword.Substring(0, iStartlink) + linkkeyword + keyword.Substring(iEndlink, keyword.Length - iEndlink); - } - - int iStartname = keyword.IndexOf(":") + 1; - int iEndname = keyword.IndexOf("|"); - string imagename = keyword.Substring(iStartname, iEndname - iStartname); - - //Image names must not contain spaces! - imagename = imagename.Replace(" ", "_"); - - int iStartdesc = keyword.LastIndexOf("|") + 1; - int iEnddesc = keyword.LastIndexOf("]]"); - string imagedesc = keyword.Substring(iStartdesc, iEnddesc - iStartdesc); ; - - this.imageArray.Add(imagename); - this.imagedescArray.Add(imagedesc); - Log.Debug("Wikipedia: Image added: {0}, {1}", imagedesc, imagename); - - tempParsedArticle = tempParsedArticle.Substring(0, iStart) + tempParsedArticle.Substring(iEnd, tempParsedArticle.Length - iEnd); - } - - // surrounded by [[ and ]] are the links to other articles. - Log.Debug("Wikipedia: Starting Link parsing."); - string parsedKeyword, parsedLink; - iStart = iEnd = 0; - try - { - while ((iStart = tempParsedArticle.IndexOf("[[", iStart)) >= 0) - { - iEnd = tempParsedArticle.IndexOf("]]") + 2; - // Extract the Text - string keyword = tempParsedArticle.Substring(iStart, iEnd - iStart); - - // Parse Links to other keywords. - // 1st type of keywords is like [[article|displaytext]] - if ((iPipe = keyword.IndexOf("|")) > 0) - { - parsedKeyword = keyword.Substring(iPipe + 1, keyword.Length - iPipe - 3); - parsedLink = keyword.Substring(2, iPipe - 2); - if (!this.linkArray.Contains(parsedLink)) - { - this.linkArray.Add(parsedLink); - //Log.Debug("Wikipedia: Link added: {0}, {1}", parsedLink, parsedKeyword); - } - } - else if (keyword.IndexOf(":") > 0) - { - // for the 2nd a ":" is a link to the article in another language. - // TODO Add links to other languages!!! - parsedKeyword = String.Empty; - } - else - { - // for the 3rd the article and displayed text are equal [[article]]. - parsedKeyword = keyword.Substring(2, keyword.Length - 4); - if (!this.linkArray.Contains(parsedKeyword)) - { - this.linkArray.Add(parsedKeyword); - //Log.Debug("Wikipedia: Link added: {0}", parsedKeyword); - } - } - - StringBuilder builder = new StringBuilder(tempParsedArticle); - builder.Remove(iStart, iEnd - iStart); - builder.Insert(iStart, parsedKeyword); - tempParsedArticle = builder.ToString(); - } - } - catch (Exception e) - { - Log.Error("Wikipedia: {0}", e.ToString()); - Log.Error("Wikipedia: tempArticle: {0}", tempParsedArticle); - } - Log.Debug("Wikipedia: Finished Link parsing: {0} Links added.", linkArray.Count); - - // surrounded by [ and ] are external Links. Need to be removed. - Log.Debug("Wikipedia: Removing external links"); - iStart = -1; - try - { - while ((iStart = tempParsedArticle.IndexOf("[")) >= 0) - { - iEnd = tempParsedArticle.IndexOf("]") + 1; - - StringBuilder builder = new StringBuilder(tempParsedArticle); - builder.Remove(iStart, iEnd - iStart); - tempParsedArticle = builder.ToString(); - } - } - catch (Exception e) - { - Log.Error("Wikipedia: {0}", e.ToString()); - Log.Error("Parsing Error: " + tempParsedArticle + "\nSTART: " + iStart + "\nEND: " + iEnd); - } - - Log.Info("Wikipedia: Finished parsing of links and images."); - this.parsedArticle = tempParsedArticle; - } - } -} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |