Files
ZuneShell.dll/ZuneShell/ZuneUI/CDAlbumCommand.cs
T

237 lines
7.5 KiB
C#

// Decompiled with JetBrains decompiler
// Type: ZuneUI.CDAlbumCommand
// Assembly: ZuneShell, Version=4.7.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
// MVID: FC8028F3-A47B-4FB4-B35B-11D1752D8264
// Assembly location: C:\Program Files\Zune\ZuneShell.dll
using Microsoft.Zune.Configuration;
using Microsoft.Zune.Util;
using MicrosoftZuneLibrary;
namespace ZuneUI
{
public class CDAlbumCommand : Node
{
private CDAction _autoPlayAction;
private int _libraryID = -1;
private bool _insertedDuringSession;
private string _TOC;
private bool _isRipping;
private int _ripCount;
private CDAlbumTrack[] _trackList;
private int _trackCount;
private CDAccess _cdAccess;
private ZuneLibraryCDDevice _device;
private BurnableCD _burnCD;
public CDAlbumCommand(Experience owner, StringId id)
: base(owner, id, null, SQMDataId.DiscTitleClicks)
{
}
public CDAlbumCommand(
Experience owner,
CDAccess cdAccess,
ZuneLibraryCDDevice device,
bool insertedDuringSession)
: base(owner, null, SQMDataId.DiscTitleClicks)
{
this._cdAccess = cdAccess;
this._device = device;
this._insertedDuringSession = insertedDuringSession;
this._TOC = device.TOC;
}
protected override void OnDispose(bool fDisposing)
{
base.OnDispose(fDisposing);
if (!fDisposing)
return;
if (this._burnCD != null)
{
this._burnCD.Dispose();
this._burnCD = null;
}
if (this._device == null)
return;
this._device.Dispose();
this._device = null;
}
public int RipCount
{
get => this._ripCount;
private set
{
if (this._ripCount == value)
return;
this._ripCount = value;
if (this._ripCount == 0)
this.IsRipping = false;
this.FirePropertyChanged(nameof(RipCount));
}
}
public CDAction AutoPlayAction
{
get => this._autoPlayAction;
internal set
{
if (this._autoPlayAction == value)
return;
this._autoPlayAction = value;
this.FirePropertyChanged(nameof(AutoPlayAction));
}
}
public void ClearAutoPlayAction() => this._autoPlayAction = CDAction.None;
public int TrackCount
{
get => this._trackCount;
set
{
if (this._trackCount == value)
return;
this._trackCount = value;
if (value == 0)
{
this._trackList = null;
this.RipCount = 0;
}
else
{
this._trackList = new CDAlbumTrack[value];
for (int index = 0; index < value; ++index)
this._trackList[index] = new CDAlbumTrack(this, (uint)index);
}
this.FirePropertyChanged(nameof(TrackCount));
}
}
public bool InsertedDuringSession => this._insertedDuringSession;
public bool IsRipping
{
get => this._isRipping;
set
{
if (this._isRipping == value)
return;
this._isRipping = value;
this.FirePropertyChanged(nameof(IsRipping));
}
}
public CDAlbumTrack[] TrackList => this._trackList;
public ZuneLibraryCDDevice CDDevice => this._device;
public string TOC => this._TOC;
public bool IsMediaLoaded => this._device != null && this._device.IsMediaLoaded;
public bool CanErase => this._device != null && this._device.IsCDRW;
public bool CanWrite => this._device != null && this._device.IsBlank;
public BurnableCD BurnCD
{
get
{
if (this._burnCD == null && this._device != null)
this._burnCD = new BurnableCD(this._cdAccess, this._device);
return this._burnCD;
}
}
public int LibraryID
{
get => this._libraryID;
set
{
if (this._libraryID == value || value == -1)
return;
this._libraryID = value;
this.TrackCount = 0;
this.FirePropertyChanged(nameof(LibraryID));
}
}
public CDAlbumTrack GetTrack(int trackIndex) => this._trackList == null ? null : this._trackList[trackIndex];
public void ToggleRipAll()
{
int trackCount = this.TrackCount;
bool flag = this.RipCount < trackCount;
for (int index = 0; index < trackCount; ++index)
{
CDAlbumTrack track = this.TrackList[index];
if (track.RipState != RipState.InProgress)
track.RipTrack = flag;
}
}
internal void AddTrackToRip(CDAlbumTrack track)
{
++this.RipCount;
if (!this.IsRipping)
return;
if (this._cdAccess.Recorder.AsyncAddRecordingRequest(this.CDDevice, track.TrackIndex) == 0)
track.RipState = RipState.Pending;
this._cdAccess.StartRip(1);
}
internal void RemoveTrackToRip(CDAlbumTrack track)
{
--this.RipCount;
if (!this.IsRipping || track.RipState != RipState.Pending)
return;
if (this._cdAccess.Recorder.AsyncRemoveRecordingRequest(this.CDDevice, track.TrackIndex) == 0)
track.RipState = RipState.NotInLibrary;
this._cdAccess.StopRip(1);
}
public void StartRip()
{
if (this.IsRipping || this.RipCount <= 0)
return;
ZuneLibraryCDDevice cdDevice = this.CDDevice;
if (this._cdAccess.Recorder == null || cdDevice == null)
return;
int trackCount = 0;
foreach (CDAlbumTrack track in this.TrackList)
{
if (track.RipTrack)
{
++trackCount;
if (this._cdAccess.Recorder.AsyncAddRecordingRequest(cdDevice, track.TrackIndex) == 0)
track.RipState = RipState.Pending;
}
}
this._cdAccess.StartRip(trackCount);
this.IsRipping = true;
SQMLog.LogToStream(SQMDataId.RipRecordMode, (uint)ClientConfiguration.Recorder.RecordMode);
}
public void StopRip()
{
int trackCount = 0;
for (int index = this.TrackList.Length - 1; index >= 0; --index)
{
CDAlbumTrack track = this.TrackList[index];
if (track.RipTrack)
{
++trackCount;
if (this._cdAccess.Recorder.AsyncRemoveRecordingRequest(this.CDDevice, track.TrackIndex) == 0)
track.RipState = RipState.Incomplete;
}
}
this._cdAccess.StopRip(trackCount);
this.IsRipping = false;
}
protected override void Execute(Shell shell) => shell.NavigateToPage(new CDLand(this));
}
}