Files
ZuneShell.dll/ZuneShell/ZuneUI/AddTransientMediaTask.cs

88 lines
2.9 KiB
C#

// Decompiled with JetBrains decompiler
// Type: ZuneUI.AddTransientMediaTask
// 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.Shell;
using System;
using System.Threading;
namespace ZuneUI
{
internal class AddTransientMediaTask
{
private string _filePath;
private MediaType _mediaType;
private int _dbMediaId;
private bool _fFileAlreadyExists;
private bool _fAddSuccessful;
private ManualResetEvent _event;
private AddTransientMediaTask(string filePath, MediaType mediaType)
{
this._filePath = filePath;
this._mediaType = mediaType;
}
private void TaskFunction(object obj)
{
this._dbMediaId = -1;
this._fFileAlreadyExists = false;
this._fAddSuccessful = false;
if (!string.IsNullOrEmpty(this._filePath))
this._fAddSuccessful = ZuneApplication.AddTransientMedia(this._filePath, this._mediaType, out this._dbMediaId, out this._fFileAlreadyExists);
if (this._event == null)
return;
this._event.Set();
}
private bool RunSyncTask(
TimeSpan timeout,
out int dbMediaId,
out bool fFileAlreadyExists,
out bool fTimedout)
{
dbMediaId = -1;
fFileAlreadyExists = false;
fTimedout = false;
bool flag = false;
if (!string.IsNullOrEmpty(this._filePath))
{
if (timeout.TotalSeconds > 0.0)
{
this._event = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(this.TaskFunction));
if (this._event.WaitOne(timeout, false))
{
dbMediaId = this._dbMediaId;
fFileAlreadyExists = this._fFileAlreadyExists;
flag = this._fAddSuccessful;
}
else
fTimedout = true;
}
else
{
this.TaskFunction(null);
dbMediaId = this._dbMediaId;
fFileAlreadyExists = this._fFileAlreadyExists;
flag = this._fAddSuccessful;
}
}
return flag;
}
public static bool AddTransientMediaWithTimeout(
string filePath,
MediaType mediaType,
TimeSpan timeout,
out int dbMediaId,
out bool fFileAlreadyExists,
out bool fTimedout)
{
return new AddTransientMediaTask(filePath, mediaType).RunSyncTask(timeout, out dbMediaId, out fFileAlreadyExists, out fTimedout);
}
}
}