本次更新包含: 1. 更新应用标语与隐私政策文案,调整品牌宣传语 2. 重构Feed ID解析、HTML清理工具类,提取重复逻辑 3. 新增全屏图片查看器、通用动画操作按钮组件 4. 修复电池监听空指针、快捷操作异常捕获问题 5. 优化搜索、会话列表、RSS阅读器等页面体验 6. 完善多语言支持,新增多个翻译模块 7. 移除冗余代码,统一数字格式化逻辑 8. 调整登录页面布局与交互逻辑
146 lines
4.8 KiB
Dart
146 lines
4.8 KiB
Dart
// ============================================================
|
|
// 闲言APP — 会话流推送调度器
|
|
// 创建时间: 2026-04-30
|
|
// 更新时间: 2026-04-30
|
|
// 作用: 检查时段/天气/情景,生成智能推送消息
|
|
// 上次更新: 初始创建
|
|
// ============================================================
|
|
|
|
import 'package:xianyan/core/utils/logger.dart';
|
|
import 'package:xianyan/features/discover/models/chat_message.dart';
|
|
|
|
class PushScheduler {
|
|
PushScheduler._();
|
|
|
|
static const _maxMessagesPerDay = 10;
|
|
|
|
static List<ChatMessage> checkAndGenerate(
|
|
Set<String> triggeredToday,
|
|
int todayCount,
|
|
) {
|
|
if (todayCount >= _maxMessagesPerDay) return [];
|
|
|
|
final now = DateTime.now();
|
|
final hour = now.hour;
|
|
final messages = <ChatMessage>[];
|
|
|
|
_checkGreeting(hour, triggeredToday, messages);
|
|
_checkScenario(now, triggeredToday, messages);
|
|
|
|
return messages;
|
|
}
|
|
|
|
static void _checkGreeting(
|
|
int hour,
|
|
Set<String> triggeredToday,
|
|
List<ChatMessage> messages,
|
|
) {
|
|
if (hour >= 6 && hour < 9 && !triggeredToday.contains('morning')) {
|
|
messages.add(
|
|
ChatMessage(
|
|
id: 'push_morning_${DateTime.now().millisecondsSinceEpoch}',
|
|
type: ChatMessageType.greeting,
|
|
role: ChatMessageRole.assistant,
|
|
text: '早安!新的一天,从一句好话开始 ✨',
|
|
timestamp: DateTime.now(),
|
|
meta: {'pushType': 'morning'},
|
|
),
|
|
);
|
|
triggeredToday.add('morning');
|
|
Log.i('推送调度: 早安问候已生成');
|
|
}
|
|
|
|
if (hour >= 11 && hour < 13 && !triggeredToday.contains('noon')) {
|
|
messages.add(
|
|
ChatMessage(
|
|
id: 'push_noon_${DateTime.now().millisecondsSinceEpoch}',
|
|
type: ChatMessageType.greeting,
|
|
role: ChatMessageRole.assistant,
|
|
text: '中午了,记得吃饭 🍜 饭后看看好句放松一下',
|
|
timestamp: DateTime.now(),
|
|
meta: {'pushType': 'noon'},
|
|
),
|
|
);
|
|
triggeredToday.add('noon');
|
|
Log.i('推送调度: 午间提醒已生成');
|
|
}
|
|
|
|
if (hour >= 14 && hour < 15 && !triggeredToday.contains('afternoon')) {
|
|
messages.add(
|
|
ChatMessage(
|
|
id: 'push_afternoon_${DateTime.now().millisecondsSinceEpoch}',
|
|
type: ChatMessageType.greeting,
|
|
role: ChatMessageRole.assistant,
|
|
text: '下午好 ☕ 来杯茶,读一句好话提提神',
|
|
timestamp: DateTime.now(),
|
|
meta: {'pushType': 'afternoon'},
|
|
),
|
|
);
|
|
triggeredToday.add('afternoon');
|
|
Log.i('推送调度: 下午问候已生成');
|
|
}
|
|
|
|
if (hour >= 21 && hour < 23 && !triggeredToday.contains('night')) {
|
|
messages.add(
|
|
ChatMessage(
|
|
id: 'push_night_${DateTime.now().millisecondsSinceEpoch}',
|
|
type: ChatMessageType.greeting,
|
|
role: ChatMessageRole.assistant,
|
|
text: '夜深了,该休息了 🌙 明天又是美好的一天',
|
|
timestamp: DateTime.now(),
|
|
meta: {'pushType': 'night'},
|
|
),
|
|
);
|
|
triggeredToday.add('night');
|
|
Log.i('推送调度: 晚间关怀已生成');
|
|
}
|
|
}
|
|
|
|
static void _checkScenario(
|
|
DateTime now,
|
|
Set<String> triggeredToday,
|
|
List<ChatMessage> messages,
|
|
) {
|
|
final month = now.month;
|
|
final day = now.day;
|
|
final key = 'scenario_${month}_$day';
|
|
|
|
if (triggeredToday.contains(key)) return;
|
|
|
|
final scenario = _scenarioMessages[DateTime(month, day)];
|
|
if (scenario != null) {
|
|
messages.add(
|
|
ChatMessage(
|
|
id: 'push_scenario_${now.millisecondsSinceEpoch}',
|
|
type: ChatMessageType.scenario,
|
|
role: ChatMessageRole.assistant,
|
|
text: scenario,
|
|
timestamp: now,
|
|
meta: {'pushType': 'scenario', 'date': '$month-$day'},
|
|
),
|
|
);
|
|
triggeredToday.add(key);
|
|
Log.i('推送调度: 情景推送已生成 ($month-$day)');
|
|
}
|
|
}
|
|
|
|
static final Map<DateTime, String> _scenarioMessages = {
|
|
DateTime(1): '新年快乐!🎆 新的一年,新的开始',
|
|
DateTime(2, 14): '情人节快乐 今天送你一句关于爱的话',
|
|
DateTime(3, 8): '妇女节快乐 🌸 致敬每一位了不起的她',
|
|
DateTime(4, 23): '世界读书日 📚 送你一句关于阅读的话',
|
|
DateTime(5): '劳动节快乐 🎉 辛苦了,休息一下吧',
|
|
DateTime(5, 4): '青年节快乐 🔥 愿你永远年轻,永远热泪盈眶',
|
|
DateTime(6): '儿童节快乐 🧒 保持童心,保持好奇',
|
|
DateTime(9, 10): '教师节快乐 🎓 感恩每一位引路人',
|
|
DateTime(10): '国庆节快乐 🇨🇳 祝祖国繁荣昌盛',
|
|
DateTime(12, 25): '圣诞节快乐 🎄 愿温暖与你同在',
|
|
DateTime(12, 31): '跨年快乐 🎆 告别旧年,迎接新希望',
|
|
};
|
|
|
|
static String todayDateKey() {
|
|
final now = DateTime.now();
|
|
return '${now.year}-${now.month}-${now.day}';
|
|
}
|
|
}
|