This commit refactors the data repositories to remove user-specific filtering. It simplifies the data access logic by retrieving all data from the Hive boxes and removing the need to filter by `userId` in the repository methods. This change makes the app function in single-user mode and removes the need to manage multiple user contexts within the data layer. Specifically: - Removes `userId` parameter from repository methods. - Updates the setting repository to use fixed keys. - Removes user ID filtering from queries. - Removes user ID parameters from Cubits and Blocs - Updates initial data creation
65 lines
3.2 KiB
Dart
65 lines
3.2 KiB
Dart
import 'package:another_telephony/telephony.dart' as telephony_package;
|
|
import 'package:budget_app/models/sms_message.dart';
|
|
|
|
/// Сервис для работы с SMS сообщениями.
|
|
///
|
|
/// Использует пакет [telephony] для доступа к SMS на устройстве.
|
|
/// Предоставляет методы для запроса разрешений и получения
|
|
/// последних SMS сообщений.
|
|
class SmsService {
|
|
final telephony_package.Telephony _telephony = telephony_package.Telephony.instance;
|
|
|
|
/// Запрашивает разрешения на чтение и отправку SMS.
|
|
///
|
|
/// Возвращает [true], если разрешения были предоставлены,
|
|
/// иначе [false].
|
|
Future<bool> requestPermissions() async {
|
|
return await _telephony.requestPhoneAndSmsPermissions ?? false;
|
|
}
|
|
|
|
/// Возвращает список последних SMS сообщений.
|
|
///
|
|
/// [count] - количество сообщений для получения.
|
|
///
|
|
/// Возвращает список объектов [SmsMessage].
|
|
/// В случае ошибки или отсутствия разрешений, возвращает пустой список.
|
|
Future<List<SmsMessage>> getLastSmsMessages(int count) async {
|
|
final bool? permissionsGranted =
|
|
await _telephony.requestPhoneAndSmsPermissions;
|
|
if (permissionsGranted ?? false) {
|
|
final List<telephony_package.SmsMessage> messages = await _telephony.getInboxSms(
|
|
columns: [telephony_package.SmsColumn.BODY, telephony_package.SmsColumn.ADDRESS, telephony_package.SmsColumn.DATE],
|
|
sortOrder: [telephony_package.OrderBy(telephony_package.SmsColumn.DATE, sort: telephony_package.Sort.DESC)],
|
|
);
|
|
// Комментарий: Преобразуем сообщения из пакета telephony в нашу модель SmsMessage.
|
|
return messages.take(count).map((msg) => SmsMessage(
|
|
body: msg.body,
|
|
sender: msg.address,
|
|
date: DateTime.fromMillisecondsSinceEpoch(msg.date ?? 0),
|
|
)).toList();
|
|
}
|
|
return [];
|
|
}
|
|
|
|
// Комментарий: Метод для получения SMS-сообщений с определенной даты.
|
|
Future<List<SmsMessage>> getSmsMessagesSince(DateTime sinceDate) async {
|
|
final bool? permissionsGranted = await _telephony.requestPhoneAndSmsPermissions;
|
|
if (permissionsGranted ?? false) {
|
|
final List<telephony_package.SmsMessage> messages = await _telephony.getInboxSms(
|
|
columns: [telephony_package.SmsColumn.BODY, telephony_package.SmsColumn.ADDRESS, telephony_package.SmsColumn.DATE],
|
|
sortOrder: [telephony_package.OrderBy(telephony_package.SmsColumn.DATE, sort: telephony_package.Sort.ASC)],
|
|
);
|
|
// Комментарий: Фильтруем сообщения по дате и преобразуем их в нашу модель.
|
|
return messages
|
|
.where((msg) => (msg.date ?? 0) >= sinceDate.millisecondsSinceEpoch)
|
|
.map((msg) => SmsMessage(
|
|
body: msg.body,
|
|
sender: msg.address,
|
|
date: DateTime.fromMillisecondsSinceEpoch(msg.date ?? 0),
|
|
))
|
|
.toList();
|
|
}
|
|
return [];
|
|
}
|
|
}
|