Add steam message
This commit is contained in:
parent
1351130f83
commit
f2d808f5d3
8 changed files with 226 additions and 68 deletions
|
@ -1,28 +1,38 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:desktopapp/classes/stream_element.dart';
|
||||
import 'package:desktopapp/utils/logger.dart';
|
||||
import 'package:desktopapp/utils/requests.dart';
|
||||
import 'package:enough_mail/enough_mail.dart';
|
||||
|
||||
class Mailer {
|
||||
static MailClient? _mailClient;
|
||||
|
||||
/// High level mail API example
|
||||
static Future<void> mailExample() async {
|
||||
const email = 'trexricher1997@gmail.com';
|
||||
const password = 'rugnxbafhcwsykzt';
|
||||
static Future<bool> connect({
|
||||
required String email,
|
||||
required String password,
|
||||
required StreamController<StreamElement> streamController,
|
||||
}) async {
|
||||
Logger.log(LoggerType.info, Mailer, 'Discovering settings for $email');
|
||||
final config = await Discover.discover(email);
|
||||
if (config == null) {
|
||||
Logger.log(LoggerType.info, Mailer,
|
||||
'Unable to autodiscover settings for $email');
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
Logger.log(LoggerType.info, Mailer, 'Settings for $email : $config');
|
||||
final account = MailAccount.fromDiscoveredSettings(
|
||||
'my account', email, password, config);
|
||||
final mailClient = MailClient(account, isLogEnabled: true);
|
||||
_mailClient = MailClient(account, isLogEnabled: true);
|
||||
try {
|
||||
await mailClient.connect();
|
||||
await _mailClient!.connect();
|
||||
Logger.log(LoggerType.info, Mailer, 'Connected to $email');
|
||||
await mailClient.selectInbox();
|
||||
mailClient.eventBus.on<ImapEvent>().listen((ImapEvent event) async {
|
||||
streamController
|
||||
.add(StreamElement(StreamElementType.log, 'Connected to $email'));
|
||||
await _mailClient!.selectInbox();
|
||||
streamController.add(
|
||||
StreamElement(StreamElementType.log, 'INBOX selected for $email'));
|
||||
_mailClient!.eventBus.on<ImapEvent>().listen((ImapEvent event) async {
|
||||
if (event.eventType == ImapEventType.exists) {
|
||||
final evt = event as ImapMessagesExistEvent;
|
||||
if (evt.newMessagesExists <= evt.oldMessagesExists) return;
|
||||
|
@ -32,22 +42,35 @@ class Mailer {
|
|||
} else {
|
||||
sequence.add(evt.newMessagesExists);
|
||||
}
|
||||
final messages = await mailClient.fetchMessageSequence(sequence,
|
||||
fetchPreference: FetchPreference.full);
|
||||
final messages = await _mailClient!.fetchMessageSequence(sequence,
|
||||
fetchPreference: FetchPreference.envelope);
|
||||
for (final message in messages) {
|
||||
var mailEvt = MailLoadEvent(message, mailClient);
|
||||
var content = mailEvt.message.decodeSubject();
|
||||
var mess = mailEvt.message.decodeTextPlainPart();
|
||||
Logger.log(LoggerType.info, Mailer, 'New message $content : $mess');
|
||||
Requests.sendAlert('*$content* $mess');
|
||||
var mailEvt = MailLoadEvent(message, _mailClient!);
|
||||
streamController.add(StreamElement(StreamElementType.alert,
|
||||
mailEvt.message.decodeSubject() ?? ''));
|
||||
// var content = mailEvt.message.decodeSubject();
|
||||
// var mess = mailEvt.message.decodeTextPlainPart();
|
||||
|
||||
// Logger.log(LoggerType.info, Mailer, 'New message $content : $mess');
|
||||
// Requests.sendAlert('*$content* $mess');
|
||||
}
|
||||
}
|
||||
});
|
||||
Logger.log(LoggerType.info, Mailer, 'Start polling mail for $email');
|
||||
await mailClient.startPolling(const Duration(seconds: 30));
|
||||
Logger.log(LoggerType.info, Mailer, 'Finish polling mail for $email');
|
||||
await _mailClient!.startPolling();
|
||||
return true;
|
||||
} on MailException catch (e) {
|
||||
streamController.add(StreamElement(StreamElementType.log, e.toString()));
|
||||
Logger.log(LoggerType.error, Mailer, 'High level API failed with $e');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static Future<void> disconnect() async {
|
||||
if (_mailClient == null) return;
|
||||
Logger.log(LoggerType.info, Mailer, 'Disconnecting from mail');
|
||||
await _mailClient!.stopPolling();
|
||||
await _mailClient!.disconnect();
|
||||
Logger.log(LoggerType.info, Mailer, 'Disconnected from mail');
|
||||
_mailClient = null;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue