private async void FileSendRequestReceivedHandler(object sender, ToxEventArgs.FileSendRequestEventArgs e) { if (e.FileKind != ToxFileKind.Data || e.FriendNumber != _friendNumber) { return; } var fileId = _toxModel.FileGetId(e.FriendNumber, e.FileNumber); var resumeData = await _fileTransferResumer.GetDownloadData(fileId); OneFileTransferModel oneFileTransferModel; // If we could find the resume data for this download, we resume it instead of handling it as a new transfer. if (resumeData != null) { oneFileTransferModel = await OneBrokenFileTransferModel.CreateInstance(_dataService, e.FriendNumber, e.FileNumber, resumeData.File.Name, e.FileSize, TransferDirection.Down, resumeData.File, resumeData.TransferredBytes); } else { // We add a transfer with a null value instead of an actual stream here. We will replace it with an actual file stream // in OneFileTransferModel.AcceptTransfer() when the user accepts the request and chooses a location to save the file to. oneFileTransferModel = await OneFileTransferModel.CreateInstance(_dataService, e.FriendNumber, e.FileNumber, e.FileName, e.FileSize, TransferDirection.Down, null); } FileTransferAdded?.Invoke(this, oneFileTransferModel); }
private async Task ResumeBrokenUploadsForFriend(int friendNumber) { var resumeDataOfBrokenUploads = await _fileTransferResumer.GetUploadData(friendNumber); foreach (var resumeData in resumeDataOfBrokenUploads) { var fileSizeInBytes = await GetFileSizeInBytes(resumeData.File); bool successfulFileSend; var fileInfo = _toxModel.FileSend(resumeData.FriendNumber, ToxFileKind.Data, fileSizeInBytes, resumeData.File.Name, resumeData.FileId, out successfulFileSend); if (successfulFileSend) { var oneFileTransferModel = await OneBrokenFileTransferModel.CreateInstance(_dataService, resumeData.FriendNumber, fileInfo.Number, resumeData.File.Name, fileSizeInBytes, TransferDirection.Up, resumeData.File, resumeData.TransferredBytes); FileTransferAdded?.Invoke(this, oneFileTransferModel); } } }