コード例 #1
0
        /// <summary>
        /// 转离线发送
        /// </summary>
        private void OfflineSend()
        {
            if (ChatViewModel != null)
            {
                _targetModel.CanOperate      = false;
                this.tbConnecting.Visibility = Visibility.Visible;

                if (!string.IsNullOrEmpty(_targetModel.MsgKey))
                {
                    SDKClient.SDKProperty.chatType messageType = ChatViewModel.IsGroup ? SDKClient.SDKProperty.chatType.groupChat : SDKClient.SDKProperty.chatType.chat;
                    SDKClient.SDKClient.Instance.SendRetractMessage(_targetModel.MsgKey,
                                                                    ChatViewModel.ID.ToString(), messageType, ChatViewModel.IsGroup ? ChatViewModel.ID : 0, SDKClient.SDKProperty.RetractType.OnlineToOffline);

                    string size    = Helper.FileHelper.FileSizeToString(_targetModel.ResourceModel.Length);
                    string content = $"您取消了\"{_targetModel.ResourceModel.FileName}\"({size})的发送,文件传输失败。";

                    MessageModel cancel = new MessageModel()
                    {
                        MsgKey       = _targetModel.MsgKey,
                        Content      = content,
                        MsgType      = MessageType.notification,
                        MessageState = MessageStates.Fail,
                    };
                    ChatViewModel.Chat.Messages.Insert(ChatViewModel.Chat.Messages.Count - 1, cancel);

                    AcioningItems.Remove(this);
                    if (_operateTask != null)
                    {
                        _operateTask.Cancel();
                        _operateTask = null;
                    }
                }

                if (FileExists())
                {
                    AcioningItems.Add(this);
                    _operateTask = new System.Threading.CancellationTokenSource();
                    ChatViewModel.SendOfflineFile(_targetModel, _operateTask, (result) =>
                    {
                        AcioningItems.Remove(this);
                        if (_operateTask != null)
                        {
                            _operateTask.Cancel();
                            _operateTask = null;
                        }
                    });
                }
                else
                {
                    ChatViewModel.Chat.Messages.Remove(_targetModel);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// 在线发送
        /// </summary>
        private void OnlineSend()
        {
            if (ChatViewModel != null)
            {
                _targetModel.CanOperate = false;
                AcioningItems.Remove(this);
                if (_operateTask != null)
                {
                    _operateTask.Cancel();
                    _operateTask = null;
                }

                if (FileExists())
                {
                    AcioningItems.Add(this);
                    _operateTask = new System.Threading.CancellationTokenSource();
                    if (ChatViewModel.IsGroup)
                    {
                        this.tbConnecting.Visibility = Visibility.Visible;
                        //群聊只能离线发送
                        ChatViewModel.SendOfflineFile(_targetModel, _operateTask, (result) =>
                        {
                            AcioningItems.Remove(this);
                            if (_operateTask != null)
                            {
                                _operateTask.Cancel();
                                _operateTask = null;
                            }
                        });
                    }
                    else
                    {
                        ChatViewModel.SendOnlineFile(ChatViewModel, _targetModel, _operateTask, (result) =>
                        {
                            AcioningItems.Remove(this);
                            if (_operateTask != null)
                            {
                                _operateTask.Cancel();
                                _operateTask = null;
                            }
                        });
                    }
                }
                else
                {
                    ChatViewModel.Chat.Messages.Remove(_targetModel);
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// 开始接收
        /// </summary>
        private void Receive()
        {
            if (ChatViewModel != null && AppData.CanInternetAction())
            {
                _targetModel.MessageState = MessageStates.None;
                this.FileState            = FileStates.Receiving;
                _operateTask = new System.Threading.CancellationTokenSource();
                AcioningItems.Add(this);

                CSClient.Helper.MessageHelper.LoadFileContent(_targetModel, _operateTask, ChatViewModel, (result) =>
                {
                    AcioningItems.Remove(this);
                    if (_operateTask != null)
                    {
                        _operateTask.Cancel();
                        _operateTask = null;
                    }
                });
            }
        }
コード例 #4
0
        private void SendVideo()
        {
            if (ChatViewModel != null)
            {
                _targetModel.CanOperate = false;

                if (FileExists())
                {
                    AcioningItems.Add(this);
                    _operateTask = new System.Threading.CancellationTokenSource();
                    _targetModel.ResourceModel.FileState = FileStates.SendOffline;
                    if (AppData.CanInternetAction(""))
                    {
                        ChatViewModel.SendSmallVideoFile(_targetModel, _operateTask, async(result) =>
                        {
                            if (SDKClient.SDKClient.Instance.property.CurrentAccount.Isforbidden)
                            {
                                _targetModel.MessageState            = MessageStates.Warn;
                                _targetModel.ResourceModel.FileState = FileStates.Fail;
                            }

                            AcioningItems.Remove(this);
                            if (_operateTask != null)
                            {
                                _operateTask.Cancel();
                                _operateTask = null;
                            }
                        });
                    }
                    else
                    {
                        ChatViewModel.SaveSendingMessages(_targetModel);
                    }
                }
                else
                {
                    ChatViewModel.Chat.Messages.Remove(_targetModel);
                }
            }
        }
コード例 #5
0
        /// <summary>
        /// 另存为
        /// </summary>
        private void SaveAs()
        {
            if (_targetModel.ResourceModel.FileState == FileStates.WaitForReceieve)
            {
                if (AppData.CanInternetAction())
                {
                    Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
                    sfd.FileName = _targetModel.ResourceModel.FileName;
                    //sfd.Filter = System.IO.Path.GetExtension(_targetModel.ResourceModel.FileName);
                    if (sfd.ShowDialog() == true)
                    {
                        try
                        {
                            File.Delete(sfd.FileName);
                        }
                        catch
                        {
                            AppData.MainMV.TipMessage = "文件已被占用,替换失败!";
                            return;
                        }
                        this.FileState = FileStates.Receiving;
                        _operateTask   = new System.Threading.CancellationTokenSource();
                        AcioningItems.Add(this);
                        ChatViewModel chatVM = AppData.MainMV.ChatListVM.SelectedItem;
                        CSClient.Helper.MessageHelper.LoadFileContent(_targetModel, _operateTask, chatVM, (result) =>
                        {
                            AcioningItems.Remove(this);
                            if (_operateTask != null)
                            {
                                _operateTask.Cancel();
                                _operateTask = null;
                            }
                        }, sfd.FileName);
                    }
                }
            }
            else
            {
                if (FileExists())
                {
                    Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
                    dlg.FileName   = System.IO.Path.GetFileName(this.FullName);    // Default file name
                    dlg.DefaultExt = System.IO.Path.GetExtension(this.FullName);   // fileName.Split('.').LastOrDefault(); // Default file extension

                    dlg.Filter = string.Format("文件 (.{0})|*.{0}", dlg.DefaultExt); // // Filter files by extension

                    dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
                    if (dlg.ShowDialog() == true)
                    {
                        try
                        {
                            File.Copy(this.FullName, dlg.FileName, true);
                        }
                        catch
                        {
                            AppData.MainMV.TipMessage = "文件已被占用,替换失败!";
                        }
                    }
                }
            }
        }