import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart'; import 'package:nc_photos/string_extension.dart'; /// Details of a remote Nextcloud server account class Account with EquatableMixin { Account( this.scheme, String address, this.username, this.password, List roots, ) : this.address = address.trimRightAny("/"), _roots = roots.map((e) => e.trimRightAny("/")).toList() { if (scheme != "http" && scheme != "https") { throw FormatException("scheme is neither http or https"); } } Account copyWith({ String scheme, String address, String username, String password, List roots, }) { return Account( scheme ?? this.scheme, address ?? this.address, username ?? this.username, password ?? this.password, roots ?? _roots, ); } @override toString() { return "$runtimeType {" "scheme: '$scheme', " "address: '$address', " "username: '$username', " "password: '${password?.isNotEmpty == true ? (kDebugMode ? password : '***') : null}', " "roots: List {'${roots.join('\', \'')}'}, " "}"; } Account.fromJson(Map json) : scheme = json["scheme"], address = json["address"], username = json["username"], password = json["password"], _roots = json["roots"].cast(); Map toJson() => { "scheme": scheme, "address": address, "username": username, "password": password, "roots": _roots, }; @override List get props => [scheme, address, username, password, _roots]; List get roots => _roots; final String scheme; final String address; final String username; final String password; final List _roots; } extension AccountExtension on Account { String get url => "$scheme://$address"; }