// Copyright (C) 2025, uvok cheetah // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . import 'package:flutter/foundation.dart'; import 'package:logger/logger.dart'; import 'package:uvok_epaper_badge/model/badge_motive.dart'; import 'package:uvok_epaper_badge/model/motive_selection/badge_motive_selection.dart'; Logger logger = Logger(); class BadgeMotiveViewModel extends ChangeNotifier { final BadgeMotiveSelection _motivSelect; List _motives = []; bool _busy = false; String? errorMessage; BadgeMotiveViewModel({required BadgeMotiveSelection motivSelect}) : _motivSelect = motivSelect; bool get allowSelection => !_busy; List get motives => _motives; BadgeMotive? currentMotive; Future updateMotives() async { await safeAction(() async { _motives = await _motivSelect.getMotives(); }); } Future setMotive(BadgeMotive motive) async { await safeAction(() async { logger.t(">Set motive to ${motive.id}"); await _motivSelect.setCurrentMotive(motive); logger.t(" getCurrentMotive() async { await safeAction(() async { currentMotive = await _motivSelect.getCurrentMotive(); }); } Future safeAction(Future Function() action) async { if (_busy) return; _busy = true; notifyListeners(); try { await action(); } on Exception catch (e) { errorMessage = "${e.runtimeType}: ${e.toString()}"; } finally { _busy = false; notifyListeners(); } } }