fix restore ab afer pullAb (#7480)

* Opt ab name drop downdrop, more width

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages 2024-03-22 23:32:59 +08:00 committed by GitHub
parent 9558974080
commit 96c8d4de6a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 41 additions and 15 deletions

View File

@ -1,5 +1,6 @@
import 'dart:math';
import 'package:auto_size_text/auto_size_text.dart';
import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:dynamic_layouts/dynamic_layouts.dart';
import 'package:flutter/material.dart';
@ -84,7 +85,7 @@ class _AddressBookState extends State<AddressBook> {
border: Border.all(
color: Theme.of(context).colorScheme.background)),
child: Container(
width: 180,
width: 200,
height: double.infinity,
padding: const EdgeInsets.all(8.0),
child: Column(
@ -206,9 +207,12 @@ class _AddressBookState extends State<AddressBook> {
children: [
Expanded(
child: Tooltip(
message: e,
child: Text(gFFI.abModel.translatedName(e),
style: TextStyle(fontSize: 14))),
waitDuration: Duration(milliseconds: 500),
message: gFFI.abModel.translatedName(e),
child: AutoSizeText(
gFFI.abModel.translatedName(e),
maxFontSize: 14,
)),
),
],
)))

View File

@ -99,7 +99,6 @@ class AbModel {
if (!force && _allInitialized) return;
_allInitialized = false;
try {
final tmpAddressbooks = Map<String, BaseAb>.fromEntries([]).obs;
// Get personal address book guid
_personalAbGuid = null;
await _getPersonalAbGuid();
@ -113,21 +112,23 @@ class AbModel {
// get all address book name
await _getSharedAbProfiles(tmpAbProfiles);
abProfiles = tmpAbProfiles;
addressbooks.removeWhere((key, value) =>
abProfiles.firstWhereOrNull((e) => e.name == key) == null);
for (int i = 0; i < abProfiles.length; i++) {
AbProfile p = abProfiles[i];
tmpAddressbooks[p.name] = Ab(p, p.guid == _personalAbGuid);
if (addressbooks.containsKey(p.name)) {
addressbooks[p.name]?.setSharedProfile(p);
} else {
addressbooks[p.name] = Ab(p, p.guid == _personalAbGuid);
}
}
} else {
// only legacy address book
tmpAddressbooks[_legacyAddressBookName] = LegacyAb();
}
addressbooks
.removeWhere((key, value) => !tmpAddressbooks.containsKey(key));
tmpAddressbooks.forEach((key, value) {
if (!addressbooks.containsKey(key)) {
addressbooks[key] = value;
addressbooks.removeWhere((key, value) => key != _legacyAddressBookName);
if (!addressbooks.containsKey(_legacyAddressBookName)) {
addressbooks[_legacyAddressBookName] = LegacyAb();
}
});
}
// set current address book name
if (!_everPulledProfiles) {
_everPulledProfiles = true;
@ -756,6 +757,8 @@ abstract class BaseAb {
bool isFull();
void setSharedProfile(AbProfile profile);
AbProfile? sharedProfile();
bool canWrite();
@ -779,6 +782,9 @@ class LegacyAb extends BaseAb {
return null;
}
@override
void setSharedProfile(AbProfile? profile) {}
@override
bool canWrite() {
return true;
@ -1039,6 +1045,9 @@ class LegacyAb extends BaseAb {
if (!tagContainBy(e)) {
tags.add(e);
}
if (tagColors[e] == null) {
tagColors[e] = str2color2(e, existing: tagColors.values.toList()).value;
}
}
return await pushAb();
}
@ -1103,6 +1112,11 @@ class LegacyAb extends BaseAb {
Map<String, dynamic> _serialize() {
final peersJsonData =
peers.map((e) => e.toPersonalAbUploadJson(true)).toList();
for (var e in tags) {
if (tagColors[e] == null) {
tagColors[e] = str2color2(e, existing: tagColors.values.toList()).value;
}
}
final tagColorJsonData = jsonEncode(tagColors);
return {
"tags": tags,
@ -1147,7 +1161,7 @@ class LegacyAb extends BaseAb {
}
class Ab extends BaseAb {
late final AbProfile profile;
AbProfile profile;
late final bool personal;
final sortTags = shouldSortTags().obs;
final filterByIntersection = filterAbTagByIntersection().obs;
@ -1169,6 +1183,11 @@ class Ab extends BaseAb {
return profile;
}
@override
void setSharedProfile(AbProfile profile) {
this.profile = profile;
}
@override
bool isFull() {
return gFFI.abModel._maxPeerOneAb > 0 &&
@ -1692,6 +1711,9 @@ class DummyAb extends BaseAb {
return null;
}
@override
void setSharedProfile(AbProfile profile) {}
@override
Future<void> syncFromRecent(List<Peer> recents) async {}
}