private void FindTorrentFileLinks()
{
foreach (TorrentFile torrentFile in this._torrent.Files)
{
var fileLink = new TorrentFileLink(torrentFile);
foreach (FileSystemFileInfo fsFileInfo in this._fsfiFileInfos)
{
if (fsFileInfo.Length == torrentFile.Length)
{
fileLink.FsFileInfos.Add(fsFileInfo);
}
}
if (fileLink.FsFileInfos.Count > 1)
{
var torrentFilePathParts = torrentFile.Path.Split('\\').ToList();
torrentFilePathParts.Insert(0, this._torrent.Name);
for (int i = 0; i < torrentFilePathParts.Count; i++)
{
var links = new List<FileSystemFileInfo>();
foreach (var fileInfo in fileLink.FsFileInfos)
{
var filePathPaths = fileInfo.FilePath.Split('\\');
if (filePathPaths.Length > i + 1 &&
filePathPaths[filePathPaths.Length - i - 1].ToUpperInvariant() ==
torrentFilePathParts[torrentFilePathParts.Count - i - 1].ToUpperInvariant())
{
links.Add(fileInfo);
}
}
if (links.Count == 0)
{
break;
}
if (links.Count >= 1)
{
fileLink.FsFileInfos = links;
if (links.Count == 1)
{
break;
}
}
}
}
if (fileLink.FsFileInfos.Count == 1)
{
fileLink.State = LinkState.Located;
fileLink.LinkedFsFileIndex = 0;
}
else if (fileLink.FsFileInfos.Count > 1)
{
fileLink.State = LinkState.NeedConfirm;
}
else
{
fileLink.State = LinkState.Fail;
}
this._torrentFileLinks.Add(fileLink);
}
}