From: <che...@us...> - 2008-07-16 01:03:09
|
Revision: 1920 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=1920&view=rev Author: chef_koch Date: 2008-07-15 18:03:01 -0700 (Tue, 15 Jul 2008) Log Message: ----------- v0.3.1.0 # support for new export format of Fritz!Box Monitor v01.02.00 # added option to set suffixes for home, work and mobile phone numbers # added option to clear all entries in phone book Modified Paths: -------------- trunk/plugins/FritzBox/FritzBox/FritzBox.cs trunk/plugins/FritzBox/FritzBox/FritzBox.csproj trunk/plugins/FritzBox/FritzBox/FritzBoxSetupFrom.Designer.cs trunk/plugins/FritzBox/FritzBox/FritzBoxSetupFrom.cs trunk/plugins/FritzBox/FritzBox/PhoneBook.cs trunk/plugins/FritzBox/FritzBox/Properties/AssemblyInfo.cs trunk/plugins/FritzBox/FritzBox.xmp trunk/plugins/FritzBox/MP2version/CallMonitor.cs trunk/plugins/FritzBox/MP2version/CallMonitor.csproj trunk/plugins/FritzBox/MP2version/Listeners/FritzBox/FritzBox.cs trunk/plugins/FritzBox/MP2version/Listeners/FritzBox/FritzBox.csproj Modified: trunk/plugins/FritzBox/FritzBox/FritzBox.cs =================================================================== --- trunk/plugins/FritzBox/FritzBox/FritzBox.cs 2008-07-14 18:57:36 UTC (rev 1919) +++ trunk/plugins/FritzBox/FritzBox/FritzBox.cs 2008-07-16 01:03:01 UTC (rev 1920) @@ -70,7 +70,7 @@ #region Variables - public const string _version = "0.3.0.0"; + public const string _version = "0.3.1.0"; public static int _lastVersion = 0; static bool _extensiveLogging = false; Modified: trunk/plugins/FritzBox/FritzBox/FritzBox.csproj =================================================================== --- trunk/plugins/FritzBox/FritzBox/FritzBox.csproj 2008-07-14 18:57:36 UTC (rev 1919) +++ trunk/plugins/FritzBox/FritzBox/FritzBox.csproj 2008-07-16 01:03:01 UTC (rev 1920) @@ -74,6 +74,7 @@ <EmbeddedResource Include="Properties\Resources.resx"> <Generator>ResXFileCodeGenerator</Generator> <LastGenOutput>Resources.Designer.cs</LastGenOutput> + <SubType>Designer</SubType> </EmbeddedResource> </ItemGroup> <ItemGroup> Modified: trunk/plugins/FritzBox/FritzBox/FritzBoxSetupFrom.Designer.cs =================================================================== --- trunk/plugins/FritzBox/FritzBox/FritzBoxSetupFrom.Designer.cs 2008-07-14 18:57:36 UTC (rev 1919) +++ trunk/plugins/FritzBox/FritzBox/FritzBoxSetupFrom.Designer.cs 2008-07-16 01:03:01 UTC (rev 1920) @@ -42,7 +42,6 @@ this.labelHelp = new MediaPortal.UserInterface.Controls.MPLabel(); this.tabIncoming = new System.Windows.Forms.TabPage(); this.groupBoxPhonebook = new MediaPortal.UserInterface.Controls.MPGroupBox(); - this.mpImportFBMonitor = new MediaPortal.UserInterface.Controls.MPButton(); this.checkBoxSaveUnknownCaller = new MediaPortal.UserInterface.Controls.MPCheckBox(); this.checkBoxShowUnknownCaller = new MediaPortal.UserInterface.Controls.MPCheckBox(); this.checkBoxUsePhonebook = new MediaPortal.UserInterface.Controls.MPCheckBox(); @@ -77,6 +76,15 @@ this.buttonSave = new MediaPortal.UserInterface.Controls.MPButton(); this.buttonCancel = new MediaPortal.UserInterface.Controls.MPButton(); this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.buttonClearAll = new MediaPortal.UserInterface.Controls.MPButton(); + this.mpImportFBMonitor = new MediaPortal.UserInterface.Controls.MPButton(); + this.textBoxSuffixWork = new MediaPortal.UserInterface.Controls.MPTextBox(); + this.textBoxSuffixHome = new MediaPortal.UserInterface.Controls.MPTextBox(); + this.textBoxSuffixMobile = new MediaPortal.UserInterface.Controls.MPTextBox(); + this.groupBoxImport = new MediaPortal.UserInterface.Controls.MPGroupBox(); + this.labelSuffixHome = new MediaPortal.UserInterface.Controls.MPLabel(); + this.mpLabel2 = new MediaPortal.UserInterface.Controls.MPLabel(); + this.mpLabel3 = new MediaPortal.UserInterface.Controls.MPLabel(); this.tabControlFritzBoxSettings.SuspendLayout(); this.tabGeneral.SuspendLayout(); this.mpGroupBox1.SuspendLayout(); @@ -91,6 +99,7 @@ this.tabPhonebook.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxCaller)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); + this.groupBoxImport.SuspendLayout(); this.SuspendLayout(); // // tabControlFritzBoxSettings @@ -125,7 +134,7 @@ this.checkBoxExtensiveLogging.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.checkBoxExtensiveLogging.Location = new System.Drawing.Point(6, 138); this.checkBoxExtensiveLogging.Name = "checkBoxExtensiveLogging"; - this.checkBoxExtensiveLogging.Size = new System.Drawing.Size(339, 17); + this.checkBoxExtensiveLogging.Size = new System.Drawing.Size(321, 17); this.checkBoxExtensiveLogging.TabIndex = 1; this.checkBoxExtensiveLogging.Text = "extensive logging (!!! phonenumbers are written to the logfile !!!)"; this.checkBoxExtensiveLogging.UseVisualStyleBackColor = true; @@ -158,7 +167,7 @@ 0, 0}); this.numericUpDownPort.Name = "numericUpDownPort"; - this.numericUpDownPort.Size = new System.Drawing.Size(116, 21); + this.numericUpDownPort.Size = new System.Drawing.Size(116, 20); this.numericUpDownPort.TabIndex = 9; this.numericUpDownPort.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.numericUpDownPort.Value = new decimal(new int[] { @@ -195,7 +204,7 @@ this.textBoxAddress.BorderColor = System.Drawing.Color.Empty; this.textBoxAddress.Location = new System.Drawing.Point(165, 20); this.textBoxAddress.Name = "textBoxAddress"; - this.textBoxAddress.Size = new System.Drawing.Size(309, 21); + this.textBoxAddress.Size = new System.Drawing.Size(309, 20); this.textBoxAddress.TabIndex = 0; // // labelPort @@ -203,7 +212,7 @@ this.labelPort.AutoSize = true; this.labelPort.Location = new System.Drawing.Point(128, 50); this.labelPort.Name = "labelPort"; - this.labelPort.Size = new System.Drawing.Size(31, 13); + this.labelPort.Size = new System.Drawing.Size(29, 13); this.labelPort.TabIndex = 8; this.labelPort.Text = "Port:"; // @@ -212,7 +221,7 @@ this.labelAddress.AutoSize = true; this.labelAddress.Location = new System.Drawing.Point(109, 24); this.labelAddress.Name = "labelAddress"; - this.labelAddress.Size = new System.Drawing.Size(50, 13); + this.labelAddress.Size = new System.Drawing.Size(48, 13); this.labelAddress.TabIndex = 7; this.labelAddress.Text = "Address:"; // @@ -228,6 +237,7 @@ // // tabIncoming // + this.tabIncoming.Controls.Add(this.groupBoxImport); this.tabIncoming.Controls.Add(this.groupBoxPhonebook); this.tabIncoming.Controls.Add(this.groupBoxNotify); this.tabIncoming.Controls.Add(this.groupBoxMedia); @@ -241,38 +251,24 @@ // // groupBoxPhonebook // - this.groupBoxPhonebook.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBoxPhonebook.Controls.Add(this.mpImportFBMonitor); this.groupBoxPhonebook.Controls.Add(this.checkBoxSaveUnknownCaller); this.groupBoxPhonebook.Controls.Add(this.checkBoxShowUnknownCaller); this.groupBoxPhonebook.Controls.Add(this.checkBoxUsePhonebook); this.groupBoxPhonebook.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.groupBoxPhonebook.Location = new System.Drawing.Point(6, 208); this.groupBoxPhonebook.Name = "groupBoxPhonebook"; - this.groupBoxPhonebook.Size = new System.Drawing.Size(561, 95); + this.groupBoxPhonebook.Size = new System.Drawing.Size(177, 95); this.groupBoxPhonebook.TabIndex = 2; this.groupBoxPhonebook.TabStop = false; this.groupBoxPhonebook.Text = "phonebook settings"; // - // mpImportFBMonitor - // - this.mpImportFBMonitor.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.mpImportFBMonitor.Location = new System.Drawing.Point(405, 20); - this.mpImportFBMonitor.Name = "mpImportFBMonitor"; - this.mpImportFBMonitor.Size = new System.Drawing.Size(150, 23); - this.mpImportFBMonitor.TabIndex = 3; - this.mpImportFBMonitor.Text = "Import FRITZ!Box Monitor"; - this.mpImportFBMonitor.UseVisualStyleBackColor = true; - this.mpImportFBMonitor.Click += new System.EventHandler(this.mpImportFBMonitor_Click); - // // checkBoxSaveUnknownCaller // this.checkBoxSaveUnknownCaller.AutoSize = true; this.checkBoxSaveUnknownCaller.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.checkBoxSaveUnknownCaller.Location = new System.Drawing.Point(24, 68); this.checkBoxSaveUnknownCaller.Name = "checkBoxSaveUnknownCaller"; - this.checkBoxSaveUnknownCaller.Size = new System.Drawing.Size(121, 17); + this.checkBoxSaveUnknownCaller.Size = new System.Drawing.Size(122, 17); this.checkBoxSaveUnknownCaller.TabIndex = 2; this.checkBoxSaveUnknownCaller.Text = "save unknown caller"; this.checkBoxSaveUnknownCaller.UseVisualStyleBackColor = true; @@ -283,7 +279,7 @@ this.checkBoxShowUnknownCaller.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.checkBoxShowUnknownCaller.Location = new System.Drawing.Point(24, 45); this.checkBoxShowUnknownCaller.Name = "checkBoxShowUnknownCaller"; - this.checkBoxShowUnknownCaller.Size = new System.Drawing.Size(123, 17); + this.checkBoxShowUnknownCaller.Size = new System.Drawing.Size(124, 17); this.checkBoxShowUnknownCaller.TabIndex = 1; this.checkBoxShowUnknownCaller.Text = "show unknown caller"; this.checkBoxShowUnknownCaller.UseVisualStyleBackColor = true; @@ -294,7 +290,7 @@ this.checkBoxUsePhonebook.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.checkBoxUsePhonebook.Location = new System.Drawing.Point(6, 20); this.checkBoxUsePhonebook.Name = "checkBoxUsePhonebook"; - this.checkBoxUsePhonebook.Size = new System.Drawing.Size(97, 17); + this.checkBoxUsePhonebook.Size = new System.Drawing.Size(98, 17); this.checkBoxUsePhonebook.TabIndex = 0; this.checkBoxUsePhonebook.Text = "use phonebook"; this.checkBoxUsePhonebook.UseVisualStyleBackColor = true; @@ -328,7 +324,7 @@ this.checkBoxCloseOnConnectionClosed.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.checkBoxCloseOnConnectionClosed.Location = new System.Drawing.Point(6, 43); this.checkBoxCloseOnConnectionClosed.Name = "checkBoxCloseOnConnectionClosed"; - this.checkBoxCloseOnConnectionClosed.Size = new System.Drawing.Size(199, 17); + this.checkBoxCloseOnConnectionClosed.Size = new System.Drawing.Size(197, 17); this.checkBoxCloseOnConnectionClosed.TabIndex = 9; this.checkBoxCloseOnConnectionClosed.Text = "auto-close after connection is closed"; this.checkBoxCloseOnConnectionClosed.UseVisualStyleBackColor = true; @@ -339,7 +335,7 @@ this.lblMaxNotifies.AutoSize = true; this.lblMaxNotifies.Location = new System.Drawing.Point(21, 68); this.lblMaxNotifies.Name = "lblMaxNotifies"; - this.lblMaxNotifies.Size = new System.Drawing.Size(94, 13); + this.lblMaxNotifies.Size = new System.Drawing.Size(91, 13); this.lblMaxNotifies.TabIndex = 8; this.lblMaxNotifies.Text = "maximum Notifies:"; // @@ -357,7 +353,7 @@ 0, 0}); this.numericUpDownMaxNotifies.Name = "numericUpDownMaxNotifies"; - this.numericUpDownMaxNotifies.Size = new System.Drawing.Size(53, 21); + this.numericUpDownMaxNotifies.Size = new System.Drawing.Size(53, 20); this.numericUpDownMaxNotifies.TabIndex = 7; this.numericUpDownMaxNotifies.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.numericUpDownMaxNotifies.Value = new decimal(new int[] { @@ -372,7 +368,7 @@ this.checkBoxShowMsnOnHeading.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.checkBoxShowMsnOnHeading.Location = new System.Drawing.Point(6, 93); this.checkBoxShowMsnOnHeading.Name = "checkBoxShowMsnOnHeading"; - this.checkBoxShowMsnOnHeading.Size = new System.Drawing.Size(161, 17); + this.checkBoxShowMsnOnHeading.Size = new System.Drawing.Size(160, 17); this.checkBoxShowMsnOnHeading.TabIndex = 6; this.checkBoxShowMsnOnHeading.Text = "show MSN on notify-heading"; this.checkBoxShowMsnOnHeading.UseVisualStyleBackColor = true; @@ -394,7 +390,7 @@ this.checkBoxFilterMSNs.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.checkBoxFilterMSNs.Location = new System.Drawing.Point(361, 43); this.checkBoxFilterMSNs.Name = "checkBoxFilterMSNs"; - this.checkBoxFilterMSNs.Size = new System.Drawing.Size(194, 17); + this.checkBoxFilterMSNs.Size = new System.Drawing.Size(190, 17); this.checkBoxFilterMSNs.TabIndex = 2; this.checkBoxFilterMSNs.Text = "show notify only for following MSNs"; this.checkBoxFilterMSNs.UseVisualStyleBackColor = true; @@ -433,7 +429,7 @@ 0, 0}); this.numericUpDownTimeout.Name = "numericUpDownTimeout"; - this.numericUpDownTimeout.Size = new System.Drawing.Size(53, 21); + this.numericUpDownTimeout.Size = new System.Drawing.Size(53, 20); this.numericUpDownTimeout.TabIndex = 1; this.numericUpDownTimeout.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.numericUpDownTimeout.Value = new decimal(new int[] { @@ -448,7 +444,7 @@ this.checkBoxCloseOnTimout.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.checkBoxCloseOnTimout.Location = new System.Drawing.Point(6, 20); this.checkBoxCloseOnTimout.Name = "checkBoxCloseOnTimout"; - this.checkBoxCloseOnTimout.Size = new System.Drawing.Size(179, 17); + this.checkBoxCloseOnTimout.Size = new System.Drawing.Size(171, 17); this.checkBoxCloseOnTimout.TabIndex = 0; this.checkBoxCloseOnTimout.Text = "auto-close after timeout expired"; this.checkBoxCloseOnTimout.UseVisualStyleBackColor = true; @@ -474,7 +470,7 @@ this.checkBoxResumeMedia.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.checkBoxResumeMedia.Location = new System.Drawing.Point(24, 45); this.checkBoxResumeMedia.Name = "checkBoxResumeMedia"; - this.checkBoxResumeMedia.Size = new System.Drawing.Size(166, 17); + this.checkBoxResumeMedia.Size = new System.Drawing.Size(161, 17); this.checkBoxResumeMedia.TabIndex = 1; this.checkBoxResumeMedia.Text = "auto-resume on closing notify"; this.checkBoxResumeMedia.UseVisualStyleBackColor = true; @@ -485,7 +481,7 @@ this.checkBoxStopMedia.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.checkBoxStopMedia.Location = new System.Drawing.Point(6, 20); this.checkBoxStopMedia.Name = "checkBoxStopMedia"; - this.checkBoxStopMedia.Size = new System.Drawing.Size(122, 17); + this.checkBoxStopMedia.Size = new System.Drawing.Size(123, 17); this.checkBoxStopMedia.TabIndex = 0; this.checkBoxStopMedia.Text = "stop on incoming call"; this.checkBoxStopMedia.UseVisualStyleBackColor = true; @@ -493,6 +489,7 @@ // // tabPhonebook // + this.tabPhonebook.Controls.Add(this.buttonClearAll); this.tabPhonebook.Controls.Add(this.pictureBoxCaller); this.tabPhonebook.Controls.Add(this.buttonCallerChange); this.tabPhonebook.Controls.Add(this.checkBoxCallerShow); @@ -513,7 +510,7 @@ // pictureBoxCaller // this.pictureBoxCaller.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.pictureBoxCaller.Location = new System.Drawing.Point(417, 38); + this.pictureBoxCaller.Location = new System.Drawing.Point(467, 86); this.pictureBoxCaller.Name = "pictureBoxCaller"; this.pictureBoxCaller.Size = new System.Drawing.Size(100, 122); this.pictureBoxCaller.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; @@ -523,7 +520,7 @@ // buttonCallerChange // this.buttonCallerChange.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonCallerChange.Location = new System.Drawing.Point(417, 278); + this.buttonCallerChange.Location = new System.Drawing.Point(467, 326); this.buttonCallerChange.Name = "buttonCallerChange"; this.buttonCallerChange.Size = new System.Drawing.Size(100, 25); this.buttonCallerChange.TabIndex = 3; @@ -536,9 +533,9 @@ this.checkBoxCallerShow.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.checkBoxCallerShow.AutoSize = true; this.checkBoxCallerShow.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.checkBoxCallerShow.Location = new System.Drawing.Point(437, 254); + this.checkBoxCallerShow.Location = new System.Drawing.Point(490, 302); this.checkBoxCallerShow.Name = "checkBoxCallerShow"; - this.checkBoxCallerShow.Size = new System.Drawing.Size(80, 17); + this.checkBoxCallerShow.Size = new System.Drawing.Size(77, 17); this.checkBoxCallerShow.TabIndex = 2; this.checkBoxCallerShow.Text = "show notify"; this.checkBoxCallerShow.UseVisualStyleBackColor = true; @@ -547,24 +544,24 @@ // this.textBoxCallerName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.textBoxCallerName.BorderColor = System.Drawing.Color.Empty; - this.textBoxCallerName.Location = new System.Drawing.Point(417, 222); + this.textBoxCallerName.Location = new System.Drawing.Point(467, 270); this.textBoxCallerName.Name = "textBoxCallerName"; - this.textBoxCallerName.Size = new System.Drawing.Size(100, 21); + this.textBoxCallerName.Size = new System.Drawing.Size(100, 20); this.textBoxCallerName.TabIndex = 1; // // textBoxCallerId // this.textBoxCallerId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.textBoxCallerId.BorderColor = System.Drawing.Color.Empty; - this.textBoxCallerId.Location = new System.Drawing.Point(417, 180); + this.textBoxCallerId.Location = new System.Drawing.Point(467, 228); this.textBoxCallerId.Name = "textBoxCallerId"; - this.textBoxCallerId.Size = new System.Drawing.Size(100, 21); + this.textBoxCallerId.Size = new System.Drawing.Size(100, 20); this.textBoxCallerId.TabIndex = 0; // // buttonCallerRemove // this.buttonCallerRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonCallerRemove.Location = new System.Drawing.Point(417, 6); + this.buttonCallerRemove.Location = new System.Drawing.Point(467, 6); this.buttonCallerRemove.Name = "buttonCallerRemove"; this.buttonCallerRemove.Size = new System.Drawing.Size(100, 25); this.buttonCallerRemove.TabIndex = 6; @@ -593,7 +590,7 @@ this.dataGridView.RowTemplate.Height = 23; this.dataGridView.RowTemplate.ReadOnly = true; this.dataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dataGridView.Size = new System.Drawing.Size(405, 297); + this.dataGridView.Size = new System.Drawing.Size(455, 345); this.dataGridView.TabIndex = 5; this.dataGridView.Sorted += new System.EventHandler(this.dataGridView_Sorted); this.dataGridView.SelectionChanged += new System.EventHandler(this.dataGridView_SelectionChanged); @@ -623,9 +620,9 @@ // this.labelCallerId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.labelCallerId.AutoSize = true; - this.labelCallerId.Location = new System.Drawing.Point(423, 163); + this.labelCallerId.Location = new System.Drawing.Point(473, 211); this.labelCallerId.Name = "labelCallerId"; - this.labelCallerId.Size = new System.Drawing.Size(44, 13); + this.labelCallerId.Size = new System.Drawing.Size(42, 13); this.labelCallerId.TabIndex = 12; this.labelCallerId.Text = "CallerId"; // @@ -633,9 +630,9 @@ // this.labelCallerName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.labelCallerName.AutoSize = true; - this.labelCallerName.Location = new System.Drawing.Point(423, 205); + this.labelCallerName.Location = new System.Drawing.Point(473, 253); this.labelCallerName.Name = "labelCallerName"; - this.labelCallerName.Size = new System.Drawing.Size(34, 13); + this.labelCallerName.Size = new System.Drawing.Size(35, 13); this.labelCallerName.TabIndex = 11; this.labelCallerName.Text = "Name"; // @@ -670,6 +667,104 @@ this.buttonCancel.UseVisualStyleBackColor = true; this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); // + // buttonClearAll + // + this.buttonClearAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonClearAll.Location = new System.Drawing.Point(467, 37); + this.buttonClearAll.Name = "buttonClearAll"; + this.buttonClearAll.Size = new System.Drawing.Size(100, 25); + this.buttonClearAll.TabIndex = 14; + this.buttonClearAll.Text = "Clear All"; + this.buttonClearAll.UseVisualStyleBackColor = true; + this.buttonClearAll.Click += new System.EventHandler(this.buttonClearAll_Click); + // + // mpImportFBMonitor + // + this.mpImportFBMonitor.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.mpImportFBMonitor.Location = new System.Drawing.Point(279, 66); + this.mpImportFBMonitor.Name = "mpImportFBMonitor"; + this.mpImportFBMonitor.Size = new System.Drawing.Size(93, 23); + this.mpImportFBMonitor.TabIndex = 3; + this.mpImportFBMonitor.Text = "Import"; + this.mpImportFBMonitor.UseVisualStyleBackColor = true; + this.mpImportFBMonitor.Click += new System.EventHandler(this.mpImportFBMonitor_Click); + // + // textBoxSuffixWork + // + this.textBoxSuffixWork.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxSuffixWork.BorderColor = System.Drawing.Color.Empty; + this.textBoxSuffixWork.Location = new System.Drawing.Point(85, 45); + this.textBoxSuffixWork.Name = "textBoxSuffixWork"; + this.textBoxSuffixWork.Size = new System.Drawing.Size(141, 20); + this.textBoxSuffixWork.TabIndex = 4; + // + // textBoxSuffixHome + // + this.textBoxSuffixHome.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxSuffixHome.BorderColor = System.Drawing.Color.Empty; + this.textBoxSuffixHome.Location = new System.Drawing.Point(85, 19); + this.textBoxSuffixHome.Name = "textBoxSuffixHome"; + this.textBoxSuffixHome.Size = new System.Drawing.Size(141, 20); + this.textBoxSuffixHome.TabIndex = 5; + // + // textBoxSuffixMobile + // + this.textBoxSuffixMobile.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxSuffixMobile.BorderColor = System.Drawing.Color.Empty; + this.textBoxSuffixMobile.Location = new System.Drawing.Point(85, 71); + this.textBoxSuffixMobile.Name = "textBoxSuffixMobile"; + this.textBoxSuffixMobile.Size = new System.Drawing.Size(141, 20); + this.textBoxSuffixMobile.TabIndex = 6; + // + // groupBoxImport + // + this.groupBoxImport.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxImport.Controls.Add(this.mpLabel3); + this.groupBoxImport.Controls.Add(this.mpLabel2); + this.groupBoxImport.Controls.Add(this.labelSuffixHome); + this.groupBoxImport.Controls.Add(this.textBoxSuffixMobile); + this.groupBoxImport.Controls.Add(this.textBoxSuffixHome); + this.groupBoxImport.Controls.Add(this.mpImportFBMonitor); + this.groupBoxImport.Controls.Add(this.textBoxSuffixWork); + this.groupBoxImport.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBoxImport.Location = new System.Drawing.Point(189, 208); + this.groupBoxImport.Name = "groupBoxImport"; + this.groupBoxImport.Size = new System.Drawing.Size(378, 95); + this.groupBoxImport.TabIndex = 3; + this.groupBoxImport.TabStop = false; + this.groupBoxImport.Text = "Fritz!Box CallMonitor import"; + // + // labelSuffixHome + // + this.labelSuffixHome.AutoSize = true; + this.labelSuffixHome.Location = new System.Drawing.Point(6, 22); + this.labelSuffixHome.Name = "labelSuffixHome"; + this.labelSuffixHome.Size = new System.Drawing.Size(65, 13); + this.labelSuffixHome.TabIndex = 7; + this.labelSuffixHome.Text = "Suffix home:"; + // + // mpLabel2 + // + this.mpLabel2.AutoSize = true; + this.mpLabel2.Location = new System.Drawing.Point(6, 48); + this.mpLabel2.Name = "mpLabel2"; + this.mpLabel2.Size = new System.Drawing.Size(62, 13); + this.mpLabel2.TabIndex = 8; + this.mpLabel2.Text = "Suffix work:"; + // + // mpLabel3 + // + this.mpLabel3.AutoSize = true; + this.mpLabel3.Location = new System.Drawing.Point(6, 74); + this.mpLabel3.Name = "mpLabel3"; + this.mpLabel3.Size = new System.Drawing.Size(69, 13); + this.mpLabel3.TabIndex = 9; + this.mpLabel3.Text = "Suffix mobile:"; + // // FritzBoxSetupFrom // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -706,6 +801,8 @@ this.tabPhonebook.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxCaller)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit(); + this.groupBoxImport.ResumeLayout(false); + this.groupBoxImport.PerformLayout(); this.ResumeLayout(false); } @@ -724,7 +821,6 @@ private MediaPortal.UserInterface.Controls.MPLabel labelHelp; private System.Windows.Forms.TabPage tabIncoming; private MediaPortal.UserInterface.Controls.MPGroupBox groupBoxPhonebook; - private MediaPortal.UserInterface.Controls.MPButton mpImportFBMonitor; private MediaPortal.UserInterface.Controls.MPCheckBox checkBoxSaveUnknownCaller; private MediaPortal.UserInterface.Controls.MPCheckBox checkBoxShowUnknownCaller; private MediaPortal.UserInterface.Controls.MPCheckBox checkBoxUsePhonebook; @@ -760,5 +856,14 @@ private MediaPortal.UserInterface.Controls.MPLabel lblMaxNotifies; private System.Windows.Forms.NumericUpDown numericUpDownPort; private MediaPortal.UserInterface.Controls.MPCheckBox checkBoxCloseOnConnectionClosed; + private MediaPortal.UserInterface.Controls.MPButton buttonClearAll; + private MediaPortal.UserInterface.Controls.MPGroupBox groupBoxImport; + private MediaPortal.UserInterface.Controls.MPTextBox textBoxSuffixMobile; + private MediaPortal.UserInterface.Controls.MPTextBox textBoxSuffixHome; + private MediaPortal.UserInterface.Controls.MPButton mpImportFBMonitor; + private MediaPortal.UserInterface.Controls.MPTextBox textBoxSuffixWork; + private MediaPortal.UserInterface.Controls.MPLabel mpLabel3; + private MediaPortal.UserInterface.Controls.MPLabel mpLabel2; + private MediaPortal.UserInterface.Controls.MPLabel labelSuffixHome; } } \ No newline at end of file Modified: trunk/plugins/FritzBox/FritzBox/FritzBoxSetupFrom.cs =================================================================== --- trunk/plugins/FritzBox/FritzBox/FritzBoxSetupFrom.cs 2008-07-14 18:57:36 UTC (rev 1919) +++ trunk/plugins/FritzBox/FritzBox/FritzBoxSetupFrom.cs 2008-07-16 01:03:01 UTC (rev 1920) @@ -75,6 +75,10 @@ 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(); @@ -116,6 +120,9 @@ 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(); @@ -372,5 +379,14 @@ { numericUpDownMaxNotifies.Enabled = !checkBoxCloseOnConnectionClosed.Checked; } + + private void buttonClearAll_Click(object sender, EventArgs e) + { + if (MessageBox.Show("Attention! Do you really want to clear the phone book? This will delete all your entries!", "", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) + { + phoneBook.Contacts.Clear(); + dataGridView.Rows.Clear(); + } + } } } \ No newline at end of file Modified: trunk/plugins/FritzBox/FritzBox/PhoneBook.cs =================================================================== --- trunk/plugins/FritzBox/FritzBox/PhoneBook.cs 2008-07-14 18:57:36 UTC (rev 1919) +++ trunk/plugins/FritzBox/FritzBox/PhoneBook.cs 2008-07-16 01:03:01 UTC (rev 1920) @@ -43,6 +43,10 @@ bool _showUnknownCaller; bool _saveUnknownCaller; + string _suffixHome; + string _suffixWork; + string _suffixMobile; + bool _extensiveLogging; #endregion @@ -61,6 +65,22 @@ set { _saveUnknownCaller = value; } } + public string SuffixHome + { + get { return _suffixHome; } + set { _suffixHome = value; } + } + public string SuffixWork + { + get { return _suffixWork; } + set { _suffixWork = value; } + } + public string SuffixMobile + { + get { return _suffixMobile; } + set { _suffixMobile = value; } + } + public List<Caller> Contacts { get { return _contacts; } @@ -104,6 +124,10 @@ _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)"); } @@ -143,6 +167,10 @@ { xmlreader.SetValueAsBool("fritzbox", "showUnknownCaller", _showUnknownCaller); xmlreader.SetValueAsBool("fritzbox", "saveUnknownCaller", _saveUnknownCaller); + + xmlreader.SetValue("fritzbox", "suffixHome", _suffixHome); + xmlreader.SetValue("fritzbox", "suffixWork", _suffixWork); + xmlreader.SetValue("fritzbox", "suffixMobile", _suffixMobile); } using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "fritzbox.xml"))) @@ -169,34 +197,56 @@ // Create an instance of StreamReader to read from a file. // The using statement also closes the StreamReader. - using (StreamReader sr = new StreamReader(filepath)) + using (StreamReader sr = new StreamReader(filepath, Encoding.Default)) { string line; + line = sr.ReadLine(); // sep=; + line = sr.ReadLine(); // Name;TelNumHome;VanityHome;KurzWahlHome;TelNumWork;VanityWork;KurzWahlWork;TelNumMobile;VanityMobile;KurzWahlMobile;Kommentar;Firma;Bild;Kategorie;ImageUrl;Prio;Email;RingTone;RingVol + // Read and display lines from the file until the end of // the file is reached. while ((line = sr.ReadLine()) != null) { - if ((count == 0) && line.Contains("sep=;")) - continue; - if ((count == 0) && line.Contains("Telefonnummer")) - continue; - string[] ar = line.Split(char.Parse(";")); - ar[0] = ar[0].TrimStart('!'); - ar[1] = ar[1].TrimStart('!'); + // add TelNumHome , ar[1] + if (ar[1] != string.Empty) + if (!CallerExists(ar[1])) + { + Caller caller = new Caller(); + caller.Name = ar[0] + SuffixHome; + caller.ID = ar[1]; + caller.Show = true; + + _contacts.Add(caller); + count++; + } - Caller caller = new Caller(); + // add TelNumWork , ar[4] + if (ar[4] != string.Empty) + if (!CallerExists(ar[4])) + { + Caller caller = new Caller(); + caller.Name = ar[0] + SuffixWork; + caller.ID = ar[4]; + caller.Show = true; + + _contacts.Add(caller); + count++; + } - caller.ID = ar[2]; - caller.Name = string.Format("{0} {1}", ar[0], ar[1]); - caller.Name = caller.Name.Trim(); - caller.Show = true; + // add TelNumMobile , ar[7] + if (ar[7] != string.Empty) + if (!CallerExists(ar[7])) + { + Caller caller = new Caller(); + caller.Name = ar[0] + SuffixMobile; + caller.ID = ar[7]; + caller.Show = true; - if (CallerExists(caller)) continue; - - _contacts.Add(caller); - count++; + _contacts.Add(caller); + count++; + } } } @@ -210,13 +260,11 @@ } } - public bool CallerExists(Caller caller) + public bool CallerExists(string callerId) { - for (int i = 0; i < _contacts.Count; i++) - { - if (_contacts[i].ID == caller.ID) - return true; - } + foreach (Caller caller in _contacts) + if (caller.ID.Equals(callerId)) return true; + return false; } Modified: trunk/plugins/FritzBox/FritzBox/Properties/AssemblyInfo.cs =================================================================== --- trunk/plugins/FritzBox/FritzBox/Properties/AssemblyInfo.cs 2008-07-14 18:57:36 UTC (rev 1919) +++ trunk/plugins/FritzBox/FritzBox/Properties/AssemblyInfo.cs 2008-07-16 01:03:01 UTC (rev 1920) @@ -29,5 +29,5 @@ // Buildnummer // Revision // -[assembly: AssemblyVersion("0.3.0.0")] -[assembly: AssemblyFileVersion("0.3.0.0")] +[assembly: AssemblyVersion("0.3.1.0")] +[assembly: AssemblyFileVersion("0.3.1.0")] Modified: trunk/plugins/FritzBox/FritzBox.xmp =================================================================== --- trunk/plugins/FritzBox/FritzBox.xmp 2008-07-14 18:57:36 UTC (rev 1919) +++ trunk/plugins/FritzBox/FritzBox.xmp 2008-07-16 01:03:01 UTC (rev 1920) @@ -8,7 +8,7 @@ <Source>FritzBox\gfx\Thumbs\YAC\_noImage.png</Source> <Id>04010</Id> <Option>OutputFileName=|DefaultFile=False|</Option> - <Guid>580ec1c2-280e-4687-8717-f0539dd6aade</Guid> + <Guid>3ffa94ec-3feb-4a17-a810-172c92c8327d</Guid> </File> <File> <FileName>_unknown.png</FileName> @@ -17,7 +17,7 @@ <Source>FritzBox\gfx\Thumbs\YAC\_unknown.png</Source> <Id>04010</Id> <Option /> - <Guid>a54daff6-0969-4190-b5b7-6476b68d1d10</Guid> + <Guid>eff8eaba-dd4a-41a5-b5b6-8d2a7f883ce4</Guid> </File> <File> <FileName>FritzBox.dll</FileName> @@ -26,7 +26,7 @@ <Source>FritzBox\bin\Release\FritzBox.dll</Source> <Id>01020</Id> <Option /> - <Guid>9c4a9bbd-f5b4-43a5-a625-6426e9581989</Guid> + <Guid>9e67d038-ac40-4084-9d43-51a541f5c092</Guid> </File> </FileList> <StringList /> @@ -36,12 +36,12 @@ <SetupGroups /> <SetupGroupMappings /> <Option> - <BuildFileName>D:\mediaportal\mediaportal_plugins\FritzBox\FritzBox_v0.3.0.1.mpi</BuildFileName> + <BuildFileName>D:\mediaportal\mediaportal_plugins\FritzBox\FritzBox_v0.3.1.0.mpi</BuildFileName> <ProiectFileName>D:\mediaportal\mediaportal_plugins\FritzBox\FritzBox.xmp</ProiectFileName> <ProiectName>FritzBox CallMonitor</ProiectName> <Author>chefkoch @ Team MediaPortal</Author> <UpdateURL>http://mpi.team-mediaportal.com/downloads</UpdateURL> - <Version>0.3.0.1</Version> + <Version>0.3.1.0</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. All strings are multi language. Modified: trunk/plugins/FritzBox/MP2version/CallMonitor.cs =================================================================== --- trunk/plugins/FritzBox/MP2version/CallMonitor.cs 2008-07-14 18:57:36 UTC (rev 1919) +++ trunk/plugins/FritzBox/MP2version/CallMonitor.cs 2008-07-16 01:03:01 UTC (rev 1920) @@ -1,10 +1,11 @@ using System; using System.Collections.Generic; using System.Text; -using MediaPortal.Core.PluginManager; + using MediaPortal.Core; using MediaPortal.Core.Logging; using MediaPortal.Core.Messaging; +using MediaPortal.Core.PluginManager; namespace CallMonitor { @@ -21,7 +22,6 @@ public CallMonitor() { Logger = ServiceScope.Get<ILogger>(); - } #region IPlugin Members @@ -150,6 +150,7 @@ void ShowNotify(CallAction action) { + /* // MediaPortal.Utilities.Screens.InfoScreen info = new MediaPortal.Utilities.Screens.InfoScreen(action.type.ToString(), "INCOMING CALL"); MediaPortal.Utilities.Screens.InfoScreen info = new MediaPortal.Utilities.Screens.InfoScreen(action.type.ToString(), "INCOMING CALL", action.caller.ID, MediaPortal.Utilities.Screens.BaseScreen.Image.info); @@ -160,6 +161,7 @@ info.pbIcon.ImageLocation = @"G:\chefkoch.png"; info.Show(); + */ } Modified: trunk/plugins/FritzBox/MP2version/CallMonitor.csproj =================================================================== --- trunk/plugins/FritzBox/MP2version/CallMonitor.csproj 2008-07-14 18:57:36 UTC (rev 1919) +++ trunk/plugins/FritzBox/MP2version/CallMonitor.csproj 2008-07-16 01:03:01 UTC (rev 1920) @@ -42,12 +42,6 @@ </Target> --> <ItemGroup> - <Compile Include="HelperClasses\CallInfoScreen.cs"> - <SubType>Form</SubType> - </Compile> - <Compile Include="HelperClasses\CallInfoScreen.Designer.cs"> - <DependentUpon>CallInfoScreen.cs</DependentUpon> - </Compile> <Compile Include="ListenerBuilder.cs" /> <Compile Include="HelperClasses\ICallMonitor.cs" /> <Compile Include="HelperClasses\IListener.cs" /> @@ -68,14 +62,14 @@ </ItemGroup> <PropertyGroup> <PostBuildEvent>xcopy /Y "$(ProjectDir)$(ProjectName).plugin" "$(SolutionDir)$(SolutionName)\$(OutDir)Plugins\$(ProjectName)\" -xcopy /Y "$(TargetDir)CallMonitor.dll" "$(SolutionDir)$(SolutionName)\$(OutDir)Plugins\$(ProjectName)\"</PostBuildEvent> +xcopy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)$(SolutionName)\$(OutDir)Plugins\$(ProjectName)\"</PostBuildEvent> </PropertyGroup> <ItemGroup> - <ProjectReference Include="..\..\MediaPortal.Core\MediaPortal.Core.csproj"> + <ProjectReference Include="..\..\..\MP-II\MediaPortal.Interfaces\MediaPortal.Interfaces.csproj"> <Project>{52E587D0-A274-44DA-8846-8EEAF5414923}</Project> - <Name>MediaPortal.Core</Name> + <Name>MediaPortal.Interfaces</Name> </ProjectReference> - <ProjectReference Include="..\..\MediaPortal.Utilities\MediaPortal.Utilities.csproj"> + <ProjectReference Include="..\..\..\MP-II\MediaPortal.Utilities\MediaPortal.Utilities.csproj"> <Project>{4FE7B8AE-1330-424A-91A1-C68D7ABF9CB8}</Project> <Name>MediaPortal.Utilities</Name> </ProjectReference> Modified: trunk/plugins/FritzBox/MP2version/Listeners/FritzBox/FritzBox.cs =================================================================== --- trunk/plugins/FritzBox/MP2version/Listeners/FritzBox/FritzBox.cs 2008-07-14 18:57:36 UTC (rev 1919) +++ trunk/plugins/FritzBox/MP2version/Listeners/FritzBox/FritzBox.cs 2008-07-16 01:03:01 UTC (rev 1920) @@ -1,18 +1,17 @@ +using System; using System.IO; -using MediaPortal.Core; -using MediaPortal.Core.Threading; - +using System.IO.Ports; using System.Net.Sockets; -using MediaPortal.Core.PluginManager; +using System.Text; -using CallMonitor; -using System; +using MediaPortal.Core; using MediaPortal.Core.Logging; -using System.IO.Ports; -using System.Text; -using MediaPortal.Core.PluginManager; using MediaPortal.Core.Messaging; +using MediaPortal.Core.PluginManager; +using MediaPortal.Core.Threading; +using CallMonitor; + namespace CallMonitor.Listeners { public class FritzBox : IPlugin, IListener Modified: trunk/plugins/FritzBox/MP2version/Listeners/FritzBox/FritzBox.csproj =================================================================== --- trunk/plugins/FritzBox/MP2version/Listeners/FritzBox/FritzBox.csproj 2008-07-14 18:57:36 UTC (rev 1919) +++ trunk/plugins/FritzBox/MP2version/Listeners/FritzBox/FritzBox.csproj 2008-07-16 01:03:01 UTC (rev 1920) @@ -52,16 +52,16 @@ xcopy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)$(SolutionName)\$(OutDir)Plugins\CallMonitor.Listeners.$(ProjectName)\"</PostBuildEvent> </PropertyGroup> <ItemGroup> + <Reference Include="System" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\..\..\..\MP-II\MediaPortal.Interfaces\MediaPortal.Interfaces.csproj"> + <Project>{EE12C52A-B610-4B8B-95CE-76AE73F8990E}</Project> + <Name>MediaPortal.Interfaces</Name> + </ProjectReference> <ProjectReference Include="..\..\CallMonitor.csproj"> <Project>{131A0BFD-AF34-4AEB-8A10-7330FE83811E}</Project> - <Name>CallMonitor %28CallMonitor\CallMonitor%29</Name> + <Name>CallMonitor %28Plugins\CallMonitor\CallMonitor%29</Name> </ProjectReference> - <ProjectReference Include="..\..\..\..\MediaPortal.Core\MediaPortal.Core.csproj"> - <Project>{52E587D0-A274-44DA-8846-8EEAF5414923}</Project> - <Name>MediaPortal.Core</Name> - </ProjectReference> </ItemGroup> - <ItemGroup> - <Reference Include="System" /> - </ItemGroup> </Project> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |