mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-02-02 06:46:22 +01:00
Sort places by count instead of time
This commit is contained in:
parent
ac6b3586d3
commit
075d208fff
3 changed files with 24 additions and 22 deletions
|
@ -8,19 +8,19 @@ import 'package:nc_photos/location_util.dart' as location_util;
|
||||||
|
|
||||||
class LocationGroup {
|
class LocationGroup {
|
||||||
const LocationGroup(
|
const LocationGroup(
|
||||||
this.place, this.countryCode, this.latest, this.latestFileId);
|
this.place, this.countryCode, this.count, this.latestFileId);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
toString() => "$runtimeType {"
|
toString() => "$runtimeType {"
|
||||||
"place: $place, "
|
"place: $place, "
|
||||||
"countryCode: $countryCode, "
|
"countryCode: $countryCode, "
|
||||||
"latest: $latest, "
|
"count: $count, "
|
||||||
"latestFileId: $latestFileId, "
|
"latestFileId: $latestFileId, "
|
||||||
"}";
|
"}";
|
||||||
|
|
||||||
final String place;
|
final String place;
|
||||||
final String countryCode;
|
final String countryCode;
|
||||||
final DateTime latest;
|
final int count;
|
||||||
final int latestFileId;
|
final int latestFileId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,14 +60,15 @@ class ListLocationGroup {
|
||||||
final countryCodeResult = <LocationGroup>[];
|
final countryCodeResult = <LocationGroup>[];
|
||||||
for (final r in account.roots) {
|
for (final r in account.roots) {
|
||||||
final latest = db.accountFiles.bestDateTime.max();
|
final latest = db.accountFiles.bestDateTime.max();
|
||||||
final nameQ =
|
final count = db.imageLocations.rowId.count();
|
||||||
_buildQuery(db, dbAccount, r, latest, db.imageLocations.name);
|
final nameQ = _buildQuery(
|
||||||
|
db, dbAccount, r, latest, count, db.imageLocations.name);
|
||||||
try {
|
try {
|
||||||
nameResult.addAll(await nameQ
|
nameResult.addAll(await nameQ
|
||||||
.map((r) => LocationGroup(
|
.map((r) => LocationGroup(
|
||||||
r.read(db.imageLocations.name)!,
|
r.read(db.imageLocations.name)!,
|
||||||
r.read(db.imageLocations.countryCode)!,
|
r.read(db.imageLocations.countryCode)!,
|
||||||
r.read(latest),
|
r.read(count),
|
||||||
r.read(db.files.fileId)!,
|
r.read(db.files.fileId)!,
|
||||||
))
|
))
|
||||||
.get());
|
.get());
|
||||||
|
@ -75,14 +76,14 @@ class ListLocationGroup {
|
||||||
_log.shout("[call] Failed while query name group", e, stackTrace);
|
_log.shout("[call] Failed while query name group", e, stackTrace);
|
||||||
}
|
}
|
||||||
|
|
||||||
final admin1Q =
|
final admin1Q = _buildQuery(
|
||||||
_buildQuery(db, dbAccount, r, latest, db.imageLocations.admin1);
|
db, dbAccount, r, latest, count, db.imageLocations.admin1);
|
||||||
try {
|
try {
|
||||||
admin1Result.addAll(await admin1Q
|
admin1Result.addAll(await admin1Q
|
||||||
.map((r) => LocationGroup(
|
.map((r) => LocationGroup(
|
||||||
r.read(db.imageLocations.admin1)!,
|
r.read(db.imageLocations.admin1)!,
|
||||||
r.read(db.imageLocations.countryCode)!,
|
r.read(db.imageLocations.countryCode)!,
|
||||||
r.read(latest),
|
r.read(count),
|
||||||
r.read(db.files.fileId)!,
|
r.read(db.files.fileId)!,
|
||||||
))
|
))
|
||||||
.get());
|
.get());
|
||||||
|
@ -90,14 +91,14 @@ class ListLocationGroup {
|
||||||
_log.shout("[call] Failed while query admin1 group", e, stackTrace);
|
_log.shout("[call] Failed while query admin1 group", e, stackTrace);
|
||||||
}
|
}
|
||||||
|
|
||||||
final admin2Q =
|
final admin2Q = _buildQuery(
|
||||||
_buildQuery(db, dbAccount, r, latest, db.imageLocations.admin2);
|
db, dbAccount, r, latest, count, db.imageLocations.admin2);
|
||||||
try {
|
try {
|
||||||
admin2Result.addAll(await admin2Q
|
admin2Result.addAll(await admin2Q
|
||||||
.map((r) => LocationGroup(
|
.map((r) => LocationGroup(
|
||||||
r.read(db.imageLocations.admin2)!,
|
r.read(db.imageLocations.admin2)!,
|
||||||
r.read(db.imageLocations.countryCode)!,
|
r.read(db.imageLocations.countryCode)!,
|
||||||
r.read(latest),
|
r.read(count),
|
||||||
r.read(db.files.fileId)!,
|
r.read(db.files.fileId)!,
|
||||||
))
|
))
|
||||||
.get());
|
.get());
|
||||||
|
@ -106,12 +107,12 @@ class ListLocationGroup {
|
||||||
}
|
}
|
||||||
|
|
||||||
final countryCodeQ = _buildQuery(
|
final countryCodeQ = _buildQuery(
|
||||||
db, dbAccount, r, latest, db.imageLocations.countryCode);
|
db, dbAccount, r, latest, count, db.imageLocations.countryCode);
|
||||||
try {
|
try {
|
||||||
countryCodeResult.addAll(await countryCodeQ.map((r) {
|
countryCodeResult.addAll(await countryCodeQ.map((r) {
|
||||||
final cc = r.read(db.imageLocations.countryCode)!;
|
final cc = r.read(db.imageLocations.countryCode)!;
|
||||||
return LocationGroup(location_util.alpha2CodeToName(cc) ?? cc, cc,
|
return LocationGroup(location_util.alpha2CodeToName(cc) ?? cc, cc,
|
||||||
r.read(latest), r.read(db.files.fileId)!);
|
r.read(count), r.read(db.files.fileId)!);
|
||||||
}).get());
|
}).get());
|
||||||
} catch (e, stackTrace) {
|
} catch (e, stackTrace) {
|
||||||
_log.shout(
|
_log.shout(
|
||||||
|
@ -131,6 +132,7 @@ class ListLocationGroup {
|
||||||
sql.Account dbAccount,
|
sql.Account dbAccount,
|
||||||
String dir,
|
String dir,
|
||||||
sql.Expression<DateTime> latest,
|
sql.Expression<DateTime> latest,
|
||||||
|
sql.Expression<int> count,
|
||||||
sql.GeneratedColumn<String?> groupColumn,
|
sql.GeneratedColumn<String?> groupColumn,
|
||||||
) {
|
) {
|
||||||
final query = db.selectOnly(db.imageLocations).join([
|
final query = db.selectOnly(db.imageLocations).join([
|
||||||
|
@ -142,7 +144,7 @@ class ListLocationGroup {
|
||||||
]);
|
]);
|
||||||
if (identical(groupColumn, db.imageLocations.countryCode)) {
|
if (identical(groupColumn, db.imageLocations.countryCode)) {
|
||||||
query
|
query
|
||||||
..addColumns([db.imageLocations.countryCode, latest, db.files.fileId])
|
..addColumns([db.imageLocations.countryCode, count, db.files.fileId])
|
||||||
..groupBy([db.imageLocations.countryCode],
|
..groupBy([db.imageLocations.countryCode],
|
||||||
having: db.accountFiles.bestDateTime.equalsExp(latest));
|
having: db.accountFiles.bestDateTime.equalsExp(latest));
|
||||||
} else {
|
} else {
|
||||||
|
@ -150,7 +152,7 @@ class ListLocationGroup {
|
||||||
..addColumns([
|
..addColumns([
|
||||||
groupColumn,
|
groupColumn,
|
||||||
db.imageLocations.countryCode,
|
db.imageLocations.countryCode,
|
||||||
latest,
|
count,
|
||||||
db.files.fileId
|
db.files.fileId
|
||||||
])
|
])
|
||||||
..groupBy([groupColumn, db.imageLocations.countryCode],
|
..groupBy([groupColumn, db.imageLocations.countryCode],
|
||||||
|
|
|
@ -191,11 +191,11 @@ class _PlacesBrowserState extends State<PlacesBrowser> {
|
||||||
}
|
}
|
||||||
|
|
||||||
int sorter(LocationGroup a, LocationGroup b) {
|
int sorter(LocationGroup a, LocationGroup b) {
|
||||||
final latestCompare = b.latest.compareTo(a.latest);
|
final compare = b.count.compareTo(a.count);
|
||||||
if (latestCompare == 0) {
|
if (compare == 0) {
|
||||||
return a.place.compareTo(b.place);
|
return a.place.compareTo(b.place);
|
||||||
} else {
|
} else {
|
||||||
return latestCompare;
|
return compare;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -269,11 +269,11 @@ class _SearchLandingState extends State<SearchLanding> {
|
||||||
void _transformLocations(LocationGroupResult locations) {
|
void _transformLocations(LocationGroupResult locations) {
|
||||||
_locationItems = locations.name
|
_locationItems = locations.name
|
||||||
.sorted((a, b) {
|
.sorted((a, b) {
|
||||||
final latestCompare = b.latest.compareTo(a.latest);
|
final compare = b.count.compareTo(a.count);
|
||||||
if (latestCompare == 0) {
|
if (compare == 0) {
|
||||||
return a.place.compareTo(b.place);
|
return a.place.compareTo(b.place);
|
||||||
} else {
|
} else {
|
||||||
return latestCompare;
|
return compare;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.map((e) => _LandingLocationItem(
|
.map((e) => _LandingLocationItem(
|
||||||
|
|
Loading…
Reference in a new issue