feat: publish dbussmsforward refactor

This commit is contained in:
2026-05-08 23:54:03 +08:00
commit 9f1ee9ffe6
77 changed files with 15585 additions and 0 deletions
+93
View File
@@ -0,0 +1,93 @@
using DbusSmsForward.Helper;
using DbusSmsForward.Models;
namespace DbusSmsForward.Services;
public static class CommandLineParser
{
public static AppCommand Parse(string[] args)
{
if (args.Length == 0)
{
return new AppCommand { Name = "run" };
}
List<string> enabledChannels = [];
string commandName = "run";
string phoneNumber = string.Empty;
string message = string.Empty;
bool validateConfig = false;
bool printSampleConfig = false;
for (int i = 0; i < args.Length; i++)
{
string arg = args[i];
switch (arg)
{
case "run":
case "send":
case "validate-config":
case "print-sample-config":
commandName = arg;
break;
case "--to":
if (i + 1 < args.Length) phoneNumber = args[++i];
break;
case "--text":
if (i + 1 < args.Length) message = args[++i];
break;
case "-fE":
commandName = "run";
enabledChannels.Add("email");
break;
case "-fP":
commandName = "run";
enabledChannels.Add("pushplus");
break;
case "-fW":
commandName = "run";
enabledChannels.Add("wecom");
break;
case "-fT":
commandName = "run";
enabledChannels.Add("telegram");
break;
case "-fD":
commandName = "run";
enabledChannels.Add("dingtalk");
break;
case "-fB":
commandName = "run";
enabledChannels.Add("bark");
break;
case "-fS":
commandName = "run";
enabledChannels.Add("shell");
break;
case "-fA":
commandName = "run";
enabledChannels.Add("autmanpush");
break;
case "-sS":
commandName = "send";
break;
case "--validate-config":
validateConfig = true;
break;
case "--print-sample-config":
printSampleConfig = true;
break;
}
}
return new AppCommand
{
Name = commandName,
PhoneNumber = phoneNumber,
Message = message,
EnabledChannels = enabledChannels.Distinct(StringComparer.OrdinalIgnoreCase).ToArray(),
ValidateConfig = validateConfig || commandName == "validate-config",
PrintSampleConfig = printSampleConfig || commandName == "print-sample-config"
};
}
}
@@ -0,0 +1,21 @@
using DbusSmsForward.ProcessSmsContent;
using DbusSmsForward.SMSModel;
using DbusSmsForward.SettingModel;
namespace DbusSmsForward.Services;
public static class NotificationContentBuilder
{
public static string BuildBody(SmsContentModel sms, string deviceName)
=> $"发信电话:{sms.TelNumber}\n时间:{sms.SmsDate}\n转发设备:{deviceName}\n短信内容:{sms.SmsContent}";
public static SmsCodeModel ExtractCode(DbusSmsForwardOptions options, SmsContentModel sms)
{
if (!options.Forwarding.EnableSmsCodeExtraction)
{
return new SmsCodeModel();
}
return GetSmsContentCode.GetSmsCodeModel(sms.SmsContent);
}
}
@@ -0,0 +1,26 @@
using DbusSmsForward.Notifications;
using DbusSmsForward.SMSModel;
using Microsoft.Extensions.Logging;
namespace DbusSmsForward.Services;
public sealed class NotificationDispatcher(IEnumerable<INotificationSender> senders, ILogger<NotificationDispatcher> logger)
{
private readonly IReadOnlyList<INotificationSender> _senders = senders.Where(static s => s.IsEnabled).ToList();
public async Task DispatchAsync(SmsContentModel sms, string body, string deviceName, CancellationToken cancellationToken)
{
foreach (INotificationSender sender in _senders)
{
try
{
await sender.SendAsync(sms, body, deviceName, cancellationToken);
logger.LogInformation("Notification sender {Sender} completed for {PhoneNumber}", sender.Name, sms.TelNumber);
}
catch (Exception ex)
{
logger.LogError(ex, "Notification sender {Sender} failed for {PhoneNumber}", sender.Name, sms.TelNumber);
}
}
}
}
+23
View File
@@ -0,0 +1,23 @@
using DbusSmsForward.ModemHelper;
using DbusSmsForward.SMSModel;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace DbusSmsForward.Services;
public sealed class SmsForwardWorker(ModemManagerHelper modemManagerHelper, NotificationDispatcher dispatcher, ILogger<SmsForwardWorker> logger) : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
logger.LogInformation("SmsForwardWorker started.");
modemManagerHelper.SetSendMethodList(
[
(SmsContentModel sms, string body, string deviceName) =>
{
dispatcher.DispatchAsync(sms, body, deviceName, stoppingToken).GetAwaiter().GetResult();
}
]);
await Task.Delay(Timeout.Infinite, stoppingToken);
}
}