mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
237 lines
7.5 KiB
C#
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));
|
|
}
|
|
}
|