public async void ShowChatMessages(ChatMessageKey[] chatMessageKeys, string channel)
        {
            StopFlashAndReset();
            Logger.Instance.LogMessage(TracingLevel.INFO, $"ShowChatMessages called");

            await SwitchToFullScreen();

            // Wait until the UI Action keys have subscribed to get events
            int retries = 0;

            while (!IsReady && retries < 60)
            {
                Thread.Sleep(100);
                retries++;
            }
            if (!IsReady)
            {
                Logger.Instance.LogMessage(TracingLevel.WARN, "Could not get full screen ready!");
                await connection.SwitchProfileAsync(null);

                return;
            }
            StopFlashAndReset();

            chatMessageEventArgs = new ChatMessageListEventArgs(chatMessageKeys, channel, numberOfKeys, 0);
            ChatMessageListChanged?.Invoke(this, chatMessageEventArgs);
        }
Exemple #2
0
        private async void Instance_ChatMessageListChanged(object sender, ChatMessageListEventArgs e)
        {
            flashMode          = FlashMode.ChatMessage;
            channelName        = e.Channel;
            pagedSequentialKey = e.CurrentPage * (e.NumberOfKeys - 2) + sequentialKey;
            if (sequentialKey == 0)
            {
                await Connection.SetTitleAsync("Exit");
            }
            else if (e.ChatMessageKeys != null && sequentialKey == e.NumberOfKeys - 1 && e.ChatMessageKeys.Length > pagedSequentialKey) // There is more than one page)
            {
                await Connection.SetTitleAsync(">>");

                numberOfElements = e.ChatMessageKeys.Length;
                numberOfKeys     = e.NumberOfKeys;
            }
            else if (e.ChatMessageKeys != null && e.ChatMessageKeys.Length >= pagedSequentialKey) // >= because we're doing -1 as we're starting on the second key
            // +1 because starting on second key
            {
                var userInfo = e.ChatMessageKeys[pagedSequentialKey - 1];
                using (Image image = FetchImage(userInfo.KeyImageURL.Replace(PREVIEW_IMAGE_WIDTH_TOKEN, PREVIEW_IMAGE_WIDTH_PIXELS.ToString()).Replace(PREVIEW_IMAGE_HEIGHT_TOKEN, PREVIEW_IMAGE_HEIGHT_PIXELS.ToString())))
                {
                    await DrawChatMessageImage(userInfo, image);
                }
                chatMessage = userInfo.ChatMessage;
            }
        }
        private async void Instance_ChatMessageListChanged(object sender, ChatMessageListEventArgs e)
        {
            flashMode          = FlashMode.ChatMessage;
            channelName        = e.Channel;
            pagedSequentialKey = e.CurrentPage * (e.NumberOfKeys - NUMBER_OF_SPECIAL_KEYS) + sequentialKey; // -3 for the Exit, Back, Next buttons
            if (sequentialKey == 0)
            {
                await Connection.SetTitleAsync("Exit");
            }
            else if (e.ChatMessageKeys != null && sequentialKey == e.NumberOfKeys - 1 && e.ChatMessageKeys.Length > e.NumberOfKeys - 3) // Next key, and there is more than one page *overall*
            {
                if (e.ChatMessageKeys.Length + NUMBER_OF_SPECIAL_KEYS < pagedSequentialKey)                                             // We are on last page
                {
                    await Connection.SetTitleAsync(null);
                }
                else
                {
                    await Connection.SetTitleAsync(">>");
                }
                numberOfElements = e.ChatMessageKeys.Length;
                numberOfKeys     = e.NumberOfKeys;
            }
            else if (e.ChatMessageKeys != null && sequentialKey == e.NumberOfKeys - 2 && e.ChatMessageKeys.Length > e.NumberOfKeys - 3) // Prev key, and there is more than one page *overall*
            {
                if (sequentialKey == pagedSequentialKey)                                                                                // We are on the first page
                {
                    await Connection.SetTitleAsync(null);
                }
                else
                {
                    await Connection.SetTitleAsync("<<");
                }
                numberOfElements = e.ChatMessageKeys.Length;
                numberOfKeys     = e.NumberOfKeys;
            }
            else if (e.ChatMessageKeys != null && e.ChatMessageKeys.Length >= pagedSequentialKey) // >= because we're doing -1 as we're starting on the second key
            // +1 because starting on second key
            {
                await Connection.SetTitleAsync(null);

                var    userInfo     = e.ChatMessageKeys[pagedSequentialKey - 1];
                string userImageURL = null;
                if (!String.IsNullOrEmpty(userInfo?.KeyImageURL))
                {
                    userImageURL = userInfo.KeyImageURL.Replace(PREVIEW_IMAGE_WIDTH_TOKEN, PREVIEW_IMAGE_WIDTH_PIXELS.ToString()).Replace(PREVIEW_IMAGE_HEIGHT_TOKEN, PREVIEW_IMAGE_HEIGHT_PIXELS.ToString());
                }

                using (Image image = FetchImage(userImageURL))
                {
                    await DrawChatMessageImage(userInfo, image);
                }
                chatMessage = userInfo.ChatMessage;
            }
        }
        public async void ShowChatMessages(ChatMessageKey[] chatMessageKeys, string channel)
        {
            StopFlashAndReset();
            Logger.Instance.LogMessage(TracingLevel.INFO, $"ShowChatMessages called");

            switch (connection.DeviceInfo().Type)
            {
            case StreamDeckDeviceType.StreamDeckClassic:
                await connection.SwitchProfileAsync("FullScreenAlert");

                break;

            case StreamDeckDeviceType.StreamDeckMini:
                await connection.SwitchProfileAsync("FullScreenAlertMini");

                break;

            case StreamDeckDeviceType.StreamDeckXL:
                await connection.SwitchProfileAsync("FullScreenAlertXL");

                break;

            default:
                Logger.Instance.LogMessage(TracingLevel.WARN, $"SwitchProfileAsync: Unsupported device type: {connection.DeviceInfo().Type}");
                break;
            }

            // Wait until the UI Action keys have subscribed to get events
            int retries = 0;

            while (!IsReady && retries < 60)
            {
                Thread.Sleep(100);
                retries++;
            }
            if (!IsReady)
            {
                Logger.Instance.LogMessage(TracingLevel.WARN, "Could not get full screen ready!");
                await connection.SwitchProfileAsync(null);

                return;
            }
            StopFlashAndReset();

            chatMessageEventArgs = new ChatMessageListEventArgs(chatMessageKeys, channel, numberOfKeys, 0);
            ChatMessageListChanged?.Invoke(this, chatMessageEventArgs);
        }