Example #1
0
        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);
     });
 }
Example #7
0
        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);
        }
Example #8
0
 private void FileChunkReceivedHandler(object sender, ToxEventArgs.FileChunkEventArgs e)
 {
     if (FileChunkReceived != null)
         FileChunkReceived(this, e);
 }
Example #9
0
 private void FriendTypingChangedHandler(object sender, ToxEventArgs.TypingStatusEventArgs e)
 {
     if (FriendTypingChanged != null)
         FriendTypingChanged(this, e);
 }
Example #10
0
 private void FriendNameChangedHandler(object sender, ToxEventArgs.NameChangeEventArgs e)
 {
     if (FriendNameChanged != null)
         FriendNameChanged(this, e);
 }
Example #11
0
 private void FriendMessageReceivedHandler(object sender, ToxEventArgs.FriendMessageEventArgs e)
 {
     if (FriendMessageReceived != null)
         FriendMessageReceived(this, e);
 }
Example #12
0
        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));
                });
        }
Example #13
0
        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;
            }
        }
Example #16
0
        private void Tox_OnFriendStatusChanged(object sender, ToxEventArgs.StatusEventArgs e)
        {
            var contact = GetContactViewModelByFriendNumber(e.FriendNumber);

            contact.Status = Utilities.GetDetoxStatusByFriendNumber(e.FriendNumber, Tox);

            Utilities.Sort(List);
        }
Example #17
0
 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);
            }
        }
Example #19
0
        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;
            }
        }
Example #21
0
        private void FriendConnectionStatusChangedHandler(object sender, ToxEventArgs.FriendConnectionStatusEventArgs e)
        {
            if (FriendConnectionStatusChanged != null)
                FriendConnectionStatusChanged(this, e);

            _lastConnectionStatusRegistry.RegisterLast(e.FriendNumber, e.Status);
        }
Example #22
0
        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;
            };
        }
Example #23
0
        private void ConnectionStatusChangedHandler(object sender, ToxEventArgs.ConnectionStatusEventArgs e)
        {
            RaisePropertyChanged("IsConnected");

            if (e.Status == ToxConnectionStatus.None)
                BootstrapContinously();
        }
Example #24
0
 private void Tox_OnConnectionStatusChanged(object sender, ToxEventArgs.ConnectionStatusEventArgs e)
 {
     if (e.Status == ToxConnectionStatus.None)
         User.Status = Status.Offline;
     else
         User.Status = Status.Available;
 }
Example #25
0
 private void FriendStatusMessageChangedHandler(object sender, ToxEventArgs.StatusMessageEventArgs e)
 {
     if (FriendStatusMessageChanged != null)
         FriendStatusMessageChanged(this, e);
 }
Example #26
0
 private void Tox_OnFileSendRequestReceived(object sender, ToxEventArgs.FileSendRequestEventArgs e)
 {
     if (e.FileKind == ToxFileKind.Avatar)
     {
         HandleAvatarTransfer(e);
     }
 }
Example #27
0
 private void FileSendRequestReceivedHandler(object sender, ToxEventArgs.FileSendRequestEventArgs e)
 {
     if (FileSendRequestReceived != null)
         FileSendRequestReceived(this, e);
 }
Example #28
0
 private void Tox_OnFriendNameChanged(object sender, ToxEventArgs.NameChangeEventArgs e)
 {
     GetContactViewModelByFriendNumber(e.FriendNumber).Name = e.Name;
 }
Example #29
0
 private void ReadReceiptReceivedHandler(object sender, ToxEventArgs.ReadReceiptEventArgs e)
 {
     if (ReadReceiptReceived != null)
         ReadReceiptReceived(this, e);
 }
Example #30
0
 private void Tox_OnFriendRequestReceived(object sender, ToxEventArgs.FriendRequestEventArgs e)
 {
     Tox.AddFriendNoRequest(e.PublicKey);
 }