diff --git a/src/main.ino b/src/main.ino index f23c755..ba86c1d 100644 --- a/src/main.ino +++ b/src/main.ino @@ -21,8 +21,8 @@ #define MAX_LINES ((SCREEN_HEIGHT - INPUT_LINE_HEIGHT - STATUS_BAR_HEIGHT) / (CHAR_HEIGHT + LINE_SPACING)) #define BOARD_BAT_ADC 4 // Define the ADC pin used for battery reading -#define CONV_FACTOR 1.8 // Conversion factor for the ADC to voltage conversion -#define READS 20 // Number of readings for averaging +#define CONV_FACTOR 1.8 // Conversion factor for the ADC to voltage conversion +#define READS 20 // Number of readings for averaging Pangodream_18650_CL BL(BOARD_BAT_ADC, CONV_FACTOR, READS); TFT_eSPI tft = TFT_eSPI(); @@ -298,6 +298,19 @@ void displayLines() { String modeChange = line.substring(5); tft.setTextColor(TFT_WHITE); tft.print(modeChange); + cursorY += CHAR_HEIGHT; + } else if (line.startsWith("* ")) { // Check for action message + int spacePos = line.indexOf(' ', 2); + String senderNick = line.substring(2, spacePos); + String actionMessage = line.substring(spacePos + 1); + + tft.setTextColor(TFT_WHITE); + tft.print("* "); + tft.setTextColor(nickColors[senderNick]); + tft.print(senderNick + " "); + tft.setTextColor(TFT_WHITE); + tft.print(actionMessage); + cursorY += CHAR_HEIGHT; } else { int colonPos = line.indexOf(':'); @@ -321,6 +334,7 @@ void displayLines() { displayInputLine(); } + void addLine(String senderNick, String message, String type, bool mention = false) { if (nickColors.find(senderNick) == nickColors.end()) nickColors[senderNick] = generateRandomColor(); @@ -344,6 +358,8 @@ void addLine(String senderNick, String message, String type, bool mention = fals formattedMessage = "KICK " + senderNick + message; } else if (type == "mode") { formattedMessage = "MODE " + message; + } else if (type == "action") { + formattedMessage = "* " + senderNick + " " + message; } else { formattedMessage = senderNick + ": " + message; } @@ -361,6 +377,7 @@ void addLine(String senderNick, String message, String type, bool mention = fals displayLines(); } + void displayDeviceInfo() { tft.fillScreen(TFT_BLACK); printDeviceInfo(); @@ -510,7 +527,14 @@ void parseAndDisplay(String line) { String message = line.substring(colonPos + 1); String senderNick = line.substring(1, line.indexOf('!')); bool mention = message.indexOf(nick) != -1; - addLine(senderNick, message, "message", mention); + + // This doesn't work for some annoying reason... even with \001 + if (message.startsWith("\x01ACTION ") && message.endsWith("\x01")) { + String actionMessage = message.substring(8, message.length() - 1); + addLine(senderNick, actionMessage, "action"); + } else { + addLine(senderNick, message, "message", mention); + } } } else if (command == "JOIN" && line.indexOf(channel) != -1) { String senderNick = line.substring(1, line.indexOf('!')); @@ -538,6 +562,8 @@ void parseAndDisplay(String line) { } } + + void handleKeyboardInput(char key) { if (key == '\n' || key == '\r') { // Enter if (inputBuffer.startsWith("/debug")) { @@ -548,6 +574,11 @@ void handleKeyboardInput(char key) { } else if (inputBuffer.startsWith("/raw ")) { String rawCommand = inputBuffer.substring(5); sendRawCommand(rawCommand); + } else if (inputBuffer.startsWith("/me ")) { + String actionMessage = inputBuffer.substring(4); + sendIRC("PRIVMSG " + String(channel) + " :\001ACTION " + actionMessage + "\001"); + addLine(nick, actionMessage, "action"); + inputBuffer = ""; } else { sendIRC("PRIVMSG " + String(channel) + " :" + inputBuffer); addLine(nick, inputBuffer, "message"); @@ -892,9 +923,7 @@ void printDeviceInfo() { uint32_t chipId = ESP.getEfuseMac(); // Unique ID esp_chip_info_t chip_info; esp_chip_info(&chip_info); - String chipInfo = String(chip_info.model) + " Rev " + String(chip_info.revision) + - ", " + String(chip_info.cores) + " cores, " + - String(ESP.getCpuFreqMHz()) + " MHz"; + String chipInfo = String(chip_info.model) + " Rev " + String(chip_info.revision) + ", " + String(chip_info.cores) + " cores, " + String(ESP.getCpuFreqMHz()) + " MHz"; // Get Flash Info size_t flashSize = spi_flash_get_chip_size();