mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
178 lines
7.0 KiB
C#
178 lines
7.0 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: ZuneUI.ProgressCommand
|
|
// 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.Iris;
|
|
using Microsoft.Zune.Util;
|
|
using System;
|
|
using ZuneXml;
|
|
|
|
namespace ZuneUI
|
|
{
|
|
public class ProgressCommand : Command
|
|
{
|
|
private const int PlaybackBufferSecs = 200;
|
|
private const int PlaybackThresholdSecs = 10;
|
|
private bool m_allowPlayback = true;
|
|
private float m_progress;
|
|
private float m_progressivePlaybackPoint;
|
|
private int m_secondsToDownload = -1;
|
|
private int m_secondsToProgressivePlayback = -1;
|
|
private int m_secondsToPlaybackThreshold = 5;
|
|
private DownloadTask m_downloadTask;
|
|
|
|
public ProgressCommand()
|
|
{
|
|
}
|
|
|
|
public ProgressCommand(IModelItem owner)
|
|
: base(owner)
|
|
{
|
|
}
|
|
|
|
public ProgressCommand(DownloadTask downloadTask) => this.m_downloadTask = downloadTask;
|
|
|
|
public bool AllowProgressivePlayback
|
|
{
|
|
get => this.m_allowPlayback;
|
|
set
|
|
{
|
|
if (this.m_allowPlayback == value)
|
|
return;
|
|
this.m_allowPlayback = value;
|
|
this.FirePropertyChanged(nameof(AllowProgressivePlayback));
|
|
}
|
|
}
|
|
|
|
public float Progress
|
|
{
|
|
get => this.m_progress;
|
|
set
|
|
{
|
|
if (m_progress == (double)value)
|
|
return;
|
|
this.m_progress = value;
|
|
this.FirePropertyChanged(nameof(Progress));
|
|
}
|
|
}
|
|
|
|
public float ProgressivePlaybackPoint
|
|
{
|
|
get => this.m_progressivePlaybackPoint;
|
|
private set
|
|
{
|
|
if (m_progressivePlaybackPoint == (double)value)
|
|
return;
|
|
this.m_progressivePlaybackPoint = value;
|
|
this.FirePropertyChanged(nameof(ProgressivePlaybackPoint));
|
|
}
|
|
}
|
|
|
|
public int SecondsToProgressivePlayback
|
|
{
|
|
get => this.m_secondsToProgressivePlayback;
|
|
private set
|
|
{
|
|
if (this.m_secondsToProgressivePlayback == value)
|
|
return;
|
|
this.m_secondsToProgressivePlayback = value;
|
|
this.FirePropertyChanged(nameof(SecondsToProgressivePlayback));
|
|
}
|
|
}
|
|
|
|
public int SecondsToDownload
|
|
{
|
|
get => this.m_secondsToDownload;
|
|
private set
|
|
{
|
|
if (this.m_secondsToDownload == value)
|
|
return;
|
|
this.m_secondsToDownload = value;
|
|
this.FirePropertyChanged(nameof(SecondsToDownload));
|
|
}
|
|
}
|
|
|
|
public string TimeToProgressivePlayback => TimeFormattingHelper.FormatSeconds(this.SecondsToProgressivePlayback);
|
|
|
|
public string TimeToDownload => TimeFormattingHelper.FormatSeconds(this.SecondsToDownload);
|
|
|
|
protected void UpdateProgress(Guid taskId, float percent)
|
|
{
|
|
if (this.m_downloadTask == null)
|
|
this.m_downloadTask = DownloadManager.Instance.GetTask(taskId.ToString());
|
|
else if (taskId == Guid.Empty && percent < 0.0)
|
|
this.m_downloadTask = null;
|
|
float num1 = 0.0f;
|
|
int num2 = -1;
|
|
int num3 = -1;
|
|
if (this.m_downloadTask != null)
|
|
{
|
|
num2 = this.m_downloadTask.GetDownloadSecondsRemaining();
|
|
int propertyInt = this.m_downloadTask.GetPropertyInt("PlaybackDuration");
|
|
if (propertyInt > 0)
|
|
{
|
|
int secondsRemaining = this.m_downloadTask.GetDownloadFileSecondsRemaining(0);
|
|
if (secondsRemaining >= 0)
|
|
{
|
|
int num4 = secondsRemaining - propertyInt;
|
|
long bytesDownloaded = (long)this.m_downloadTask.GetBytesDownloaded();
|
|
long fileSizeForPlayback = (long)this.CalculateMinimumFileSizeForPlayback(this.m_downloadTask.GetFinalFileSize(0), propertyInt);
|
|
int num5 = this.m_downloadTask.GetDownloadBytesPerSecond();
|
|
if (num5 <= 0)
|
|
num5 = 1;
|
|
if (this.AllowProgressivePlayback)
|
|
{
|
|
int num6 = (int)((fileSizeForPlayback - bytesDownloaded) / num5);
|
|
num3 = (num4 > num6 ? num4 : num6) + this.m_secondsToPlaybackThreshold;
|
|
if (num3 > 0)
|
|
{
|
|
num1 = percent + (100f - percent) * num3 / num2;
|
|
this.m_secondsToPlaybackThreshold = 10;
|
|
}
|
|
else
|
|
{
|
|
num3 = 0;
|
|
this.m_secondsToPlaybackThreshold = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
this.Progress = percent / 100f;
|
|
this.ProgressivePlaybackPoint = num1 / 100f;
|
|
this.SecondsToProgressivePlayback = num3;
|
|
this.SecondsToDownload = num2;
|
|
}
|
|
|
|
public void InvokeProgressivePlayback()
|
|
{
|
|
if (this.m_downloadTask == null || this.SecondsToProgressivePlayback != 0)
|
|
return;
|
|
string tempFileName = this.m_downloadTask.GetTempFileName(0);
|
|
if (string.IsNullOrEmpty(tempFileName))
|
|
return;
|
|
int propertyInt = this.m_downloadTask.GetPropertyInt("PlaybackDuration");
|
|
if (propertyInt == 0)
|
|
return;
|
|
ulong finalFileSize = this.m_downloadTask.GetFinalFileSize(0);
|
|
ulong bytesDownloaded = this.m_downloadTask.GetBytesDownloaded();
|
|
if (finalFileSize <= 0UL || bytesDownloaded <= this.CalculateMinimumFileSizeForPlayback(finalFileSize, propertyInt))
|
|
return;
|
|
string uri = string.Format("zuneprogdl://{0}?duration={1}&size={2}", tempFileName, propertyInt, finalFileSize);
|
|
string property1 = this.m_downloadTask.GetProperty("Title");
|
|
string property2 = this.m_downloadTask.GetProperty("Artist");
|
|
SingletonModelItem<TransportControls>.Instance.PlayItem(new VideoPlaybackTrack(new Guid(this.m_downloadTask.GetProperty("ServiceId")), property1, property2, uri, true, false, false, false, false, VideoDefinitionEnum.None), PlayNavigationOptions.NavigateToNowPlaying);
|
|
}
|
|
|
|
private ulong CalculateMinimumFileSizeForPlayback(ulong finalSize, int finalDuration)
|
|
{
|
|
ulong num = 0;
|
|
if (this.m_downloadTask != null)
|
|
num = finalSize / (ulong)finalDuration * 200UL;
|
|
return num;
|
|
}
|
|
}
|
|
}
|