From: <che...@us...> - 2008-11-06 17:08:32
|
Revision: 2294 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=2294&view=rev Author: chef_koch Date: 2008-11-06 17:08:02 +0000 (Thu, 06 Nov 2008) Log Message: ----------- changed: project files are converted to VS2008 changed: moved loading and saving settings to it's own class changed: moved TestConnection to FritzBoxClient fixed: trying to catch socket exception in more places, with ReConnect after catch Modified Paths: -------------- trunk/plugins/FritzBox/FritzBox/FritzBox.cs trunk/plugins/FritzBox/FritzBox/FritzBox.csproj trunk/plugins/FritzBox/FritzBox/FritzBoxClient.cs trunk/plugins/FritzBox/FritzBox/FritzBoxSetupFrom.cs trunk/plugins/FritzBox/FritzBox/PhoneBook.cs trunk/plugins/FritzBox/FritzBox/Properties/AssemblyInfo.cs trunk/plugins/FritzBox/FritzBox.sln trunk/plugins/FritzBox/FritzBox.xmp Modified: trunk/plugins/FritzBox/FritzBox/FritzBox.cs =================================================================== --- trunk/plugins/FritzBox/FritzBox/FritzBox.cs 2008-11-06 09:05:36 UTC (rev 2293) +++ trunk/plugins/FritzBox/FritzBox/FritzBox.cs 2008-11-06 17:08:02 UTC (rev 2294) @@ -44,34 +44,189 @@ [PluginIcons("FritzBox.FritzBox.png", "FritzBox.FritzBoxDisabled.png")] public class FritzBox : ISetupForm, IPlugin { - #region Variables + public class Settings + { + #region Properties - public const string _version = "0.3.2.0"; - public static int _lastVersion = 0; - static bool _extensiveLogging = false; + public static bool ExtensiveLogging + { + get { return extensiveLogging; } + set { extensiveLogging = value; } + } private static bool extensiveLogging = false; - List<CallAction> actionList = new List<CallAction>(); - object tempNotify = null; + /// <summary> + /// stop media when an event happend + /// </summary> + public static bool StopMedia + { + get { return stopMedia; } + set { stopMedia = value; } + } private static bool stopMedia = true; + /// <summary> + /// resume media when notify is closed + /// </summary> + public static bool ResumeMedia + { + get { return resumeMedia; } + set { resumeMedia = value; } + } private static bool resumeMedia = true; - // notify settings - int _timeout = -1; // autoclose the dialog after the timeout expired - bool _closeOnTimeout = false; - bool _closeOnConnectionClosed = false; - bool _filterMSNs = false; - List<String> _msnList = new List<String>(); + public static int MaxNotifies + { + get { return maxNotifies; } + set { maxNotifies = value; } + } private static int maxNotifies = 20; + /// <summary> + /// autoclose the dialog after the timeout expired + /// </summary> + public static int NotifyTimeout + { + get { return notifyTimeout; } + set { notifyTimeout = value; } + } private static int notifyTimeout = 10; + public static bool CloseOnTimeout + { + get { return closeOnTimeout; } + set { closeOnTimeout = value; } + } private static bool closeOnTimeout = false; + public static bool CloseOnConnectionClosed + { + get { return closeOnConnectionClosed; } + set { closeOnConnectionClosed = value; } + } private static bool closeOnConnectionClosed = false; + public static bool ShowMsnOnHeading + { + get { return showMsnOnHeading; } + set { showMsnOnHeading = value; } + } private static bool showMsnOnHeading = false; - bool _showMsnOnHeading = false; - private bool _usePhonebook = true; - int maxNotifies = 20; + public static bool FilterMSNs + { + get { return filterMSNs; } + set { filterMSNs = value; } + } private static bool filterMSNs = false; + public static List<String> MsnList + { + get + { + if (msnList == null) + msnList = new List<String>(); + + return msnList; + } + set { msnList = value; } + } private static List<String> msnList; + + #endregion + + public static void Load() + { + Log.Info("FRITZ!Box: Settings.Load()"); + + PhoneBook.LoadSettings(); + + using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MediaPortal.xml"))) + { + ExtensiveLogging = xmlreader.GetValueAsBool("fritzbox", "extensiveLogging", false); + + FritzBoxClient.Address = xmlreader.GetValueAsString("fritzbox", "address", "fritz.box"); + FritzBoxClient.Port = xmlreader.GetValueAsInt("fritzbox", "port", 1012); + + // notify settings + MaxNotifies = xmlreader.GetValueAsInt("fritzbox", "maxNotifies", 20); + CloseOnTimeout = xmlreader.GetValueAsBool("fritzbox", "closeOnTimeout", false); + NotifyTimeout = xmlreader.GetValueAsInt("fritzbox", "timeout", 10); + CloseOnConnectionClosed = xmlreader.GetValueAsBool("fritzbox", "closeOnConnectionClosed", true); + + //if ((!CloseOnTimeout) || (NotifyTimeout == 0)) + // NotifyTimeout = -1; + + FilterMSNs = xmlreader.GetValueAsBool("fritzbox", "filterMSNs", false); + string strMSN = xmlreader.GetValueAsString("fritzbox", "MSN", ""); + char[] charSeparators = new char[] { ';' }; + MsnList.AddRange(strMSN.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries)); + + ShowMsnOnHeading = xmlreader.GetValueAsBool("fritzbox", "showMsnOnHeading", false); + + // media settings + StopMedia = xmlreader.GetValueAsBool("fritzbox", "stopMedia", true); + ResumeMedia = xmlreader.GetValueAsBool("fritzbox", "resumeMedia", true); + } + + WriteToLog(); + } + + public static void Save() + { + Log.Info("FRITZ!Box: Settings.Save()"); + + using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MediaPortal.xml"))) + { + xmlwriter.SetValueAsBool("fritzbox", "extensiveLogging", ExtensiveLogging); + + xmlwriter.SetValue("fritzbox", "address", FritzBoxClient.Address); + xmlwriter.SetValue("fritzbox", "port", FritzBoxClient.Port); + + // notify settings + xmlwriter.SetValue("fritzbox", "maxNotifies", MaxNotifies); + xmlwriter.SetValueAsBool("fritzbox", "closeOnTimeout", CloseOnTimeout); + xmlwriter.SetValue("fritzbox", "timeout", NotifyTimeout); + xmlwriter.SetValueAsBool("fritzbox", "closeOnConnectionClosed", CloseOnConnectionClosed); + + xmlwriter.SetValueAsBool("fritzbox", "filterMSNs", FilterMSNs); + string strMSN = ""; + foreach (string msn in MsnList) + { + strMSN += msn + ";"; + } + xmlwriter.SetValue("fritzbox", "MSN", strMSN); + + xmlwriter.SetValueAsBool("fritzbox", "showMsnOnHeading", ShowMsnOnHeading); + + // media settings + xmlwriter.SetValueAsBool("fritzbox", "stopMedia", StopMedia); + xmlwriter.SetValueAsBool("fritzbox", "resumeMedia", ResumeMedia); + } + + PhoneBook.SaveSettings(); + } + + public static void WriteToLog() + { + if (Settings.ExtensiveLogging) + { + Log.Info("FRITZ!Box: closeOnTimeout = {0}", CloseOnTimeout.ToString()); + Log.Info("FRITZ!Box: timeout = {0}", NotifyTimeout.ToString()); + Log.Info("FRITZ!Box: showMsnOnHeading = {0}", ShowMsnOnHeading.ToString()); + //Log.Info("FRITZ!Box: maxNotifies = {0}", FritzBoxWatch.maxNotifies.ToString()); + + Log.Info("FRITZ!Box: stopMedia = {0}", StopMedia.ToString()); + Log.Info("FRITZ!Box: resumeMedia = {0}", ResumeMedia.ToString()); + + Log.Info("FRITZ!Box: usePhonebook = {0}", PhoneBook.Enabled.ToString()); + if (PhoneBook.Enabled) + { + Log.Info("FRITZ!Box: showUnknownCaller = {0}", PhoneBook.ShowUnknownCaller.ToString()); + Log.Info("FRITZ!Box: saveUnknownCaller = {0}", PhoneBook.SaveUnknownCaller.ToString()); + } + + //Log.Debug("FRITZ!Box: MSNs loaded: {0}", strMSN); + } + } + } + + #region Variables + + public const string _version = "0.3.2.5"; + + List<CallAction> actionList = new List<CallAction>(); + object tempNotify = null; + int notifyCount = 0; - // media settings - bool _stopMedia = true; // stop media when an event happend - bool _resumeMedia = true; // resume media when notify is closed - bool _showNotify = true; List<CallAction> notifyQueue = new List<CallAction>(); @@ -127,7 +282,7 @@ switch (callAction.type) { case CallAction.CallType.Incoming: - if (_usePhonebook) + if (PhoneBook.Enabled) callAction.caller = PhoneBook.GetCaller(callAction.caller); OnIncomingCall(callAction); break; @@ -136,7 +291,7 @@ case CallAction.CallType.ConnectionStarted: break; case CallAction.CallType.ConnectionClosed: - if (_closeOnConnectionClosed) + if (Settings.CloseOnConnectionClosed) { Log.Info("_closeOnConnectionClosed is enabled. try to close active notify."); if (tempNotify != null) @@ -161,7 +316,7 @@ if (tempNotify != null) { Log.Info("yet another dialog is active. action is sent to queue."); - if (actionList.Count < maxNotifies - 1) + if (actionList.Count < Settings.MaxNotifies - 1) actionList.Add(callAction); return; } @@ -172,7 +327,7 @@ string strText = String.Empty; // Set Heading for NotifyDialog - if (_showMsnOnHeading) + if (Settings.ShowMsnOnHeading) strHeading = GUILocalizeStrings.Get(1023) + " on " + callAction.msn; // ???? Incoming call on else strHeading = GUILocalizeStrings.Get(1023); // 1023 Incoming call @@ -201,86 +356,6 @@ #endregion - #region Settings - - private void LoadSettings() - { - Log.Info("FRITZ!Box: LoadSettings()"); - - char[] charSeparators = new char[] { ';' }; - - using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MediaPortal.xml"))) - { - _lastVersion = xmlreader.GetValueAsInt("fritzbox", "lastVersion", 0); - - FritzBoxClient.address = xmlreader.GetValueAsString("fritzbox", "address", "fritz.box"); - FritzBoxClient.port = xmlreader.GetValueAsInt("fritzbox", "port", 1012); - - _extensiveLogging = xmlreader.GetValueAsBool("fritzbox", "extensiveLogging", false); - - // notify settings - maxNotifies = xmlreader.GetValueAsInt("fritzbox", "maxNotifies", 20); - _closeOnTimeout = xmlreader.GetValueAsBool("fritzbox", "closeOnTimeout", false); - _timeout = xmlreader.GetValueAsInt("fritzbox", "timeout", 10); - _closeOnConnectionClosed = xmlreader.GetValueAsBool("fritzbox", "closeOnConnectionClosed", true); - - if ((!_closeOnTimeout) || (_timeout == 0)) - _timeout = -1; - - _filterMSNs = xmlreader.GetValueAsBool("fritzbox", "filterMSNs", false); - string strMSN = xmlreader.GetValueAsString("fritzbox", "MSN", ""); - _msnList.AddRange(strMSN.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries)); - - if (_extensiveLogging) - Log.Debug("FRITZ!Box: MSNs loaded: {0}", strMSN); - - _showMsnOnHeading = xmlreader.GetValueAsBool("fritzbox", "showMsnOnHeading", false); - - // media settings - _stopMedia = xmlreader.GetValueAsBool("fritzbox", "stopMedia", true); - _resumeMedia = xmlreader.GetValueAsBool("fritzbox", "resumeMedia", true); - - // phonebook settings - _usePhonebook = xmlreader.GetValueAsBool("fritzbox", "usePhonebook", true); - if (_usePhonebook) - { - PhoneBook.LoadSettings(); - } - - if (_extensiveLogging) - { - Log.Info("FRITZ!Box: closeOnTimeout = {0}", _closeOnTimeout.ToString()); - Log.Info("FRITZ!Box: timeout = {0}", _timeout.ToString()); - Log.Info("FRITZ!Box: showMsnOnHeading = {0}", _showMsnOnHeading.ToString()); - //Log.Info("FRITZ!Box: maxNotifies = {0}", FritzBoxWatch.maxNotifies.ToString()); - - Log.Info("FRITZ!Box: stopMedia = {0}", _stopMedia.ToString()); - Log.Info("FRITZ!Box: resumeMedia = {0}", _resumeMedia.ToString()); - - Log.Info("FRITZ!Box: usePhonebook = {0}", _usePhonebook.ToString()); - if (_usePhonebook) - { - Log.Info("FRITZ!Box: showUnknownCaller = {0}", PhoneBook.ShowUnknownCaller.ToString()); - Log.Info("FRITZ!Box: saveUnknownCaller = {0}", PhoneBook.SaveUnknownCaller.ToString()); - } - } - } - } - - private void SaveSettings() - { - Log.Info("FRITZ!Box: SaveSettings()"); - - using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MediaPortal.xml"))) - { - xmlwriter.SetValue("fritzbox", "lastVersion", _version.Replace(".", string.Empty)); - } - - PhoneBook.SaveSettings(); - } - - #endregion - #region Helper Methods string GetCallerImage(Caller caller) @@ -292,12 +367,12 @@ string strImage = MediaPortal.Util.Utils.GetCoverArtName(Thumbs.Yac, caller.Name); // search image for caller - if (_extensiveLogging) + if (Settings.ExtensiveLogging) Log.Info("searching image: " + strImage); if (File.Exists(strImage)) { - if (_extensiveLogging) + if (Settings.ExtensiveLogging) Log.Info("found image for caller: " + strImage); else Log.Info("found image for caller"); @@ -314,13 +389,13 @@ bool IsMsnEnabled(string msn) { - if (!_filterMSNs) + if (!Settings.FilterMSNs) { Log.Info("MSN filter is disabled."); return true; } - if (_msnList.Contains(msn)) + if (Settings.MsnList.Contains(msn)) { Log.Info("MSN is on list."); return true; @@ -334,7 +409,7 @@ bool IsCallerEnabled(Caller caller) { - if (!_usePhonebook) + if (!PhoneBook.Enabled) { Log.Info("Phonebook is disabled. Notify will be shown."); return true; @@ -345,10 +420,10 @@ void ShowNotify(string strHeading, string strImage, string strText) { - if (notifyCount >= maxNotifies) return; + if (notifyCount >= Settings.MaxNotifies) return; //show dialog - if (g_Player.Playing && !g_Player.Paused && _stopMedia) + if (g_Player.Playing && !g_Player.Paused && Settings.StopMedia) g_Player.Pause(); GUIDialogNotify dlgNotify = (GUIDialogNotify)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_NOTIFY); @@ -359,12 +434,15 @@ dlgNotify.SetHeading(strHeading); dlgNotify.SetImage(strImage); dlgNotify.SetText(strText); - dlgNotify.TimeOut = _timeout; + if (Settings.CloseOnTimeout) + dlgNotify.TimeOut = Settings.NotifyTimeout; + else + dlgNotify.TimeOut = -1; tempNotify = dlgNotify; dlgNotify.DoModal(GUIWindowManager.ActiveWindow); - if (g_Player.Playing && g_Player.Paused && _stopMedia && _resumeMedia) + if (g_Player.Playing && g_Player.Paused && Settings.StopMedia && Settings.ResumeMedia) g_Player.Pause(); tempNotify = null; @@ -376,23 +454,6 @@ } } - bool TestConnection() - { - TcpClient TcpClient; - - try - { - TcpClient = new TcpClient(FritzBoxClient.address, FritzBoxClient.port); - } - catch (Exception) - { - return false; - } - - TcpClient.Close(); - return true; - } - #endregion #region <Interface> Implementations @@ -405,7 +466,7 @@ public void Start() { Log.Info("FRITZ!Box Plugin {0} starting.", _version); - LoadSettings(); + Settings.Load(); Utils.OnStartExternal += new Utils.UtilEventHandler(OnStartExternal); Utils.OnStopExternal += new Utils.UtilEventHandler(OnStopExternal); @@ -427,7 +488,7 @@ Utils.OnStartExternal -= new Utils.UtilEventHandler(OnStartExternal); Utils.OnStopExternal -= new Utils.UtilEventHandler(OnStopExternal); - SaveSettings(); + PhoneBook.SaveSettings(); } #endregion Modified: trunk/plugins/FritzBox/FritzBox/FritzBox.csproj =================================================================== --- trunk/plugins/FritzBox/FritzBox/FritzBox.csproj 2008-11-06 09:05:36 UTC (rev 2293) +++ trunk/plugins/FritzBox/FritzBox/FritzBox.csproj 2008-11-06 17:08:02 UTC (rev 2294) @@ -1,4 +1,4 @@ -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> @@ -11,6 +11,11 @@ <AssemblyName>FritzBox</AssemblyName> <ApplicationIcon> </ApplicationIcon> + <FileUpgradeFlags> + </FileUpgradeFlags> + <UpgradeBackupLocation> + </UpgradeBackupLocation> + <OldToolsVersion>2.0</OldToolsVersion> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> @@ -29,22 +34,6 @@ <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> - <DebugSymbols>true</DebugSymbols> - <OutputPath>bin\x86\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE</DefineConstants> - <DebugType>full</DebugType> - <PlatformTarget>x86</PlatformTarget> - <ErrorReport>prompt</ErrorReport> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> - <OutputPath>bin\Release\</OutputPath> - <DefineConstants>TRACE</DefineConstants> - <Optimize>true</Optimize> - <DebugType>pdbonly</DebugType> - <PlatformTarget>x86</PlatformTarget> - <ErrorReport>prompt</ErrorReport> - </PropertyGroup> <ItemGroup> <Reference Include="System" /> <Reference Include="System.Data" /> Modified: trunk/plugins/FritzBox/FritzBox/FritzBoxClient.cs =================================================================== --- trunk/plugins/FritzBox/FritzBox/FritzBoxClient.cs 2008-11-06 09:05:36 UTC (rev 2293) +++ trunk/plugins/FritzBox/FritzBox/FritzBoxClient.cs 2008-11-06 17:08:02 UTC (rev 2294) @@ -9,33 +9,50 @@ namespace FritzBox { #region class StateObject - // State object for receiving data from remote device. + /// <summary> + /// State object for receiving data from remote device. + /// </summary> public class StateObject { - // Client socket. + /// <summary> + /// Client socket. + /// </summary> public Socket workSocket = null; - // Size of receive buffer. + /// <summary> + /// Size of receive buffer. + /// </summary> public const int BufferSize = 256; - // Receive buffer. + /// <summary> + /// Receive buffer. + /// </summary> public byte[] buffer = new byte[BufferSize]; - // Received data string. + /// <summary> + /// Received data string. + /// </summary> public StringBuilder sb = new StringBuilder(); } #endregion public static class FritzBoxClient { - #region variables - - public static string address = "fritz.box"; - // The port number for the remote device. - public static int port = 1012; - - static TimeSpan minConnectWaitTime = new TimeSpan(0, 2, 0); + static TimeSpan minConnectWaitTime = new TimeSpan(0, 10, 0); static DateTime connectionFailed; static Socket _client; + #region Properties + + public static string Address + { + get { return address; } + set { address = value; } + } private static string address = "fritz.box"; + public static int Port + { + get { return port; } + set { port = value; } + } private static int port = 1012; + #endregion #region Public Events and Delegates @@ -71,6 +88,24 @@ } } + // todo + public static string TestConnection() + { + TcpClient TcpClient; + + try + { + TcpClient = new TcpClient(Address, Port); + } + catch (Exception) + { + return "Error!\nMake sure you are using the latest firmware and the call monitor is enabled (#96*5*)"; + } + + TcpClient.Close(); + return "Succeeded!"; + } + #endregion #region Private methods @@ -102,20 +137,21 @@ //Establish the remote endpoint for the socket. //The name of the //remote device is "host.contoso.com". - IPHostEntry ipHostInfo = Dns.GetHostEntry(address); + IPHostEntry ipHostInfo = Dns.GetHostEntry(Address); IPAddress ipAddress = ipHostInfo.AddressList[0]; - IPEndPoint remoteEP = new IPEndPoint(ipAddress, port); + IPEndPoint remoteEP = new IPEndPoint(ipAddress, Port); // Create a TCP/IP socket. _client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // Connect to the remote endpoint. - _client.BeginConnect(address, port, new AsyncCallback(ConnectCallback), _client); + _client.BeginConnect(Address, Port, new AsyncCallback(ConnectCallback), _client); } catch (SocketException) { - Log.Debug("Connect - SocketException - Connection to FritzBox failed, trying again in 2 minutes."); + Log.Debug("Connect: SocketException"); + Log.Info("FRITZ!BOX connection lost, trying to reconnect."); ReConnect(); } catch (Exception e) @@ -140,6 +176,12 @@ Receive(client); } + catch (SocketException) + { + Log.Debug("ConnectCallback: SocketException"); + Log.Info("FRITZ!BOX connection lost, trying to reconnect."); + ReConnect(); + } catch (Exception e) { Log.Error(e.ToString()); @@ -160,6 +202,12 @@ client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state); } + catch (SocketException) + { + Log.Debug("Receive: SocketException"); + Log.Info("FRITZ!BOX connection lost, trying to reconnect."); + ReConnect(); + } catch (Exception e) { Log.Error(e.ToString()); @@ -238,18 +286,19 @@ else { Log.Debug("ReceiveCallback: no bytes to read"); - // continue to listen to the fb - client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, - new AsyncCallback(ReceiveCallback), state); + Log.Info("FRITZ!BOX connection lost, trying to reconnect."); + ReConnect(); } } catch (ObjectDisposedException) { - Log.Debug("ReceiveCallback: ObjectDisposedException - Maybe socket has been closed."); + Log.Debug("ReceiveCallback: ObjectDisposedException"); + Log.Info("FRITZ!BOX connection shut down."); } catch (SocketException) { - Log.Debug("ReceiveCallback - SocketException - Connection to FritzBox failed, trying again in 2 minutes."); + Log.Debug("ReceiveCallback: SocketException"); + Log.Info("FRITZ!BOX connection lost, trying to reconnect."); ReConnect(); } catch (Exception e) Modified: trunk/plugins/FritzBox/FritzBox/FritzBoxSetupFrom.cs =================================================================== --- trunk/plugins/FritzBox/FritzBox/FritzBoxSetupFrom.cs 2008-11-06 09:05:36 UTC (rev 2293) +++ trunk/plugins/FritzBox/FritzBox/FritzBoxSetupFrom.cs 2008-11-06 17:08:02 UTC (rev 2294) @@ -28,102 +28,89 @@ private void LoadSettings() { - Log.Info("FRITZ!Box: LoadSettings"); - labelVersion.Text = "v" + FritzBox._version; - using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MediaPortal.xml"))) - { - FritzBox._lastVersion = xmlreader.GetValueAsInt("fritzbox", "lastVersion", 0); + FritzBox.Settings.Load(); - checkBoxExtensiveLogging.Checked = xmlreader.GetValueAsBool("fritzbox", "extensiveLogging", false); + checkBoxExtensiveLogging.Checked = FritzBox.Settings.ExtensiveLogging; - textBoxAddress.Text = xmlreader.GetValueAsString("fritzbox", "address", "fritz.box"); - numericUpDownPort.Value = xmlreader.GetValueAsInt("fritzbox", "port", 1012); + textBoxAddress.Text = FritzBoxClient.Address; + numericUpDownPort.Value = FritzBoxClient.Port; - // notify settings - numericUpDownMaxNotifies.Value = xmlreader.GetValueAsInt("fritzbox", "maxNotifies", 20); - checkBoxCloseOnTimout.Checked = xmlreader.GetValueAsBool("fritzbox", "closeOnTimeout", false); - numericUpDownTimeout.Value = xmlreader.GetValueAsInt("fritzbox", "timeout", 10); - checkBoxCloseOnConnectionClosed.Checked = xmlreader.GetValueAsBool("fritzbox", "closeOnConnectionClosed", true); + // notify settings + numericUpDownMaxNotifies.Value = FritzBox.Settings.MaxNotifies; + checkBoxCloseOnTimout.Checked = FritzBox.Settings.CloseOnTimeout; + numericUpDownTimeout.Value = FritzBox.Settings.NotifyTimeout; + checkBoxCloseOnConnectionClosed.Checked = FritzBox.Settings.CloseOnConnectionClosed; - numericUpDownTimeout.Enabled = checkBoxCloseOnTimout.Checked; + numericUpDownTimeout.Enabled = checkBoxCloseOnTimout.Checked; - checkBoxFilterMSNs.Checked = xmlreader.GetValueAsBool("fritzbox", "filterMSNs", false); - comboBoxMSNs.Enabled = checkBoxFilterMSNs.Checked; - buttonMSNsAdd.Enabled = checkBoxFilterMSNs.Checked; - buttonMSNsRemove.Enabled = checkBoxFilterMSNs.Checked; - string strMSN = xmlreader.GetValueAsString("fritzbox", "MSN", ""); - char[] charSeparators = new char[] { ';' }; - if (strMSN != "") - comboBoxMSNs.Items.AddRange(strMSN.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries)); + checkBoxFilterMSNs.Checked = FritzBox.Settings.FilterMSNs; + comboBoxMSNs.Enabled = checkBoxFilterMSNs.Checked; + buttonMSNsAdd.Enabled = checkBoxFilterMSNs.Checked; + buttonMSNsRemove.Enabled = checkBoxFilterMSNs.Checked; - checkBoxShowMsnOnHeading.Checked = xmlreader.GetValueAsBool("fritzbox", "showMsnOnHeading", false); + comboBoxMSNs.Items.Clear(); + comboBoxMSNs.Items.AddRange(FritzBox.Settings.MsnList.ToArray()); - // media settings - checkBoxStopMedia.Checked = xmlreader.GetValueAsBool("fritzbox", "stopMedia", true); - checkBoxResumeMedia.Checked = xmlreader.GetValueAsBool("fritzbox", "resumeMedia", true); + checkBoxShowMsnOnHeading.Checked = FritzBox.Settings.ShowMsnOnHeading; - // phonebook settings - checkBoxUsePhonebook.Checked = xmlreader.GetValueAsBool("fritzbox", "usePhonebook", true); - PhoneBook.LoadSettings(); + // media settings + checkBoxStopMedia.Checked = FritzBox.Settings.StopMedia; + checkBoxResumeMedia.Checked = FritzBox.Settings.ResumeMedia; - checkBoxShowUnknownCaller.Checked = PhoneBook.ShowUnknownCaller; - checkBoxSaveUnknownCaller.Checked = PhoneBook.SaveUnknownCaller; - checkBoxShowUnknownCaller.Enabled = checkBoxUsePhonebook.Checked; - checkBoxSaveUnknownCaller.Enabled = checkBoxUsePhonebook.Checked; + // phonebook settings + checkBoxUsePhonebook.Checked = PhoneBook.Enabled; - textBoxSuffixHome.Text = PhoneBook.SuffixHome; - textBoxSuffixWork.Text = PhoneBook.SuffixWork; - textBoxSuffixMobile.Text = PhoneBook.SuffixMobile; - } + checkBoxShowUnknownCaller.Checked = PhoneBook.ShowUnknownCaller; + checkBoxSaveUnknownCaller.Checked = PhoneBook.SaveUnknownCaller; + checkBoxShowUnknownCaller.Enabled = checkBoxUsePhonebook.Checked; + checkBoxSaveUnknownCaller.Enabled = checkBoxUsePhonebook.Checked; + textBoxSuffixHome.Text = PhoneBook.SuffixHome; + textBoxSuffixWork.Text = PhoneBook.SuffixWork; + textBoxSuffixMobile.Text = PhoneBook.SuffixMobile; + RefreshDataGridView(); } private void SaveSettings() { - Log.Info("FRITZ!Box: SaveSettings"); - using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MediaPortal.xml"))) - { - xmlwriter.SetValue("fritzbox", "lastVersion", FritzBox._version.Replace(".", string.Empty)); + FritzBox.Settings.ExtensiveLogging = checkBoxExtensiveLogging.Checked; - xmlwriter.SetValueAsBool("fritzbox", "extensiveLogging", checkBoxExtensiveLogging.Checked); + FritzBoxClient.Address = textBoxAddress.Text; + FritzBoxClient.Port = (int)numericUpDownPort.Value; - xmlwriter.SetValue("fritzbox", "address", textBoxAddress.Text); - xmlwriter.SetValue("fritzbox", "port", numericUpDownPort.Value); + // notify settings + FritzBox.Settings.MaxNotifies = (int)numericUpDownMaxNotifies.Value; + FritzBox.Settings.CloseOnTimeout = checkBoxCloseOnTimout.Checked; + FritzBox.Settings.NotifyTimeout = (int)numericUpDownTimeout.Value; + FritzBox.Settings.CloseOnConnectionClosed = checkBoxCloseOnConnectionClosed.Checked; - // notify settings - xmlwriter.SetValue("fritzbox", "maxNotifies", numericUpDownMaxNotifies.Value); - xmlwriter.SetValueAsBool("fritzbox", "closeOnTimeout", checkBoxCloseOnTimout.Checked); - xmlwriter.SetValue("fritzbox", "timeout", numericUpDownTimeout.Value); - xmlwriter.SetValueAsBool("fritzbox", "closeOnConnectionClosed", checkBoxCloseOnConnectionClosed.Checked); + FritzBox.Settings.FilterMSNs = checkBoxFilterMSNs.Checked; + FritzBox.Settings.MsnList.Clear(); + foreach (object obj in comboBoxMSNs.Items) + { + FritzBox.Settings.MsnList.Add((string) obj); + } - xmlwriter.SetValueAsBool("fritzbox", "filterMSNs", checkBoxFilterMSNs.Checked); - string strMSN = ""; - for (int i = 0; i < comboBoxMSNs.Items.Count; i++) - { - strMSN += comboBoxMSNs.Items[i].ToString() + ";"; - } - xmlwriter.SetValue("fritzbox", "MSN", strMSN); + FritzBox.Settings.ShowMsnOnHeading = checkBoxShowMsnOnHeading.Checked; - xmlwriter.SetValueAsBool("fritzbox", "showMsnOnHeading", checkBoxShowMsnOnHeading.Checked); + // media settings + FritzBox.Settings.StopMedia = checkBoxStopMedia.Checked; + FritzBox.Settings.ResumeMedia = checkBoxResumeMedia.Checked; - // media settings - xmlwriter.SetValueAsBool("fritzbox", "stopMedia", checkBoxStopMedia.Checked); - xmlwriter.SetValueAsBool("fritzbox", "resumeMedia", checkBoxResumeMedia.Checked); + // phonebook settings + PhoneBook.Enabled = checkBoxUsePhonebook.Checked; + PhoneBook.ShowUnknownCaller = checkBoxShowUnknownCaller.Checked; + PhoneBook.SaveUnknownCaller = checkBoxSaveUnknownCaller.Checked; + PhoneBook.SuffixHome = textBoxSuffixHome.Text; + PhoneBook.SuffixWork = textBoxSuffixWork.Text; + PhoneBook.SuffixMobile = textBoxSuffixMobile.Text; - // phonebook settings - xmlwriter.SetValueAsBool("fritzbox", "usePhonebook", checkBoxUsePhonebook.Checked); - PhoneBook.ShowUnknownCaller = checkBoxShowUnknownCaller.Checked; - PhoneBook.SaveUnknownCaller = checkBoxSaveUnknownCaller.Checked; - PhoneBook.SuffixHome = textBoxSuffixHome.Text; - PhoneBook.SuffixWork = textBoxSuffixWork.Text; - PhoneBook.SuffixMobile = textBoxSuffixMobile.Text; - } - SaveDataGridView(); - PhoneBook.SaveSettings(); + + FritzBox.Settings.Save(); } @@ -140,33 +127,11 @@ private void buttonTest_Click(object sender, EventArgs e) { - /* - labelHelp.Text = "Please wait..."; + FritzBoxClient.Address = textBoxAddress.Text; + FritzBoxClient.Port = (int)numericUpDownPort.Value; - if (IsFritzBoxConnected(textBoxAddress.Text, textBoxPort.Text)) - { - labelHelp.Text = "Succeeded!"; - } - else - { - labelHelp.Text = "Error!\nMake sure you are using the latest firmware and the call monitor is enabled (#96*5*)"; - } - */ - - TcpClient myClient; - try - { - labelHelp.Text = "Please wait..."; - Application.DoEvents(); - myClient = new TcpClient(textBoxAddress.Text, int.Parse(numericUpDownPort.Value.ToString())); - } - catch (Exception) - { - labelHelp.Text = "Error!\nMake sure you are using the latest firmware and the call monitor is enabled (#96*5*)"; - return; - } - labelHelp.Text = "Succeeded!"; - myClient.Close(); + labelHelp.Text = "Please wait..."; + labelHelp.Text = FritzBoxClient.TestConnection(); } Modified: trunk/plugins/FritzBox/FritzBox/PhoneBook.cs =================================================================== --- trunk/plugins/FritzBox/FritzBox/PhoneBook.cs 2008-11-06 09:05:36 UTC (rev 2293) +++ trunk/plugins/FritzBox/FritzBox/PhoneBook.cs 2008-11-06 17:08:02 UTC (rev 2294) @@ -35,57 +35,54 @@ { public static class PhoneBook { - #region variables + private static bool _extensiveLogging; + + #region public properties - static List<Caller> _contacts; + public static bool Enabled + { + get { return enabled; } + set { enabled = value; } + } private static bool enabled = false; - // phonebook settings - static bool _showUnknownCaller; - static bool _saveUnknownCaller; - - static string _suffixHome; - static string _suffixWork; - static string _suffixMobile; - - static bool _extensiveLogging; - - #endregion - - #region public properties - public static bool ShowUnknownCaller { - get { return _showUnknownCaller; } - set { _showUnknownCaller = value; } - } - + get { return showUnknownCaller; } + set { showUnknownCaller = value; } + } private static bool showUnknownCaller; public static bool SaveUnknownCaller { - get { return _saveUnknownCaller; } - set { _saveUnknownCaller = value; } - } + get { return saveUnknownCaller; } + set { saveUnknownCaller = value; } + } private static bool saveUnknownCaller; public static string SuffixHome { - get { return _suffixHome; } - set { _suffixHome = value; } - } + get { return suffixHome; } + set { suffixHome = value; } + } private static string suffixHome; public static string SuffixWork { - get { return _suffixWork; } - set { _suffixWork = value; } - } + get { return suffixWork; } + set { suffixWork = value; } + } private static string suffixWork; public static string SuffixMobile { - get { return _suffixMobile; } - set { _suffixMobile = value; } - } + get { return suffixMobile; } + set { suffixMobile = value; } + } private static string suffixMobile; public static List<Caller> Contacts { - get { return _contacts; } - set { _contacts = value; } - } + get + { + if (contacts == null) + contacts = new List<Caller>(); + + return contacts; + } + set { contacts = value; } + } private static List<Caller> contacts; #endregion @@ -97,18 +94,21 @@ { _extensiveLogging = xmlreader.GetValueAsBool("fritzbox", "extensiveLogging", false); - _showUnknownCaller = xmlreader.GetValueAsBool("fritzbox", "showUnknownCaller", true); - _saveUnknownCaller = xmlreader.GetValueAsBool("fritzbox", "saveUnknownCaller", true); + Enabled = xmlreader.GetValueAsBool("fritzbox", "usePhonebook", true); - _suffixHome = xmlreader.GetValueAsString("fritzbox", "suffixHome", ""); - _suffixWork = xmlreader.GetValueAsString("fritzbox", "suffixWork", " @ work"); - _suffixMobile = xmlreader.GetValueAsString("fritzbox", "suffixMobile", " (mobile)"); + ShowUnknownCaller = xmlreader.GetValueAsBool("fritzbox", "showUnknownCaller", true); + SaveUnknownCaller = xmlreader.GetValueAsBool("fritzbox", "saveUnknownCaller", true); + + SuffixHome = xmlreader.GetValueAsString("fritzbox", "suffixHome", ""); + SuffixWork = xmlreader.GetValueAsString("fritzbox", "suffixWork", " @ work"); + SuffixMobile = xmlreader.GetValueAsString("fritzbox", "suffixMobile", " (mobile)"); } - _contacts = new List<Caller>(); + Contacts = new List<Caller>(); using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "fritzbox.xml"))) { + int countCaller = xmlreader.GetValueAsInt("phonebook", "count", 0); for (int i = 0; i < countCaller; i++) @@ -119,35 +119,37 @@ caller.Name = xmlreader.GetValueAsString("phonebook", string.Format("name{0}", i.ToString()), ""); caller.Show = xmlreader.GetValueAsBool("phonebook", string.Format("show{0}", i.ToString()), false); - _contacts.Add(caller); + Contacts.Add(caller); if (_extensiveLogging) Log.Debug("FRITZ!Box: caller loaded: {0} {1} {2}", caller.ID, caller.Name, caller.Show); } } if (_extensiveLogging) - Log.Debug("FRITZ!Box: imported {0} callers", _contacts.Count.ToString()); + Log.Debug("FRITZ!Box: imported {0} callers", Contacts.Count.ToString()); } public static void SaveSettings() { - using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MediaPortal.xml"))) + using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MediaPortal.xml"))) { - xmlreader.SetValueAsBool("fritzbox", "showUnknownCaller", _showUnknownCaller); - xmlreader.SetValueAsBool("fritzbox", "saveUnknownCaller", _saveUnknownCaller); + xmlwriter.SetValueAsBool("fritzbox", "usePhonebook", Enabled); - xmlreader.SetValue("fritzbox", "suffixHome", _suffixHome); - xmlreader.SetValue("fritzbox", "suffixWork", _suffixWork); - xmlreader.SetValue("fritzbox", "suffixMobile", _suffixMobile); + xmlwriter.SetValueAsBool("fritzbox", "showUnknownCaller", ShowUnknownCaller); + xmlwriter.SetValueAsBool("fritzbox", "saveUnknownCaller", SaveUnknownCaller); + + xmlwriter.SetValue("fritzbox", "suffixHome", SuffixHome); + xmlwriter.SetValue("fritzbox", "suffixWork", SuffixWork); + xmlwriter.SetValue("fritzbox", "suffixMobile", SuffixMobile); } using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "fritzbox.xml"))) { - xmlwriter.SetValue("phonebook", "count", _contacts.Count); + xmlwriter.SetValue("phonebook", "count", Contacts.Count); - for (int i = 0; i < _contacts.Count; i++) + for (int i = 0; i < Contacts.Count; i++) { - Caller caller = _contacts[i]; + Caller caller = Contacts[i]; xmlwriter.SetValue("phonebook", string.Format("callerID{0}", i.ToString()), caller.ID); xmlwriter.SetValue("phonebook", string.Format("name{0}", i.ToString()), caller.Name); @@ -185,8 +187,8 @@ caller.Name = ar[0] + SuffixHome; caller.ID = ar[1]; caller.Show = true; - - _contacts.Add(caller); + + Contacts.Add(caller); count++; } @@ -198,8 +200,8 @@ caller.Name = ar[0] + SuffixWork; caller.ID = ar[4]; caller.Show = true; - - _contacts.Add(caller); + + Contacts.Add(caller); count++; } @@ -212,7 +214,7 @@ caller.ID = ar[7]; caller.Show = true; - _contacts.Add(caller); + Contacts.Add(caller); count++; } } @@ -230,7 +232,7 @@ public static bool CallerExists(string callerId) { - foreach (Caller caller in _contacts) + foreach (Caller caller in Contacts) if (caller.ID.Equals(callerId)) return true; return false; @@ -240,17 +242,17 @@ { if (caller.ID == "") return caller; - if (_contacts.Count == 0) + if (Contacts.Count == 0) { Log.Info("Phonebook is empty. Caller is added to the phonebook."); - _contacts.Add(caller); + Contacts.Add(caller); } else { bool foundCaller = false; - for (int i = 0; i < _contacts.Count; i++) + for (int i = 0; i < Contacts.Count; i++) { - Caller tempCaller = _contacts[i]; + Caller tempCaller = Contacts[i]; if (tempCaller.ID == caller.ID) { Log.Info("Caller is identified by phonebook as {0}.", tempCaller.Name); @@ -262,13 +264,13 @@ if (!foundCaller) { - if (_showUnknownCaller) + if (ShowUnknownCaller) caller.Show = true; else caller.Show = false; - if (_saveUnknownCaller) - _contacts.Add(caller); + if (SaveUnknownCaller) + Contacts.Add(caller); } } Modified: trunk/plugins/FritzBox/FritzBox/Properties/AssemblyInfo.cs =================================================================== --- trunk/plugins/FritzBox/FritzBox/Properties/AssemblyInfo.cs 2008-11-06 09:05:36 UTC (rev 2293) +++ trunk/plugins/FritzBox/FritzBox/Properties/AssemblyInfo.cs 2008-11-06 17:08:02 UTC (rev 2294) @@ -2,9 +2,9 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -// Allgemeine Informationen über eine Assembly werden über die folgenden -// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, -// die mit einer Assembly verknüpft sind. +// 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("FRITZ!Box CallMonitor")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] @@ -14,20 +14,22 @@ [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar -// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von -// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. +// 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)] -// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +// The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("2fed1c7a-a6ad-4bec-b6a5-f6390c705e93")] -// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// Version information for an assembly consists of the following four values: // -// Hauptversion -// Nebenversion -// Buildnummer +// Major Version +// Minor Version +// Build Number // Revision // +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: [assembly: AssemblyVersion(FritzBox.FritzBox._version)] [assembly: AssemblyFileVersion(FritzBox.FritzBox._version)] Modified: trunk/plugins/FritzBox/FritzBox.sln =================================================================== --- trunk/plugins/FritzBox/FritzBox.sln 2008-11-06 09:05:36 UTC (rev 2293) +++ trunk/plugins/FritzBox/FritzBox.sln 2008-11-06 17:08:02 UTC (rev 2294) @@ -1,6 +1,6 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FritzBox", "FritzBox\FritzBox.csproj", "{7A458560-A537-429E-A016-1A4513CB586F}" EndProject Global Modified: trunk/plugins/FritzBox/FritzBox.xmp =================================================================== --- trunk/plugins/FritzBox/FritzBox.xmp 2008-11-06 09:05:36 UTC (rev 2293) +++ trunk/plugins/FritzBox/FritzBox.xmp 2008-11-06 17:08:02 UTC (rev 2294) @@ -8,7 +8,7 @@ <Source>FritzBox\gfx\Thumbs\YAC\_noImage.png</Source> <Id>04010</Id> <Option>OutputFileName=|DefaultFile=False|</Option> - <Guid>949ec454-9866-4dc6-9ead-6cb5f630202a</Guid> + <Guid>50ad31a4-8bb5-46f9-a0de-926c73efd882</Guid> </File> <File> <FileName>_unknown.png</FileName> @@ -17,7 +17,7 @@ <Source>FritzBox\gfx\Thumbs\YAC\_unknown.png</Source> <Id>04010</Id> <Option /> - <Guid>979f0c7e-c5ac-4be2-977c-c3c97a04cf12</Guid> + <Guid>c1ccf2f7-224a-40a0-9638-72534fc56b73</Guid> </File> <File> <FileName>FritzBox.dll</FileName> @@ -26,7 +26,7 @@ <Source>FritzBox\bin\Release\FritzBox.dll</Source> <Id>01020</Id> <Option /> - <Guid>0e3318c1-2830-42f1-af7a-14c199da659e</Guid> + <Guid>79cdff81-638b-438f-861d-e4269eadd0fb</Guid> </File> </FileList> <StringList /> @@ -36,16 +36,14 @@ <SetupGroups /> <SetupGroupMappings /> <Option> - <BuildFileName>D:\mediaportal\mediaportal_plugins\FritzBox\FritzBox_v0.3.1.5.mpi</BuildFileName> + <BuildFileName>D:\mediaportal\mediaportal_plugins\FritzBox\FritzBox_v0.3.2.5.mpi</BuildFileName> <ProiectFileName>D:\mediaportal\mediaportal_plugins\FritzBox\FritzBox.xmp</ProiectFileName> <ProiectName>FRITZ!Box CallMonitor</ProiectName> <Author>chefkoch @ Team MediaPortal</Author> <UpdateURL>http://www.team-mediaportal.com/files/Download/MediaPortalInstaller(MPI)/Input/FRITZ!BoxCallMonitor/</UpdateURL> - <Version>0.3.2.0</Version> - <Description>TEST version - mit Reconnect feature ;-) + <Version>0.3.2.5</Version> + <Description>The FRITZ!Box plugin is a process plugin, which is able to notify you within MediaPortal on an incomming call on your FRITZ!Box. -The FRITZ!Box plugin is a process plugin, which is able to notify you within MediaPortal on an incomming call on your FRITZ!Box. - All strings are multi language. You will be informed with a small notify. It is possible to stop media playback automatically or to resume if you close the notify. You can specify your MSNs now, for which the notify should be shown. That avoids showing the notify when you get a fax. @@ -62,9 +60,9 @@ <MPMinVersion /> <MinExtensionVersion /> <MaxExtensionVersion /> - <ForumURL>http://forum.team-mediaportal.com/fritz_box_callmonitor_v0_2e_2007_02-t5165.html</ForumURL> + <ForumURL>http://forum.team-mediaportal.com/FRITZ!Box_CallMonitor-t5165.html</ForumURL> <WebURL>http://wiki.team-mediaportal.com/Extensions-Plugins/FritzBoxCallMonitor</WebURL> - <CreationDate>Tuesday, July 31, 2007 12:00:00 AM</CreationDate> + <CreationDate>04-11-08</CreationDate> <SingleGroupSelect>False</SingleGroupSelect> </Properties> </MPinstaler> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |