public IncomingFileTransfer(ToxEventArgs.FileSendRequestEventArgs e, Tox tox, string savepath) { Tox = tox; ViewModel.SavePath = savepath; ViewModel.ID = e.FileNumber; ViewModel.Sender = e.FriendNumber; ViewModel.TotalBytes = e.FileSize; try { FileStream = new FileStream(ViewModel.SavePath, FileMode.Create); } catch { Dispose(); } Tox.FileControl(ViewModel.Sender, ViewModel.ID, ToxFileControl.Resume); Tox.OnFileChunkReceived += Tox_OnFileChunkReceived; Tox.OnFileControlReceived += Tox_OnFileControlReceived; OnComplete += (v) => { Dispose(); }; }
private async void FileSendRequestReceivedHandler(object sender, ToxEventArgs.FileSendRequestEventArgs e) { if (e.FileKind != ToxFileKind.Data || e.FriendNumber != _friendNumber) return; var fileId = ToxModel.Instance.FileGetId(e.FriendNumber, e.FileNumber); var resumeData = await FileTransferResumer.Instance.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(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(e.FriendNumber, e.FileNumber, e.FileName, e.FileSize, TransferDirection.Down, null); } if (FileTransferAdded != null) FileTransferAdded(this, oneFileTransferModel); }
private async void ReadReceiptReceivedHandler(object sender, ToxEventArgs.ReadReceiptEventArgs e) { if (e.FriendNumber != _target.FriendNumber) return; if (Id == e.Receipt) { await _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { State = MessageDeliveryState.Delivered; }); } }
private async void FriendConnectionStatusChangedHandler(object sender, ToxEventArgs.FriendConnectionStatusEventArgs e) { if (_friendNumber != e.FriendNumber) return; if (ToxModel.Instance.IsFriendOnline(e.FriendNumber) && ToxModel.Instance.LastConnectionStatusOfFriend(e.FriendNumber) == ToxConnectionStatus.None) { // The given friend just came online... let's restart all of our previously broken uploads towards him/her! await ResumeBrokenUploadsForFriend(e.FriendNumber); } }
public void HandleFriendRequestAnswer(FriendRequestAnswer answer, ToxEventArgs.FriendRequestEventArgs e) { switch (answer) { case FriendRequestAnswer.Accept: ToxModel.Instance.AddFriendNoRequest(e.PublicKey); return; case FriendRequestAnswer.Decline: return; case FriendRequestAnswer.Later: Items.Add(new OneFriendRequestViewModel(this, e.PublicKey, e.Message)); return; } }
private async void FriendRequestReceivedHandler(object sender, ToxEventArgs.FriendRequestEventArgs e) { // TODO: Turn it into a toast notification. await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => { var message = "From: " + e.PublicKey + "\n" + "Message: " + e.Message; var msgDialog = new MessageDialog(message, "Friend request received"); msgDialog.Commands.Add(new UICommand("Accept", null, FriendRequestsViewModel.FriendRequestAnswer.Accept)); msgDialog.Commands.Add(new UICommand("Decline", null, FriendRequestsViewModel.FriendRequestAnswer.Decline)); msgDialog.Commands.Add(new UICommand("Later", null, FriendRequestsViewModel.FriendRequestAnswer.Later)); var answer = await msgDialog.ShowAsync(); FriendRequests.HandleFriendRequestAnswer((FriendRequestsViewModel.FriendRequestAnswer) answer.Id, e); }); }
private void Tox_OnFileChunkReceived(object sender, ToxEventArgs.FileChunkEventArgs e) { if (e.FileNumber != ViewModel.ID) return; if (FileStream.Position != e.Position) FileStream.Seek(e.Position, SeekOrigin.Begin); FileStream.Write(e.Data, 0, e.Data.Length); FileStream.Flush(); ViewModel.WrittenBytes += e.Data.Length; ViewModel.Progress = ViewModel.WrittenBytes / ViewModel.TotalBytes; if (ViewModel.WrittenBytes == ViewModel.TotalBytes) if (OnComplete != null) OnComplete(ViewModel); }
private void FileChunkReceivedHandler(object sender, ToxEventArgs.FileChunkEventArgs e) { if (FileChunkReceived != null) FileChunkReceived(this, e); }
private void FriendTypingChangedHandler(object sender, ToxEventArgs.TypingStatusEventArgs e) { if (FriendTypingChanged != null) FriendTypingChanged(this, e); }
private void FriendNameChangedHandler(object sender, ToxEventArgs.NameChangeEventArgs e) { if (FriendNameChanged != null) FriendNameChanged(this, e); }
private void FriendMessageReceivedHandler(object sender, ToxEventArgs.FriendMessageEventArgs e) { if (FriendMessageReceived != null) FriendMessageReceived(this, e); }
private async void FriendConnectionStatusChangedHandler(object sender, ToxEventArgs.FriendConnectionStatusEventArgs e) { if (FriendNumber != e.FriendNumber) return; await _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { IsConnected = e.Status != ToxConnectionStatus.None; SetFriendStatus(ToxModel.Instance.GetFriendStatus(e.FriendNumber)); }); }
private async void FriendNameChangedHandler(object sender, ToxEventArgs.NameChangeEventArgs e) { if (FriendNumber != e.FriendNumber) return; await _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { Name = e.Name; }); }
private void FileChunkReceivedHandler(object sender, ToxEventArgs.FileChunkEventArgs e) { if (IsPlaceholder || !IsThisTransfer(e)) return; PutNextChunk(e); if (IsFinished) { FileTransferResumer.Instance.RemoveTransfer(_friendNumber, _fileNumber); State = FileTransferState.Finished; } }
private byte[] GetNextChunk(ToxEventArgs.FileRequestChunkEventArgs e) { lock (_stream) { if (_stream.Position != e.Position) { _stream.Seek(e.Position, SeekOrigin.Begin); } var chunk = new byte[e.Length]; _stream.Read(chunk, 0, e.Length); return chunk; } }
private void Tox_OnFriendStatusChanged(object sender, ToxEventArgs.StatusEventArgs e) { var contact = GetContactViewModelByFriendNumber(e.FriendNumber); contact.Status = Utilities.GetDetoxStatusByFriendNumber(e.FriendNumber, Tox); Utilities.Sort(List); }
private void Tox_OnFriendStatusMessageChanged(object sender, ToxEventArgs.StatusMessageEventArgs e) { GetContactViewModelByFriendNumber(e.FriendNumber).Subtext = e.StatusMessage; }
private void PutNextChunk(ToxEventArgs.FileChunkEventArgs e) { lock (_stream) { if (_stream.Position != e.Position) { _stream.Seek(e.Position, SeekOrigin.Begin); } _stream.Write(e.Data, 0, e.Data.Length); } }
private async void FriendStatusChangedHandler(object sender, ToxEventArgs.StatusEventArgs e) { if (FriendNumber != e.FriendNumber) return; await _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { SetFriendStatus(e.Status); }); }
private async void FriendConnectionStatusChangedHandler(object sender, ToxEventArgs.FriendConnectionStatusEventArgs e) { if (_friendNumber != e.FriendNumber || IsPlaceholder) return; if (!ToxModel.Instance.IsFriendOnline(e.FriendNumber)) { await FileTransferResumer.Instance.UpdateTransfer(_friendNumber, _fileNumber, TransferredBytes); State = FileTransferState.Cancelled; } }
private void FriendConnectionStatusChangedHandler(object sender, ToxEventArgs.FriendConnectionStatusEventArgs e) { if (FriendConnectionStatusChanged != null) FriendConnectionStatusChanged(this, e); _lastConnectionStatusRegistry.RegisterLast(e.FriendNumber, e.Status); }
private void HandleAvatarTransfer(ToxEventArgs.FileSendRequestEventArgs e) { var ID = Tox.GetFriendPublicKey(e.FriendNumber).ToString(); string path = Utilities.GetAvatarPath(e.FriendNumber, Tox); IncomingFileTransfer ft = new IncomingFileTransfer(e, Tox, path); ft.OnComplete += (vm) => { GetContactViewModelByFriendNumber(e.FriendNumber).Image = path; }; }
private void ConnectionStatusChangedHandler(object sender, ToxEventArgs.ConnectionStatusEventArgs e) { RaisePropertyChanged("IsConnected"); if (e.Status == ToxConnectionStatus.None) BootstrapContinously(); }
private void Tox_OnConnectionStatusChanged(object sender, ToxEventArgs.ConnectionStatusEventArgs e) { if (e.Status == ToxConnectionStatus.None) User.Status = Status.Offline; else User.Status = Status.Available; }
private void FriendStatusMessageChangedHandler(object sender, ToxEventArgs.StatusMessageEventArgs e) { if (FriendStatusMessageChanged != null) FriendStatusMessageChanged(this, e); }
private void Tox_OnFileSendRequestReceived(object sender, ToxEventArgs.FileSendRequestEventArgs e) { if (e.FileKind == ToxFileKind.Avatar) { HandleAvatarTransfer(e); } }
private void FileSendRequestReceivedHandler(object sender, ToxEventArgs.FileSendRequestEventArgs e) { if (FileSendRequestReceived != null) FileSendRequestReceived(this, e); }
private void Tox_OnFriendNameChanged(object sender, ToxEventArgs.NameChangeEventArgs e) { GetContactViewModelByFriendNumber(e.FriendNumber).Name = e.Name; }
private void ReadReceiptReceivedHandler(object sender, ToxEventArgs.ReadReceiptEventArgs e) { if (ReadReceiptReceived != null) ReadReceiptReceived(this, e); }
private void Tox_OnFriendRequestReceived(object sender, ToxEventArgs.FriendRequestEventArgs e) { Tox.AddFriendNoRequest(e.PublicKey); }