private void MoveData(object o)
{
var atmoFolder =
new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Atmo"));
if (!atmoFolder.Exists)
atmoFolder.Create();
var atmoImportsFolder =
new DirectoryInfo(Path.Combine(atmoFolder.FullName, "Imports"));
if (!atmoImportsFolder.Exists)
atmoImportsFolder.Create();
Action<int> reportProgress = null;
if(o is BackgroundWorker)
reportProgress = (o as BackgroundWorker).ReportProgress;
else
reportProgress = x => {};
while(true) {
ImportDataSet currentSet;
lock (_queueLock) {
if(_moveSetQueue.Count == 0) {
_moveSetQueue = null;
break;
}
currentSet = _moveSetQueue.Dequeue();
}
foreach (var file in currentSet.Files) {
var importTarget = new FileInfo(
Path.Combine(
Path.Combine(atmoImportsFolder.FullName, file.Nid.ToString()),
file.Path.Name
)
);
if (file.Path != importTarget && file.Path.Exists) {
if (!importTarget.Directory.Exists)
importTarget.Directory.Create();
try {
file.Path.CopyTo(importTarget.FullName, true);
currentSet.MovedToLocation[file] = importTarget;
if (_deleteSource) {
file.Path.Delete();
}
}
catch {
;
}
}
}
lock(_queueLock) {
MoveProgress = (MaxQueue - _moveSetQueue.Count) / (double)MaxQueue;
reportProgress((int)(Progress * 100));
_importSetQueue.Enqueue(currentSet);
}
}
lock(_queueLock) {
MoveProgress = 1.0;
reportProgress((int)(Progress * 100));
}
}