Files
xianyan/lib/features/discover/services/push_scheduler.dart
Developer 182735df3b release: 发布v6.6.2版本,优化多项功能与体验
本次更新包含:
1.  更新应用标语与隐私政策文案,调整品牌宣传语
2.  重构Feed ID解析、HTML清理工具类,提取重复逻辑
3.  新增全屏图片查看器、通用动画操作按钮组件
4.  修复电池监听空指针、快捷操作异常捕获问题
5.  优化搜索、会话列表、RSS阅读器等页面体验
6.  完善多语言支持,新增多个翻译模块
7.  移除冗余代码,统一数字格式化逻辑
8.  调整登录页面布局与交互逻辑
2026-06-01 08:16:01 +08:00

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}';
}
}