init
This commit is contained in:
20
filcnaplo/lib/api/providers/database_provider.dart
Normal file
20
filcnaplo/lib/api/providers/database_provider.dart
Normal file
@@ -0,0 +1,20 @@
|
||||
import 'package:filcnaplo/database/query.dart';
|
||||
import 'package:filcnaplo/database/store.dart';
|
||||
import 'package:sqflite/sqflite.dart';
|
||||
|
||||
class DatabaseProvider {
|
||||
// late Database _database;
|
||||
late DatabaseQuery query;
|
||||
late UserDatabaseQuery userQuery;
|
||||
late DatabaseStore store;
|
||||
late UserDatabaseStore userStore;
|
||||
|
||||
Future<void> init() async {
|
||||
var db = await openDatabase("app.db");
|
||||
// _database = db;
|
||||
query = DatabaseQuery(db: db);
|
||||
store = DatabaseStore(db: db);
|
||||
userQuery = UserDatabaseQuery(db: db);
|
||||
userStore = UserDatabaseStore(db: db);
|
||||
}
|
||||
}
|
||||
82
filcnaplo/lib/api/providers/news_provider.dart
Normal file
82
filcnaplo/lib/api/providers/news_provider.dart
Normal file
@@ -0,0 +1,82 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:filcnaplo/api/client.dart';
|
||||
import 'package:filcnaplo/models/news.dart';
|
||||
import 'package:filcnaplo/models/settings.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class NewsProvider extends ChangeNotifier {
|
||||
// Private
|
||||
late List<News> _news;
|
||||
late int _state;
|
||||
late int _fresh;
|
||||
bool show = false;
|
||||
late BuildContext _context;
|
||||
|
||||
// Public
|
||||
List<News> get news => _news;
|
||||
int get state => _fresh - 1;
|
||||
|
||||
NewsProvider({
|
||||
List<News> initialNews = const [],
|
||||
required BuildContext context,
|
||||
}) {
|
||||
_news = List.castFrom(initialNews);
|
||||
_context = context;
|
||||
}
|
||||
|
||||
Future<void> restore() async {
|
||||
// Load news state from the database
|
||||
var state_ = Provider.of<SettingsProvider>(_context, listen: false).newsState;
|
||||
|
||||
if (state_ == -1) {
|
||||
var news_ = await FilcAPI.getNews();
|
||||
if (news_ != null) {
|
||||
state_ = news_.length;
|
||||
_news = news_;
|
||||
}
|
||||
}
|
||||
|
||||
_state = state_;
|
||||
Provider.of<SettingsProvider>(_context, listen: false).update(_context, newsState: _state);
|
||||
}
|
||||
|
||||
Future<void> fetch() async {
|
||||
var news_ = await FilcAPI.getNews();
|
||||
if (news_ == null) return;
|
||||
|
||||
_news = news_;
|
||||
_fresh = news_.length - _state;
|
||||
|
||||
if (_fresh < 0) {
|
||||
_state = news_.length;
|
||||
Provider.of<SettingsProvider>(_context, listen: false).update(_context, newsState: _state);
|
||||
}
|
||||
|
||||
_fresh = max(_fresh, 0);
|
||||
|
||||
if (_fresh > 0) {
|
||||
show = true;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void lock() => show = false;
|
||||
|
||||
void release() {
|
||||
if (_fresh == 0) return;
|
||||
|
||||
_fresh--;
|
||||
_state++;
|
||||
|
||||
Provider.of<SettingsProvider>(_context, listen: false).update(_context, newsState: _state);
|
||||
|
||||
if (_fresh > 0)
|
||||
show = true;
|
||||
else
|
||||
show = false;
|
||||
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
41
filcnaplo/lib/api/providers/update_provider.dart
Normal file
41
filcnaplo/lib/api/providers/update_provider.dart
Normal file
@@ -0,0 +1,41 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:filcnaplo/api/client.dart';
|
||||
import 'package:filcnaplo/models/release.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
|
||||
class UpdateProvider extends ChangeNotifier {
|
||||
// Private
|
||||
late List<Release> _releases;
|
||||
late BuildContext _context;
|
||||
bool _available = false;
|
||||
bool get available => _available && _releases.length > 0;
|
||||
PackageInfo? _packageInfo;
|
||||
|
||||
// Public
|
||||
List<Release> get releases => _releases;
|
||||
|
||||
UpdateProvider({
|
||||
List<Release> initialReleases = const [],
|
||||
required BuildContext context,
|
||||
}) {
|
||||
_releases = List.castFrom(initialReleases);
|
||||
_context = context;
|
||||
PackageInfo.fromPlatform().then((value) => _packageInfo = value);
|
||||
}
|
||||
|
||||
Future<void> fetch() async {
|
||||
if (!Platform.isAndroid) return;
|
||||
|
||||
_releases = await FilcAPI.getReleases() ?? [];
|
||||
_releases.sort((a, b) => -a.version.compareTo(b.version));
|
||||
|
||||
// Check for new releases
|
||||
if (_releases.length > 0) {
|
||||
print("INFO: New update: ${releases.first.version}");
|
||||
_available = _packageInfo != null && _releases.first.version.compareTo(Version.fromString(_packageInfo?.version ?? "")) == 1;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
}
|
||||
41
filcnaplo/lib/api/providers/user_provider.dart
Normal file
41
filcnaplo/lib/api/providers/user_provider.dart
Normal file
@@ -0,0 +1,41 @@
|
||||
import 'package:filcnaplo/models/user.dart';
|
||||
import 'package:filcnaplo_kreta_api/models/student.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
class UserProvider with ChangeNotifier {
|
||||
Map<String, User> _users = {};
|
||||
String? _selectedUserId;
|
||||
User? get user => _users[_selectedUserId];
|
||||
|
||||
// _user properties
|
||||
String? get instituteCode => user?.instituteCode;
|
||||
String? get id => user?.id;
|
||||
String? get name => user?.name;
|
||||
String? get username => user?.username;
|
||||
String? get password => user?.password;
|
||||
Student? get student => user?.student;
|
||||
|
||||
void setUser(String userId) {
|
||||
_selectedUserId = userId;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void addUser(User user) {
|
||||
_users[user.id] = user;
|
||||
print("DEBUG: Added User: ${user.id} ${user.name}");
|
||||
}
|
||||
|
||||
void removeUser(String userId) {
|
||||
_users.removeWhere((key, value) => key == userId);
|
||||
if (_users.isNotEmpty) _selectedUserId = _users.keys.first;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
User getUser(String userId) {
|
||||
return _users[userId]!;
|
||||
}
|
||||
|
||||
List<User> getUsers() {
|
||||
return _users.values.toList();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user