X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2FLibCecTray%2Fcontroller%2Fapplications%2Finternal%2FXBMCController.cs;h=6b961008986ed01cd26ae12f724eda227c62be1a;hb=0184b7519cb2a2f0bb227c7866efd9c25f2587d0;hp=b2dfc20455973408970b258a79a136a0218c9663;hpb=9c72728bd85e738350d8bd28fc9fd5cc26b80e1e;p=deb_libcec.git diff --git a/src/LibCecTray/controller/applications/internal/XBMCController.cs b/src/LibCecTray/controller/applications/internal/XBMCController.cs index b2dfc20..6b96100 100644 --- a/src/LibCecTray/controller/applications/internal/XBMCController.cs +++ b/src/LibCecTray/controller/applications/internal/XBMCController.cs @@ -1,7 +1,7 @@ /* * This file is part of the libCEC(R) library. * - * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved. + * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. * libCEC(R) is an original work, containing original code. * * libCEC(R) is a trademark of Pulse-Eight Limited. @@ -44,8 +44,8 @@ namespace LibCECTray.controller.applications.@internal { internal class XBMCController : ApplicationController { - public XBMCController(CECSettings settings) : - base(settings, + public XBMCController(CECController controller) : + base(controller, Resources.application_xbmc, "XBMC", "XBMC.exe", @@ -56,6 +56,17 @@ namespace LibCECTray.controller.applications.@internal ControlApplication.Value = false; LoadXMLConfiguration(); + + ApplicationRunningChanged += RunningChanged; + } + + static void RunningChanged(bool running) + { + if (running) + { + // XBMC is running, close the application, or we'll block communication + Application.Exit(); + } } public override ApplicationAction DefaultValue(CecKeypress key) @@ -82,8 +93,13 @@ namespace LibCECTray.controller.applications.@internal if (File.Exists(filename)) { XmlTextReader reader = new XmlTextReader(filename); - while (reader.Read()) + while (true) { + try + { + if (!reader.Read()) + break; + } catch (XmlException) {} gotConfig = true; switch (reader.NodeType) { @@ -112,9 +128,9 @@ namespace LibCECTray.controller.applications.@internal break; case "connected_device": { - ushort iDevice; - if (ushort.TryParse(value, out iDevice)) - Settings.ConnectedDevice.Value = (CecLogicalAddress)iDevice; + int iDevice; + if (int.TryParse(value, out iDevice)) + Settings.ConnectedDevice.Value = iDevice == 36038 ? CecLogicalAddress.AudioSystem : CecLogicalAddress.Tv; } break; case "cec_power_on_startup": @@ -159,7 +175,29 @@ namespace LibCECTray.controller.applications.@internal Settings.TVVendor.Value = (CecVendorId)iVendor; } break; - case "wake_devices": + case "wake_device": + { + int iWakeDevices; + if (int.TryParse(value, out iWakeDevices)) + { + Settings.WakeDevices.Value.Clear(); + switch (iWakeDevices) + { + case 36037: + Settings.WakeDevices.Value.Set(CecLogicalAddress.Tv); + break; + case 36038: + Settings.WakeDevices.Value.Set(CecLogicalAddress.AudioSystem); + break; + case 36039: + Settings.WakeDevices.Value.Set(CecLogicalAddress.Tv); + Settings.WakeDevices.Value.Set(CecLogicalAddress.AudioSystem); + break; + } + } + } + break; + case "wake_devices_advanced": { Settings.WakeDevices.Value.Clear(); string[] split = value.Split(new[] { ' ' }); @@ -172,6 +210,28 @@ namespace LibCECTray.controller.applications.@internal } break; case "standby_devices": + { + int iStandbyDevices; + if (int.TryParse(value, out iStandbyDevices)) + { + Settings.PowerOffDevices.Value.Clear(); + switch (iStandbyDevices) + { + case 36037: + Settings.PowerOffDevices.Value.Set(CecLogicalAddress.Tv); + break; + case 36038: + Settings.PowerOffDevices.Value.Set(CecLogicalAddress.AudioSystem); + break; + case 36039: + Settings.PowerOffDevices.Value.Set(CecLogicalAddress.Tv); + Settings.PowerOffDevices.Value.Set(CecLogicalAddress.AudioSystem); + break; + } + } + } + break; + case "standby_devices_advanced": { Settings.PowerOffDevices.Value.Clear(); string[] split = value.Split(new[] { ' ' }); @@ -192,6 +252,10 @@ namespace LibCECTray.controller.applications.@internal case "send_inactive_source": SendInactiveSource.Value = value.Equals("1") || value.ToLower().Equals("true") || value.ToLower().Equals("yes"); break; + // 1.9.0+ settings + case "pause_playback_on_deactivate": + PausePlaybackOnDeactivate.Value = value.Equals("1") || value.ToLower().Equals("true") || value.ToLower().Equals("yes"); + break; } } break; @@ -201,6 +265,14 @@ namespace LibCECTray.controller.applications.@internal return gotConfig; } + static bool HasAdvancedDeviceIdSet(CecLogicalAddresses addresses) + { + foreach (var val in addresses.Addresses) + if (val != CecLogicalAddress.Tv && val != CecLogicalAddress.AudioSystem) + return true; + return false; + } + public void SaveXMLConfiguration() { Settings.Persist(); @@ -247,7 +319,7 @@ namespace LibCECTray.controller.applications.@internal StringBuilder output = new StringBuilder(); output.AppendLine(""); output.AppendLine(""); - output.AppendLine(""); + output.AppendLine(""); output.AppendLine(""); output.AppendLine(""); output.AppendLine(""); @@ -263,26 +335,55 @@ namespace LibCECTray.controller.applications.@internal output.AppendLine(""); output.AppendLine(""); - output.Append(""); + if (HasAdvancedDeviceIdSet(Settings.WakeDevices.Value)) + { + output.Append(""); + } + + if (Settings.WakeDevices.Value.IsSet(CecLogicalAddress.Tv) && + Settings.WakeDevices.Value.IsSet(CecLogicalAddress.AudioSystem)) + output.Append(""); + else if (Settings.WakeDevices.Value.IsSet(CecLogicalAddress.Tv)) + output.Append(""); + else if (Settings.WakeDevices.Value.IsSet(CecLogicalAddress.AudioSystem)) + output.Append(""); + else + output.Append(""); - output.Append(""); + if (HasAdvancedDeviceIdSet(Settings.PowerOffDevices.Value)) + { + output.Append(""); + } + + if (Settings.PowerOffDevices.Value.IsSet(CecLogicalAddress.Tv) && + Settings.PowerOffDevices.Value.IsSet(CecLogicalAddress.AudioSystem)) + output.Append(""); + else if (Settings.PowerOffDevices.Value.IsSet(CecLogicalAddress.Tv)) + output.Append(""); + else if (Settings.PowerOffDevices.Value.IsSet(CecLogicalAddress.AudioSystem)) + output.Append(""); + else + output.Append(""); // only supported by 1.5.1+ clients output.AppendLine(""); output.AppendLine(""); + // only supported by 1.9.0+ clients + output.AppendLine(""); + output.AppendLine(""); writer.Write(output.ToString()); writer.Close(); @@ -361,5 +462,19 @@ namespace LibCECTray.controller.applications.@internal return Settings[ProcessName + "_send_inactive_source"].AsSettingBool; } } + + public CECSettingBool PausePlaybackOnDeactivate + { + get + { + if (!Settings.ContainsKey(ProcessName + "_pause_playback_on_deactivate")) + { + CECSettingBool setting = new CECSettingBool(ProcessName + "_pause_playback_on_deactivate", Resources.app_pause_playback_on_deactivate, true, null); + Settings.Load(setting); + Settings[ProcessName + "_pause_playback_on_deactivate"] = setting; + } + return Settings[ProcessName + "_pause_playback_on_deactivate"].AsSettingBool; + } + } } }