/// <summary>
        /// Called when [login].
        /// </summary>
        /// <param name="loginEventMessage">The login event message.</param>
        private void OnLogin(LoginEventMessage loginEventMessage)
        {
            this.RabbitChatService.Initialize(loginEventMessage.Contact);
            this.RabbitChatService.ChatCreated += this.RabbitChatServiceOnChatCreated;

            this.LoadContacts();
        }
Esempio n. 2
0
        /// <summary>
        /// The check log file size.
        /// </summary>
        /// <param name="m">
        /// The login event message
        /// </param>
        private void CheckLogFileSize(LoginEventMessage m)
        {
            try
            {
                if (m.IsLogedIn && this.storageProvider.FileExists(this.FileName))
                {
                    Task.Run(
                        async() =>
                    {
                        try
                        {
                            var currentFileSize = await this.storageProvider.GetFileSize(this.FileName);
                            if (currentFileSize > MaxFileSizeBytes)
                            {
                                var logData  = await this.GetLogDataAsync();
                                var allLines = logData
                                               .Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
                                               .ToList();
                                var lineSize         = (long)currentFileSize / allLines.Count;
                                var maxNumberOfLines = (int)MaxFileSizeBytes * RetainPercentageOfMaxSize / lineSize;

                                var linesToSkip = allLines.Count - maxNumberOfLines;

                                var logLines = allLines.Skip(linesToSkip > 0 ? (int)linesToSkip : 0);

                                logData      = string.Join(Environment.NewLine, logLines);
                                var logBytes = Encoding.UTF8.GetBytes(logData);
                                await this.storageProvider.CreateFile(this.FileName, logBytes, true);
                                this.messenger?.Send(new ToastrMessage
                                {
                                    MessageText     = string.Format(LocalizedString.TextErrorLogPurge),
                                    DetailedMessage = string.Format(
                                        LocalizedString.TextErrorLogPurgeDetail,
                                        MaxFileSizeBytes / (1024 * 1024))
                                });
                            }
                        }
                        catch (Exception ex)
                        {
                            this.LogError(ex);
                        }
                    }).GetAwaiter().GetResult();
                }
            }
            catch (Exception ex)
            {
                this.LogError(ex);
            }
        }