#!/bin/bash

# 配置部分
RSS_URL="https://www.appinn.com/feed/"  # 替换为你的RSS源地址
LAST_CHECK_FILE="/volume2/Material/last_check.txt"  # 用于存储上次检查的时间戳
PRINTER_DEVICE="/dev/usb/lp0"  # 热敏打印机设备路径

# ESC/POS 指令部分
ESC=$(echo -e "\x1b")  # ESC 字符
RESET="${ESC}@"
BOLD_ON="${ESC}E\x01"
BOLD_OFF="${ESC}E\x00"
CENTER="${ESC}a\x01"
LEFT_ALIGN="${ESC}a\x00"
DOUBLE_HEIGHT="${ESC}!\x10"  # 双倍高度
DOUBLE_WIDTH="${ESC}!\x20"   # 双倍宽度
NORMAL_SIZE="${ESC}!\x00"
CUT_PAPER="${ESC}i"          # 切纸指令

# 指定日期格式
START_DATE="2024-09-01T00:00:00Z"  # 替换为指定的起始时间（UTC格式）
echo "初始查询时间：$START_DATE"

# 获取上次查询时间
if [ -f "$LAST_CHECK_FILE" ]; then
    LAST_CHECK=$(cat "$LAST_CHECK_FILE")
else
    LAST_CHECK="$START_DATE"
fi
echo "上次查询时间：$LAST_CHECK"

# 下载RSS源
RSS_CONTENT=$(curl -s "$RSS_URL")
echo "RSS源内容下载完成，长度：${#RSS_CONTENT}"

# 将RSS内容转换为单行
#SINGLE_LINE_RSS_CONTENT=$(echo "$RSS_CONTENT" | tr -d '\n' | tr -d '\r' | tr -s ' ')

# 提取 <title>, <pubDate>, 和 <description> 的内容
mapfile -t TITLE_ARRAY < <(echo "$RSS_CONTENT" | grep -oE '<title>[^<]+</title>' | sed -e 's/<\/\?title>//g')
mapfile -t PUBDATE_ARRAY < <(echo "$RSS_CONTENT" | grep -oE '<pubDate>[^<]+</pubDate>' | sed -e 's/<\/\?pubDate>//g')
mapfile -t DESCRIPTION_ARRAY < <(echo "$RSS_CONTENT" | grep -oE '<description>.+</description>' | sed -e 's/<\/\?description>//g' -e 's/<!\[CDATA\[//g' -e 's/]]>//g')
#TITLE_ARRAY=($(echo "$RSS_CONTENT" | grep -oE '<title>[^<]+</title>' | sed 's/<[^>]*>//g'))
#PUBDATE_ARRAY=($(echo "$RSS_CONTENT" | grep -oE '<pubDate>[^<]+</pubDate>' | sed 's/<[^>]*>//g'))
#DESCRIPTION_ARRAY=($(echo "$RSS_CONTENT" | grep -oE '<description>[^<]+</description>' | sed -e 's/<[^>]*>//g'))

# 获取数组的长度（假设每个数组长度相同）
ITEM_COUNT=${#TITLE_ARRAY[@]}

for (( i=0; i<$ITEM_COUNT; i++ )); do
    t=$i+1
    TITLE="${TITLE_ARRAY[$t]}"
    PUB_DATE="${PUBDATE_ARRAY[$i]}"
    DESCRIPTION="${DESCRIPTION_ARRAY[$t]}"

    echo "处理一个新项目..."
    echo "项目发布日期：$PUB_DATE"
    echo "项目标题：$TITLE"
    echo "项目描述（前180字）：$(echo "$DESCRIPTION" | cut -c1-180)"

    # 将发布时间转为Unix时间戳
    CLEAN_PUB_DATE=$(echo "$PUB_DATE" | sed 's/,//')
    PUB_DATE_TIMESTAMP=$(date -d "$CLEAN_PUB_DATE" +%s 2>/dev/null)

    if [ -z "$PUB_DATE_TIMESTAMP" ]; then
        echo "日期解析失败，跳过该项目。"
        continue
    fi

    LAST_CHECK_TIMESTAMP=$(date -d "$LAST_CHECK" +%s)

    echo "项目发布时间戳：$PUB_DATE_TIMESTAMP"
    echo "上次查询时间戳：$LAST_CHECK_TIMESTAMP"

    # 如果发布时间比上次查询时间更新，则抓取内容
    if [ "$PUB_DATE_TIMESTAMP" -gt "$LAST_CHECK_TIMESTAMP" ]; then
        # 格式化打印内容
        {
            # 重置打印机状态
            echo -ne "$RESET"

            # 打印居中的加粗标题，双倍高度和宽度
            echo -ne "$CENTER$BOLD_ON$DOUBLE_HEIGHT$DOUBLE_WIDTH"
            echo "$TITLE" | iconv -f UTF-8 -t GBK
            echo -ne "$RESET"  # 复位到正常大小和状态

            # 打印左对齐的描述，仅前180个字符
            echo -ne "$LEFT_ALIGN$NORMAL_SIZE"
            echo "$(echo "$DESCRIPTION" | iconv -f UTF-8 -t GBK)"
            echo -ne "$RESET"  # 复位打印机状态

			# 打印五行空白
			echo -e "\n\n\n\n\n"
			
			# 切纸
			echo -ne "$CUT_PAPER"
			
        } > "$PRINTER_DEVICE"
        echo "项目打印完成。"
    else
        echo "项目未更新，无需打印。"
    fi
done

# 更新查询时间
date -u +"%Y-%m-%dT%H:%M:%SZ" > "$LAST_CHECK_FILE"
echo "查询时间已更新为：$(cat "$LAST_CHECK_FILE")"
