import 'package:drift/drift.dart'; import '../database.dart'; part 'sources_dao.g.dart'; @DriftAccessor(include: {'../tables.drift'}) class SourcesDao extends DatabaseAccessor with _$SourcesDaoMixin { SourcesDao(super.db); Selectable activeSourceId() { return (selectOnly(sources) ..addColumns([sources.id]) ..where(sources.isActive.equals(true))) .map((row) => row.read(sources.id)); } Stream> listSources() { final query = select(sources).join([ innerJoin( subsonicSettings, sources.id.equalsExp(subsonicSettings.sourceId), ), ]); return query.watch().map( (rows) => rows .map( (row) => ( row.readTable(sources), row.readTable(subsonicSettings), ), ) .toList(), ); } Future setActiveSource(int id) async { await transaction(() async { await db.managers.sources.update((o) => o(isActive: Value(null))); await db.managers.sources .filter((f) => f.id.equals(id)) .update((o) => o(isActive: Value(true))); }); } }