Fixed extracting when the path in the rar file has the torrent as a subdirectory.
This commit is contained in:
parent
0220b18017
commit
629babd9bd
2 changed files with 33 additions and 13 deletions
|
|
@ -36,24 +36,33 @@ namespace RdtClient.Service.Services
|
||||||
|
|
||||||
private DownloadManager ActiveDownload => TaskRunner.ActiveDownloads[Download.DownloadId];
|
private DownloadManager ActiveDownload => TaskRunner.ActiveDownloads[Download.DownloadId];
|
||||||
|
|
||||||
public async Task Start(String destinationFolderPath, String rootfolderPath)
|
public async Task Start(String destinationFolderPath, String torrentName, DownloadStatus status)
|
||||||
{
|
{
|
||||||
ActiveDownload.NewStatus = DownloadStatus.Downloading;
|
|
||||||
ActiveDownload.BytesDownloaded = 0;
|
ActiveDownload.BytesDownloaded = 0;
|
||||||
ActiveDownload.BytesSize = 0;
|
ActiveDownload.BytesSize = 0;
|
||||||
ActiveDownload.Speed = 0;
|
ActiveDownload.Speed = 0;
|
||||||
|
|
||||||
_bytesLastUpdate = 0;
|
|
||||||
_nextUpdate = DateTime.UtcNow.AddSeconds(1);
|
|
||||||
|
|
||||||
var fileUrl = Download.Link;
|
var fileUrl = Download.Link;
|
||||||
|
|
||||||
var uri = new Uri(fileUrl);
|
var uri = new Uri(fileUrl);
|
||||||
var filePath = Path.Combine(destinationFolderPath, uri.Segments.Last());
|
var torrentPath = Path.Combine(destinationFolderPath, torrentName);
|
||||||
|
var filePath = Path.Combine(torrentPath, uri.Segments.Last());
|
||||||
|
|
||||||
if (!Directory.Exists(destinationFolderPath))
|
if (status == DownloadStatus.Unpacking)
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(destinationFolderPath);
|
await Extract(filePath, destinationFolderPath, torrentName);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ActiveDownload.NewStatus = DownloadStatus.Downloading;
|
||||||
|
|
||||||
|
_bytesLastUpdate = 0;
|
||||||
|
_nextUpdate = DateTime.UtcNow.AddSeconds(1);
|
||||||
|
|
||||||
|
if (!Directory.Exists(torrentPath))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(torrentPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
var webRequest = WebRequest.Create(fileUrl);
|
var webRequest = WebRequest.Create(fileUrl);
|
||||||
|
|
@ -105,6 +114,11 @@ namespace RdtClient.Service.Services
|
||||||
ActiveDownload.Speed = 0;
|
ActiveDownload.Speed = 0;
|
||||||
ActiveDownload.BytesDownloaded = ActiveDownload.BytesSize;
|
ActiveDownload.BytesDownloaded = ActiveDownload.BytesSize;
|
||||||
|
|
||||||
|
await Extract(filePath, destinationFolderPath, torrentName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task Extract(String filePath, String destinationFolderPath, String torrentName)
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (filePath.EndsWith(".rar"))
|
if (filePath.EndsWith(".rar"))
|
||||||
|
|
@ -124,11 +138,20 @@ namespace RdtClient.Service.Services
|
||||||
_rarCurrentEntry = null;
|
_rarCurrentEntry = null;
|
||||||
archive.CompressedBytesRead += ArchiveOnCompressedBytesRead;
|
archive.CompressedBytesRead += ArchiveOnCompressedBytesRead;
|
||||||
|
|
||||||
|
var extractPath = destinationFolderPath;
|
||||||
|
|
||||||
|
if (!entries.Any(m => m.Key.StartsWith(torrentName)))
|
||||||
|
{
|
||||||
|
extractPath = Path.Combine(destinationFolderPath, torrentName);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var entry in entries)
|
foreach (var entry in entries)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
_rarCurrentEntry = entry;
|
_rarCurrentEntry = entry;
|
||||||
|
|
||||||
entry.WriteToDirectory(rootfolderPath,
|
entry.WriteToDirectory(extractPath,
|
||||||
new ExtractionOptions
|
new ExtractionOptions
|
||||||
{
|
{
|
||||||
ExtractFullPath = true,
|
ExtractFullPath = true,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
@ -116,10 +115,8 @@ namespace RdtClient.Service.Services
|
||||||
|
|
||||||
if (ActiveDownloads.TryAdd(download.DownloadId, downloadManager))
|
if (ActiveDownloads.TryAdd(download.DownloadId, downloadManager))
|
||||||
{
|
{
|
||||||
var folderPath = Path.Combine(destinationFolderPath, download.Torrent.RdName);
|
|
||||||
|
|
||||||
downloadManager.Download = download;
|
downloadManager.Download = download;
|
||||||
await downloadManager.Start(folderPath, destinationFolderPath);
|
await downloadManager.Start(destinationFolderPath, download.Torrent.RdName, download.Status);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue