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