Index: MP-TVSeries/Configuration/GUIConfiguration.cs =================================================================== --- MP-TVSeries/Configuration/GUIConfiguration.cs (revision 2101) +++ MP-TVSeries/Configuration/GUIConfiguration.cs (working copy) @@ -201,8 +201,6 @@ textBox_PluginHomeName.Text = DBOption.GetOptions(DBOption.cPluginName); checkBox_OnlineSearch.Checked = DBOption.GetOptions(DBOption.cOnlineParseEnabled); checkBox_FullSeriesRetrieval.Checked = DBOption.GetOptions(DBOption.cFullSeriesRetrieval); - dbOptCheckBoxCleanOnlineEpisodes.Enabled = checkBox_FullSeriesRetrieval.Checked; - dbOptCheckBoxRemoveEpZero.Enabled = checkBox_FullSeriesRetrieval.Checked; checkBox_AutoChooseSeries.Checked = DBOption.GetOptions(DBOption.cAutoChooseSeries); checkBox_AutoChooseOrder.Checked = DBOption.GetOptions(DBOption.cAutoChooseOrder); checkBox_Episode_OnlyShowLocalFiles.Checked = !DBOption.GetOptions(DBOption.cOnlyShowLocalFiles); @@ -337,6 +335,8 @@ // dbOptChkBox_SubCentral_DownloadSubtitlesOnPlay.Visible = false; dbOptCheckBoxRemoveEpZero.Enabled = DBOption.GetOptions(DBOption.cCleanOnlineEpisodes); + + checkBox_OverrideComboLang.Checked = DBOption.GetOptions(DBOption.cOverrideLanguage); tabControl_Details.SelectTab(1); } @@ -355,8 +355,8 @@ // Get Online Languages and fill language combobox // do this in background thread so doesn't lockup during load LoadOnlineLanguages(); + LoadViews(); - LoadViews(); // Select First Item in list if (_availViews.Items.Count > 0) _availViews.SelectedIndex = 0; @@ -397,7 +397,11 @@ if (onlineLanguages.Count != 0) { MPTVSeriesLog.Write("Successfully retrieved {0} languages from online", onlineLanguages.Count); - comboOnlineLang.Enabled = true; + + if (!DBOption.GetOptions(DBOption.cOverrideLanguage)) + { + comboOnlineLang.Enabled = true; + } } } @@ -407,15 +411,23 @@ comboOnlineLang.Enabled = false; - // get the online languages from the interface - onlineLanguages.AddRange(new GetLanguages().languages); - string selectedLanguage = DBOption.GetOptions(DBOption.cOnlineLanguage); - foreach (Language lang in onlineLanguages) + // get the online languages from the interface + if (onlineLanguages.Count == 0) { - comboOnlineLang.Items.Add(lang.language); - if (lang.id.ToString() == selectedLanguage) comboOnlineLang.SelectedItem = lang.language; - if (lang.abbreviation == selectedLanguage) comboOnlineLang.SelectedItem = lang.language; + onlineLanguages.AddRange(new GetLanguages().languages); } + + // Not necessary to read into the combobox if not used! + if (!DBOption.GetOptions(DBOption.cOverrideLanguage)) + { + string selectedLanguage = DBOption.GetOptions(DBOption.cOnlineLanguage); + foreach (Language lang in onlineLanguages) + { + comboOnlineLang.Items.Add(lang.language); + if (lang.id.ToString() == selectedLanguage) comboOnlineLang.SelectedItem = lang.language; + if (lang.abbreviation == selectedLanguage) comboOnlineLang.SelectedItem = lang.language; + } + } } #endregion @@ -1481,7 +1493,7 @@ ////////////////////////////////////////////////////////////////////////////// #region Clears all fields so new data can be entered - this.detailsPropertyBindingSource.Clear(); + this.dataGridView1.Rows.Clear(); try { if (this.pictureBox_Series.Image != null) @@ -1847,8 +1859,7 @@ case DBOnlineSeries.cPoster: case DBOnlineSeries.cViewTags: case DBOnlineSeries.cBanner: - case DBOnlineSeries.cEpisodeOrders: - case DBOnlineSeries.cLanguage: + case DBOnlineSeries.cEpisodeOrders: case DBOnlineSeries.cSeriesID: case DBOnlineSeries.cOriginalName: case DBOnlineSeries.cHasNewEpisodes: @@ -1868,6 +1879,11 @@ AddPropertyBindingSource(DBSeries.PrettyFieldName(key), key, series[key], false); break; + case DBOnlineSeries.cLanguage: + if ( !String.IsNullOrEmpty(series[key]) && DBOption.GetOptions(DBOption.cOverrideLanguage) ) + AddPropertyBindingSource(DBSeries.PrettyFieldName(key), key, series[key]); + break; + case DBOnlineSeries.cRating: if (!String.IsNullOrEmpty(series[key])) { @@ -2015,32 +2031,87 @@ } } - if(id < 0) + + if (id < 0) { - // Add new Row - id = this.detailsPropertyBindingSource.Add(new DetailsProperty(FieldPrettyName, FieldValue)); - } this.dataGridView1.Rows[id].Cells[1].Value = FieldValue; // we just edit the value + DataGridViewRow dataGridDetailRow = new DataGridViewRow(); + DataGridViewTextBoxCell cFieldName; - // First Column (Name) - DataGridViewCell cell = this.dataGridView1.Rows[id].Cells[0]; - cell.Style.BackColor = System.Drawing.SystemColors.Control; - cell.ReadOnly = true; + if ((FieldName == "language") && (DBOption.GetOptions(DBOption.cOverrideLanguage))) + { + dataGridDetailRow = new DataGridViewRow(); + cFieldName = new DataGridViewTextBoxCell(); + DataGridViewComboBoxCell cbCell = new DataGridViewComboBoxCell(); - // Second Column (Value) - cell = this.dataGridView1.Rows[id].Cells[1]; - cell.Tag = FieldName; - if (!CanModify) - { - cell.ReadOnly = true; - cell.Style.BackColor = System.Drawing.SystemColors.Control; - } - if (userEdited) - { - cell.Style.ForeColor = System.Drawing.SystemColors.HotTrack; - } + // First Column (Name) + cFieldName.Value = FieldName; + cFieldName.Style.BackColor = System.Drawing.SystemColors.Control; + dataGridDetailRow.Cells.Add(cFieldName); + cFieldName.ReadOnly = true; - cell.Style.Alignment = TextAlign; + // Second Column (Value) + if (onlineLanguages.Count == 0) + { + onlineLanguages.AddRange(new GetLanguages().languages); + } + foreach (Language lang in onlineLanguages) + { + cbCell.Items.Add(lang.language); + } + + Language selectedLang = onlineLanguages.Find(x => x.abbreviation.Contains(FieldValue)); + for (int i = 0; i < cbCell.Items.Count; i++) + { + string s = cbCell.Items[i].ToString(); + if (cbCell.Items[i].ToString() == selectedLang.language) + { + cbCell.Value = cbCell.Items[i]; + } + } + + cbCell.Tag = FieldName; + + dataGridDetailRow.Cells.Add(cbCell); + cbCell.ReadOnly = false; + + // Add the row to the DataGridView + dataGridView1.Rows.Add(dataGridDetailRow); + } + else + { + cFieldName = new DataGridViewTextBoxCell(); + DataGridViewTextBoxCell cFieldValue = new DataGridViewTextBoxCell(); + + // First Column (Name) + cFieldName.Value = FieldName; + cFieldName.Style.BackColor = System.Drawing.SystemColors.Control; + dataGridDetailRow.Cells.Add(cFieldName); + cFieldName.ReadOnly = true; + + cFieldValue.Value = FieldValue; + cFieldValue.Tag = FieldName; + + dataGridDetailRow.Cells.Add(cFieldValue); + + if (!CanModify) + { + cFieldValue.ReadOnly = true; + cFieldValue.Style.BackColor = System.Drawing.SystemColors.Control; + } + + if (userEdited) + { + cFieldValue.Style.ForeColor = System.Drawing.SystemColors.HotTrack; + + } + + cFieldValue.Style.Alignment = TextAlign; + + // Add the rows to the DataGridView + dataGridView1.Rows.Add(dataGridDetailRow); + } + } } private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) @@ -2068,12 +2139,14 @@ switch (origFieldName) { case DBSeries.cScanIgnore: - case DBOnlineSeries.cMyRating: + case DBOnlineSeries.cLanguage: + case DBOnlineSeries.cSummary: + case DBOnlineSeries.cMyRating: editFieldName = origFieldName; bUserEdit = false; break; } - + string newValue = (String)cell.Value; switch (nodeEdited.Name) @@ -2080,7 +2153,18 @@ { case DBSeries.cTableName: DBSeries series = (DBSeries)nodeEdited.Tag; - series[editFieldName] = newValue; + if (editFieldName == "language") + { + Language selectedLang = onlineLanguages.Find(x => x.language.Contains(newValue)); + if (selectedLang != null) + { + series[editFieldName] = selectedLang.abbreviation; + } + } + else + { + series[editFieldName] = newValue; + } series.Commit(); if (bUserEdit) @@ -2096,7 +2180,7 @@ } if (series[DBOnlineSeries.cPrettyName].ToString().Length > 0) - nodeEdited.Text = series[DBOnlineSeries.cPrettyName]; + nodeEdited.Text = series[DBOnlineSeries.cPrettyName]; break; case DBSeason.cTableName: @@ -2120,7 +2204,7 @@ case DBEpisode.cTableName: DBEpisode episode = (DBEpisode)nodeEdited.Tag; - + if (episode.onlineEpisode.FieldNames.Contains(origFieldName)) { episode.onlineEpisode[editFieldName] = newValue; @@ -2158,9 +2242,6 @@ private void checkBox_FullSeriesRetrieval_CheckedChanged(object sender, EventArgs e) { DBOption.SetOptions(DBOption.cFullSeriesRetrieval, checkBox_FullSeriesRetrieval.Checked); - - dbOptCheckBoxCleanOnlineEpisodes.Enabled = checkBox_FullSeriesRetrieval.Checked; - dbOptCheckBoxRemoveEpZero.Enabled = checkBox_FullSeriesRetrieval.Checked; } private void checkBox_AutoChooseSeries_CheckedChanged(object sender, EventArgs e) @@ -2639,7 +2720,7 @@ if (this.treeView_Library.Nodes.Count == 0) { // also clear the data pane - this.detailsPropertyBindingSource.Clear(); + this.dataGridView1.Rows.Clear(); try { if (this.pictureBox_Series.Image != null) @@ -3684,6 +3765,29 @@ } } + private void checkBox_OverrideComboLang_CheckedChanged(object sender, EventArgs e) + { + DBOption.SetOptions(DBOption.cOverrideLanguage, checkBox_OverrideComboLang.Checked); + if (checkBox_OverrideComboLang.Checked) + { + // Disable and clear + comboOnlineLang.Items.Clear(); + comboOnlineLang.Enabled = false; + DBOption.SetOptions(DBOption.cOnlineLanguage, "en"); //Set the default value. + Online_Parsing_Classes.OnlineAPI.SelLanguageAsString = string.Empty; + + MPTVSeriesLog.Write("Now you can change the language on each Series in Details Tab"); + // Reload the tree for showing the language property + LoadTree(); + } + else + { + LoadOnlineLanguages(); + // Reload the tree for hideing the language property + LoadTree(); + } + } + private void linkDelUpdateTime_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { DBOption.SetOptions(DBOption.cUpdateTimeStamp, 0); @@ -4593,6 +4697,7 @@ } }; + [Obsolete("Not Used Anymore", true)] public class DetailsProperty { String m_Property = String.Empty; @@ -4615,6 +4720,7 @@ this.m_Property = value; } } + public String Value { get @@ -4626,6 +4732,5 @@ this.m_Value = value; } } - } } Index: MP-TVSeries/Configuration/GUIConfiguration.designer.cs =================================================================== --- MP-TVSeries/Configuration/GUIConfiguration.designer.cs (revision 2101) +++ MP-TVSeries/Configuration/GUIConfiguration.designer.cs (working copy) @@ -117,6 +117,7 @@ this.checkBox_AutoChooseSeries = new System.Windows.Forms.CheckBox(); this.checkBox_OnlineSearch = new System.Windows.Forms.CheckBox(); this.comboOnlineLang = new System.Windows.Forms.ComboBox(); + this.checkBox_OverrideComboLang = new System.Windows.Forms.CheckBox(); this.linkDelUpdateTime = new System.Windows.Forms.LinkLabel(); this.txtMainMirror = new System.Windows.Forms.TextBox(); this.chkBlankBanners = new System.Windows.Forms.CheckBox(); @@ -287,7 +288,6 @@ this.listBox_Log = new System.Windows.Forms.ListBox(); this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.detailsPropertyBindingSource = new System.Windows.Forms.BindingSource(this.components); this.dbOptCheckBoxRemoveEpZero = new WindowPlugins.GUITVSeries.Configuration.DBOptionCheckBox(); this.dbOptCheckBoxCleanOnlineEpisodes = new WindowPlugins.GUITVSeries.Configuration.DBOptionCheckBox(); this.dbOptCheckBoxDownloadActors = new WindowPlugins.GUITVSeries.Configuration.DBOptionCheckBox(); @@ -361,7 +361,6 @@ this.groupBox4.SuspendLayout(); this.groupBox2.SuspendLayout(); this.tabAbout.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.detailsPropertyBindingSource)).BeginInit(); this.SuspendLayout(); // // columnHeader_Series @@ -839,6 +838,19 @@ this.toolTip_Help.SetToolTip(this.comboOnlineLang, "Select the language to download TV Series information in, defaults to English"); this.comboOnlineLang.SelectedIndexChanged += new System.EventHandler(this.comboOnlineLang_SelectedIndexChanged); // + // checkBox_OverrideComboLang + // + this.checkBox_OverrideComboLang.AutoSize = true; + this.checkBox_OverrideComboLang.Location = new System.Drawing.Point(259, 86); + this.checkBox_OverrideComboLang.Name = "checkBox_OverrideComboLang"; + this.checkBox_OverrideComboLang.Size = new System.Drawing.Size(117, 17); + this.checkBox_OverrideComboLang.TabIndex = 1; + this.checkBox_OverrideComboLang.Text = "Override Language for Series"; + this.toolTip_Help.SetToolTip(this.checkBox_OverrideComboLang, "Enable this option to change the Meta language for specific series..\rLanguage can" + + " be manually entered or corrected in Details tab"); + this.checkBox_OverrideComboLang.UseVisualStyleBackColor = true; + this.checkBox_OverrideComboLang.CheckedChanged += new System.EventHandler(this.checkBox_OverrideComboLang_CheckedChanged); + // // linkDelUpdateTime // this.linkDelUpdateTime.AutoSize = true; @@ -1711,7 +1723,6 @@ this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.dataGridViewTextBoxColumn1, this.dataGridViewTextBoxColumn2}); - this.dataGridView1.DataSource = this.detailsPropertyBindingSource; dataGridViewCellStyle25.Alignment = System.Windows.Forms.DataGridViewContentAlignment.TopLeft; dataGridViewCellStyle25.BackColor = System.Drawing.SystemColors.Window; dataGridViewCellStyle25.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); @@ -2228,6 +2239,7 @@ this.panel_OnlineData.Controls.Add(this.linkDelUpdateTime); this.panel_OnlineData.Controls.Add(this.label26); this.panel_OnlineData.Controls.Add(this.comboOnlineLang); + this.panel_OnlineData.Controls.Add(this.checkBox_OverrideComboLang); this.panel_OnlineData.Controls.Add(this.checkBox_OnlineSearch); this.panel_OnlineData.Controls.Add(this.checkBox_AutoChooseSeries); this.panel_OnlineData.Controls.Add(this.checkBox_FullSeriesRetrieval); @@ -3205,10 +3217,6 @@ this.dataGridViewTextBoxColumn2.HeaderText = "Value"; this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; // - // detailsPropertyBindingSource - // - this.detailsPropertyBindingSource.DataSource = typeof(WindowPlugins.GUITVSeries.DetailsProperty); - // // dbOptionCheckBoxRemoveEpZero // this.dbOptCheckBoxRemoveEpZero.AutoSize = true; @@ -3530,7 +3538,6 @@ this.groupBox4.ResumeLayout(false); this.groupBox2.ResumeLayout(false); this.tabAbout.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.detailsPropertyBindingSource)).EndInit(); this.ResumeLayout(false); } @@ -3542,7 +3549,6 @@ private System.Windows.Forms.ColumnHeader columnHeader_Season; private System.Windows.Forms.ColumnHeader columnHeader_Episode; private System.Windows.Forms.ColumnHeader columnHeader_OriginallyAired; - private System.Windows.Forms.BindingSource detailsPropertyBindingSource; private System.Windows.Forms.OpenFileDialog openFileDialog; private System.Windows.Forms.ListBox listBox_Log; private System.Windows.Forms.ToolTip toolTip_Help; @@ -3650,6 +3656,7 @@ private System.Windows.Forms.LinkLabel linkDelUpdateTime; private System.Windows.Forms.Label label26; private System.Windows.Forms.ComboBox comboOnlineLang; + private System.Windows.Forms.CheckBox checkBox_OverrideComboLang; private System.Windows.Forms.CheckBox checkBox_OnlineSearch; private System.Windows.Forms.CheckBox checkBox_AutoChooseSeries; private System.Windows.Forms.CheckBox checkBox_FullSeriesRetrieval; Index: MP-TVSeries/Configuration/GUIConfiguration.resx =================================================================== --- MP-TVSeries/Configuration/GUIConfiguration.resx (revision 2101) +++ MP-TVSeries/Configuration/GUIConfiguration.resx (working copy) @@ -134,7 +134,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA6 - eQAAAk1TRnQBSQFMAgEBDAEAAfwBBAH8AQQBGAEAARgBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFg + eQAAAk1TRnQBSQFMAgEBDAEAAQQBBQEEAQUBGAEAARgBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFg AwABYAMAAQEBAAEgBgABkP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AFUAAQEDBAEGAwsBDwMSBBkBIwMdASkDHgErAx0BKQMY ASEDEQEXAwoBDgMEAQUDAAEBLwAEAQECAwMEBAEFAwQBBQMDAQQDAgEDAwIBAwMBAQIDAQECAwABAQMA @@ -809,7 +809,7 @@ This setting can also be changed from within Media Portal in the plugins context menu. - + Sometimes the online database includes episodes with an index of zero. These are typically removed once re-organised into valid specials. @@ -816,6 +816,32 @@ If you don't collect episodes with an episode index of zero you can enable this option to cleanup such that your database remains clean. + + Enable this option to ensure that when you playback an episode that it is the next unwatched episode. +A prompt will be shown if trying to playback out of order. + +Note: It's also recommended that you also enable 'Download Episode information for the whole series' +so that a proper check can be performed. + +The check is ignored in the following conditions: +* Playback of Specials (and next unwatched Specials). +* Playback of Watched/Seen episodes. +* Playback using Playlist player. + + + If enabled and episode has been rated, mark the episode as watched. + +This setting is only applicable to episode ratings from theTVDB.com (if enabled). It's recommended +that syncing to trakt.tv via Trakt plugin is enabled if syncing of watched episodes is wanted. + +If Trakt plugin is installed and TVSeries plugin is enabled for sync, it's recommended this option is disabled. + + + Tick this to have the plugin automatically pop-up a rating's windows after you have watched an episodes which hasn't been rated yet. + +Note: if you are using the Trakt plugin, it's recommended you enable rate dialog after watched from there. This setting can be used to send +ratings to both thetvdb.com and trakt or just thetvdb.com. + 404, 12 @@ -859,32 +885,6 @@ Check the table below if the plugin was able to parse all of the episodes located in your Import Paths defined above. Episodes not parsed correctly will be highlighted. If renaming your files does not help, you can modify the plugins parser behaviour from the left hand side tree view. - - Enable this option to ensure that when you playback an episode that it is the next unwatched episode. -A prompt will be shown if trying to playback out of order. - -Note: It's also recommended that you also enable 'Download Episode information for the whole series' -so that a proper check can be performed. - -The check is ignored in the following conditions: -* Playback of Specials (and next unwatched Specials). -* Playback of Watched/Seen episodes. -* Playback using Playlist player. - - - If enabled and episode has been rated, mark the episode as watched. - -This setting is only applicable to episode ratings from theTVDB.com (if enabled). It's recommended -that syncing to trakt.tv via Trakt plugin is enabled if syncing of watched episodes is wanted. - -If Trakt plugin is installed and TVSeries plugin is enabled for sync, it's recommended this option is disabled. - - - Tick this to have the plugin automatically pop-up a rating's windows after you have watched an episodes which hasn't been rated yet. - -Note: if you are using the Trakt plugin, it's recommended you enable rate dialog after watched from there. This setting can be used to send -ratings to both thetvdb.com and trakt or just thetvdb.com. - 39 Index: MP-TVSeries/DB Classes/DBOptions.cs =================================================================== --- MP-TVSeries/DB Classes/DBOptions.cs (revision 2101) +++ MP-TVSeries/DB Classes/DBOptions.cs (working copy) @@ -174,6 +174,7 @@ public const string cFilterUnwatched = "FilterUnwatched"; public const string cCleanOnlineEpisodes = "CleanOnlineEpisodes"; public const string cCleanOnlineEpisodeZero = "CleanOnlineEpisodeZero"; + public const string cOverrideLanguage = "OverrideLanguage"; #endregion private static readonly Object thisLock = new Object(); @@ -549,6 +550,9 @@ if (GetOptions(cCleanOnlineEpisodeZero) == null) SetOptions(cCleanOnlineEpisodeZero, false); + if (GetOptions(cOverrideLanguage) == null) + SetOptions(cOverrideLanguage, false); + #endregion } Index: MP-TVSeries/Online Parsing Classes/OnlineAPI.cs =================================================================== --- MP-TVSeries/Online Parsing Classes/OnlineAPI.cs (revision 2101) +++ MP-TVSeries/Online Parsing Classes/OnlineAPI.cs (working copy) @@ -70,6 +70,28 @@ } #endregion + static private string GetLanguageOverride(String sSeriesID) + { + string sqlCon = string.Empty; + SQLCondition cond = new SQLCondition(); + + sqlCon = "id = " + sSeriesID; + cond.AddCustom(sqlCon); + + // Get the language that the user has selected in the Detail View for the serie + List serieLanguage = DBOnlineSeries.GetSingleField(DBOnlineSeries.cLanguage, cond, new DBOnlineSeries()); + + if (serieLanguage.Count > 0) + { + return serieLanguage[0]; + } + else + { + //If there is no language prefered for the series, the fallback is Language on the Online Data view. + return SelLanguageAsString; + } + } + static public XmlNode GetMirrors(String sServer) { return Generic(sServer + apiURIs.Mirrors, false, Format.Xml); @@ -123,14 +145,40 @@ static private XmlNode UpdateSeries(String sSeriesID, bool first) { - int series = Int32.Parse(sSeriesID); - return getFromCache(series, SelLanguageAsString + ".xml"); + String SelLang = string.Empty; + bool bOverrideLanguage = false; + + bOverrideLanguage = DBOption.GetOptions(DBOption.cOverrideLanguage); + if (bOverrideLanguage) + { + SelLang = GetLanguageOverride(sSeriesID); + int series = Int32.Parse(sSeriesID); + return getFromCache(series, SelLang + ".xml", SelLang); + } + else + { + int series = Int32.Parse(sSeriesID); + return getFromCache(series, SelLanguageAsString + ".xml"); + } } static private XmlNode UpdateSeries(String sSeriesID, String languageID, bool first) { - int series = Int32.Parse(sSeriesID); - return getFromCache(series, languageID + ".xml", languageID); + String SelLang = string.Empty; + bool bOverrideLanguage = false; + + bOverrideLanguage = DBOption.GetOptions(DBOption.cOverrideLanguage); + if (bOverrideLanguage) + { + SelLang = GetLanguageOverride(sSeriesID); + int series = Int32.Parse(sSeriesID); + return getFromCache(series, SelLang + ".xml", SelLang); + } + else + { + int series = Int32.Parse(sSeriesID); + return getFromCache(series, languageID + ".xml", languageID); + } } static public bool SubmitRating(RatingType type, string itemId, int rating) @@ -190,7 +238,19 @@ static XmlNode UpdateEpisodes(int seriesID, bool first) { - return getFromCache(seriesID, SelLanguageAsString + ".xml"); + string SelLang = string.Empty; + bool bOverrideLanguage = false; + + bOverrideLanguage = DBOption.GetOptions(DBOption.cOverrideLanguage); + if (bOverrideLanguage) + { + SelLang = GetLanguageOverride(seriesID.ToString()); + return getFromCache(seriesID, SelLang + ".xml"); + } + else + { + return getFromCache(seriesID, SelLanguageAsString + ".xml"); + } } static public XmlNode getBannerList(int seriesID) @@ -280,7 +340,19 @@ static XmlNode getFromCache(int seriesID, string elemName) { - return getFromCache(seriesID, true, elemName, SelLanguageAsString); + string SelLang = string.Empty; + bool bOverrideLanguage = false; + + bOverrideLanguage = DBOption.GetOptions(DBOption.cOverrideLanguage); + if (bOverrideLanguage) + { + SelLang = GetLanguageOverride(seriesID.ToString()); + return getFromCache(seriesID, true, elemName, SelLang); + } + else + { + return getFromCache(seriesID, true, elemName, SelLanguageAsString); + } } static XmlNode getFromCache(int seriesID, string elemName, string languageID) Index: MP-TVSeries/Translation.cs =================================================================== --- MP-TVSeries/Translation.cs (revision 2101) +++ MP-TVSeries/Translation.cs (working copy) @@ -176,6 +176,8 @@ public static string AdultSeries = "Adult Series"; public static string KidsSeries = "Kids Series"; public static string AvailableMedia = "Available Media"; + public static string OverrideLanguage = "Override Language settings"; + public static string ChangeSeriesLanguage = "Change Series Meta Language"; // Fanart public static string FanArt = "Fanart"; Index: MP-TVSeries/TVSeriesPlugin.cs =================================================================== --- MP-TVSeries/TVSeriesPlugin.cs (revision 2101) +++ MP-TVSeries/TVSeriesPlugin.cs (working copy) @@ -163,6 +163,8 @@ private bool m_bShowLastActiveModule = false; private int m_iLastActiveModule = 0; private bool m_PlaySelectedEpisodeAfterSubtitles = false; + + List onlineLanguages = new List(); #endregion #region Events @@ -284,7 +286,8 @@ trailers, downloadTorrent, downloadNZB, - filterUnwatched + filterUnwatched, + actionChangeSeriesLanguage } enum eContextMenus @@ -978,6 +981,15 @@ } #endregion + #region Change Series Language + if (CurrentViewLevel == Listlevel.Series && DBOption.GetOptions(DBOption.cOverrideLanguage)) + { + pItem = new GUIListItem(Translation.ChangeSeriesLanguage + "..."); + dlg.Add(pItem); + pItem.ItemId = (int)eContextItems.actionChangeSeriesLanguage; + } + #endregion + #region Subtitles - keep at the bottom for fast access (menu + up => there) if (!emptyList && subtitleDownloadEnabled && CurrentViewLevel == Listlevel.Episode) { @@ -1372,6 +1384,18 @@ break; #endregion + #region Change Series Language + case (int)eContextItems.actionChangeSeriesLanguage: + { + if (selectedSeries != null) + { + ShowChangeSeriesMetaLanguageMenu(selectedSeries); + UpdateEpisodes(selectedSeries, null, null); + } + } + break; + #endregion + #region Subtitles case (int)eContextItems.downloadSubtitle: { @@ -1838,8 +1862,50 @@ } } + #region Show Change Series Language Menu + protected void ShowChangeSeriesMetaLanguageMenu(DBSeries selectedSeries) + { + if (DBOption.GetOptions(DBOption.cOverrideLanguage)) + { + int iSelected = -1; + String selectedLang = String.Empty; + String newLang = String.Empty; + String selectedLanguage = selectedSeries[DBOnlineSeries.cLanguage]; + List items = new List(); + + if (onlineLanguages.Count == 0) + { + onlineLanguages.AddRange(new GetLanguages().languages); + } + + foreach (Language lang in onlineLanguages) + { + items.Add(new GUIListItem(Helper.UppercaseFirst(lang.language))); + if (lang.abbreviation == selectedLanguage) + { + selectedLang = lang.language; + + iSelected = items.FindIndex(item => item.Label.Equals(lang.language)); + items[iSelected].Label = lang.language + " (Selected)"; + } + } + + ShowMenuDialog(Translation.ChangeSeriesLanguage, items, iSelected, out newLang); + + if (!newLang.Equals(selectedLang)) + { + Language newSelectedLanguage = onlineLanguages.Find(lang => lang.language.Equals(newLang)); + if (newSelectedLanguage != null) + { + selectedSeries[DBOnlineSeries.cLanguage] = newSelectedLanguage.abbreviation; + selectedSeries.Commit(); + } + } + } + } + #endregion + #region SubCentral Menu - protected void ShowSubtitleMenu(DBEpisode episode) { ShowSubtitleMenu(episode, false); @@ -1856,7 +1922,6 @@ GUIWindowManager.ActivateWindow(84623); } } - #endregion #region My Torrent Menu @@ -1892,7 +1957,6 @@ #endregion #region Trailers Menu - internal static void ShowTrailerMenu() { var mediaItem = new MediaItem @@ -1935,7 +1999,6 @@ Trailers.Trailers.SearchForTrailers(mediaItem); } - #endregion #region Trakt Menu @@ -4043,6 +4106,10 @@ dlg.Add(pItem); pItem.ItemId = (int)eContextItems.optionsDownloadAllEpisodesInfo; + pItem = new GUIListItem(Translation.OverrideLanguage + " (" + (DBOption.GetOptions(DBOption.cOverrideLanguage) ? Translation.on : Translation.off) + ")"); + dlg.Add(pItem); + pItem.ItemId = (int)eContextItems.actionChangeSeriesLanguage; + dlg.DoModal(GUIWindowManager.ActiveWindow); if (dlg.SelectedId >= 0) { @@ -4099,6 +4166,10 @@ case (int)eContextItems.optionsDownloadAllEpisodesInfo: DBOption.SetOptions(DBOption.cFullSeriesRetrieval, !DBOption.GetOptions(DBOption.cFullSeriesRetrieval)); break; + + case (int)eContextItems.actionChangeSeriesLanguage: + DBOption.SetOptions(DBOption.cOverrideLanguage, !DBOption.GetOptions(DBOption.cOverrideLanguage)); + break; } } } @@ -6369,7 +6440,7 @@ } private delegate int ShowMenuDialogDelegate(string heading, List items); - + /// /// Displays a menu dialog from list of items /// @@ -6408,6 +6479,57 @@ } /// + /// Displays a menu dialog from list of items + /// + /// Selected item index, -1 if exited + public static void ShowMenuDialog(string heading, List items, out String selectedMenuItem) + { + ShowMenuDialog(heading, items, -1, out selectedMenuItem); + } + + /// + /// Displays a menu dialog from list of items + /// + /// Selected label text, "" (empty) if exited + public static void ShowMenuDialog(string heading, List items, int selectedItemIndex, out String selectedMenuItem) + { + if (GUIGraphicsContext.form.InvokeRequired) + { + ShowMenuDialogDelegate d = ShowMenuDialog; + selectedMenuItem = (String)GUIGraphicsContext.form.Invoke(d, heading, items); + //return (String)GUIGraphicsContext.form.Invoke(d, heading, items); + } + + GUIDialogMenu dlgMenu = (GUIDialogMenu)GUIWindowManager.GetWindow((int)MediaPortal.GUI.Library.GUIWindow.Window.WINDOW_DIALOG_MENU); + if (dlgMenu == null) + selectedMenuItem = ""; + //if (dlgMenu == null) return ""; + + dlgMenu.Reset(); + + dlgMenu.SetHeading(heading); + + foreach (GUIListItem item in items) + { + dlgMenu.Add(item); + } + + if (selectedItemIndex >= 0) + dlgMenu.SelectedLabel = selectedItemIndex; + + dlgMenu.DoModal(GUIWindowManager.ActiveWindow); + + if (dlgMenu.SelectedLabelText == String.Empty) + { + selectedMenuItem = ""; + //return ""; + } + + selectedMenuItem = dlgMenu.SelectedLabelText; + //return dlgMenu.SelectedLabelText; + } + + /// /// Displays a notification dialog. /// public static void ShowNotifyDialog(string heading, string text)