public override void Dispose() { if (disposed) { return; } disposed = true; base.Dispose(); if (mtp_device != null) { lock (mtp_device) { mtp_device.Dispose(); } } ServiceManager.SourceManager.RemoveSource(this); mtp_device = null; mtp_source = null; }
public override void DeviceInitialize(IDevice device) { base.DeviceInitialize(device); if (MediaCapabilities == null || !MediaCapabilities.IsType("mtp")) { throw new InvalidDeviceException(); } // libmtp only allows us to have one MTP device active if (mtp_source != null) { Log.Information( Catalog.GetString("MTP Support Ignoring Device"), Catalog.GetString("Banshee's MTP audio player support can only handle one device at a time."), true ); throw new InvalidDeviceException(); } List <MtpDevice> devices = null; try { devices = MtpDevice.Detect(); } catch (TypeInitializationException e) { Log.Exception(e); Log.Error( Catalog.GetString("Error Initializing MTP Device Support"), Catalog.GetString("There was an error intializing MTP device support. See http://www.banshee-project.org/Guide/DAPs/MTP for more information."), true ); throw new InvalidDeviceException(); } catch (Exception e) { Log.Exception(e); //ShowGeneralExceptionDialog (e); throw new InvalidDeviceException(); } if (devices == null || devices.Count == 0) { Log.Error( Catalog.GetString("Error Finding MTP Device Support"), Catalog.GetString("An MTP device was detected, but Banshee was unable to load support for it."), true ); } else { string mtp_serial = devices[0].SerialNumber; if (!String.IsNullOrEmpty(mtp_serial)) { if (mtp_serial.Contains(device.Serial)) { mtp_device = devices[0]; mtp_source = this; } else if (device.Serial.Contains(mtp_serial.TrimStart('0'))) { // Special case for sony walkman players; BGO #543938 mtp_device = devices[0]; mtp_source = this; } } if (mtp_device == null) { Log.Information( Catalog.GetString("MTP Support Ignoring Device"), Catalog.GetString("Banshee's MTP audio player support can only handle one device at a time."), true ); } } if (mtp_device == null) { throw new InvalidDeviceException(); } Name = mtp_device.Name; Initialize(); List <string> mimetypes = new List <string> (); foreach (FileType format in mtp_device.GetFileTypes()) { if (format == FileType.JPEG) { supports_jpegs = true; } else { string mimetype = MtpDevice.GetMimeTypeFor(format); if (mimetype != null) { mimetypes.Add(mimetype); } } } AcceptableMimeTypes = mimetypes.ToArray(); AddDapProperty(Catalog.GetString("Serial number"), mtp_device.SerialNumber); AddDapProperty(Catalog.GetString("Version"), mtp_device.Version); try { AddDapProperty(Catalog.GetString("Battery level"), String.Format("{0:0%}", mtp_device.BatteryLevel / 100.0)); } catch (Exception e) { Log.Exception("Unable to get battery level from MTP device", e); } }