modified getYearSearchResults service to handle more than one year + refactoring
This commit is contained in:
parent
6e30282051
commit
32190e1ea5
|
@ -5,7 +5,7 @@ class YearsData {
|
|||
YearsData._privateConstructor() {
|
||||
for (int year = 1970; year <= currentYear; year++) {
|
||||
yearsData.add(
|
||||
YearData(year.toString(), year, [
|
||||
YearData(year.toString(), [
|
||||
DateTime(year).microsecondsSinceEpoch,
|
||||
DateTime(year + 1).microsecondsSinceEpoch,
|
||||
]),
|
||||
|
@ -16,8 +16,7 @@ class YearsData {
|
|||
}
|
||||
|
||||
class YearData {
|
||||
final String yearInString;
|
||||
final int yearInInt;
|
||||
final String year;
|
||||
final List<int> duration;
|
||||
YearData(this.yearInString, this.yearInInt, this.duration);
|
||||
YearData(this.year, this.duration);
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ import 'package:photos/models/file.dart';
|
|||
import 'package:photos/models/search/search_results.dart';
|
||||
|
||||
class YearSearchResult extends SearchResult {
|
||||
final int year;
|
||||
final String year;
|
||||
final List<File> files;
|
||||
|
||||
YearSearchResult(this.year, this.files);
|
||||
|
|
|
@ -5,6 +5,7 @@ import 'package:photos/core/event_bus.dart';
|
|||
import 'package:photos/core/network.dart';
|
||||
import 'package:photos/data/holidays.dart';
|
||||
import 'package:photos/data/months.dart';
|
||||
import 'package:photos/data/years.dart';
|
||||
import 'package:photos/db/files_db.dart';
|
||||
import 'package:photos/events/local_photos_updated_event.dart';
|
||||
import 'package:photos/models/collection.dart';
|
||||
|
@ -146,24 +147,24 @@ class SearchService {
|
|||
return collectionSearchResults;
|
||||
}
|
||||
|
||||
Future<YearSearchResult> getYearSearchResults(int year) async {
|
||||
final yearInMicrosecondsSinceEpoch = DateTime(year).microsecondsSinceEpoch;
|
||||
|
||||
final nextYearInMicrosecondsSinceEpoch =
|
||||
DateTime(year + 1).microsecondsSinceEpoch;
|
||||
|
||||
final filesInYear = await FilesDB.instance.getFilesCreatedWithinDurations(
|
||||
[
|
||||
[yearInMicrosecondsSinceEpoch, nextYearInMicrosecondsSinceEpoch]
|
||||
],
|
||||
null,
|
||||
order: 'DESC',
|
||||
);
|
||||
if (filesInYear.isEmpty) {
|
||||
return null;
|
||||
} else {
|
||||
return YearSearchResult(year, filesInYear);
|
||||
Future<List<YearSearchResult>> getYearSearchResults(
|
||||
String year,
|
||||
) async {
|
||||
final List<YearSearchResult> yearSearchResults = [];
|
||||
for (var yearData in YearsData.instance.yearsData) {
|
||||
if (yearData.year.startsWith(year)) {
|
||||
List<File> filesInYear = await _getFilesInYear(yearData.duration);
|
||||
if (filesInYear.isNotEmpty) {
|
||||
yearSearchResults.add(
|
||||
YearSearchResult(
|
||||
yearData.year,
|
||||
filesInYear,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
return yearSearchResults;
|
||||
}
|
||||
|
||||
Future<List<HolidaySearchResult>> getHolidaySearchResults(
|
||||
|
@ -212,6 +213,14 @@ class SearchService {
|
|||
return monthSearchResults;
|
||||
}
|
||||
|
||||
Future<List<File>> _getFilesInYear(List<int> durationOfYear) async {
|
||||
return await FilesDB.instance.getFilesCreatedWithinDurations(
|
||||
[durationOfYear],
|
||||
null,
|
||||
order: "DESC",
|
||||
);
|
||||
}
|
||||
|
||||
List<List<int>> _getDurationsOfHolidayInEveryYear(int day, int month) {
|
||||
final List<List<int>> durationsOfHolidayInEveryYear = [];
|
||||
for (var year = 1970; year <= currentYear; year++) {
|
||||
|
|
|
@ -14,7 +14,7 @@ class YearSearchResultWidget extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final noOfMemories = yearSearchResult.files.length;
|
||||
final heroTagPrefix = _tagPrefix + yearSearchResult.year.toString();
|
||||
final heroTagPrefix = _tagPrefix + yearSearchResult.year;
|
||||
|
||||
return GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
|
@ -43,7 +43,7 @@ class YearSearchResultWidget extends StatelessWidget {
|
|||
),
|
||||
const SizedBox(height: 6),
|
||||
Text(
|
||||
yearSearchResult.year.toString(),
|
||||
yearSearchResult.year,
|
||||
style: const TextStyle(fontSize: 18),
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
|
|
|
@ -171,11 +171,9 @@ class _SearchWidgetState extends State<SearchWidget> {
|
|||
Completer completer,
|
||||
List<SearchResult> allResults,
|
||||
) async {
|
||||
final queryAsInt = int.tryParse(query);
|
||||
if (_isYearValid(queryAsInt)) {
|
||||
final yearResult =
|
||||
await _searchService.getYearSearchResults(queryAsInt, query);
|
||||
allResults.add(yearResult);
|
||||
if (_isYearValid(query)) {
|
||||
final yearResult = await _searchService.getYearSearchResults(query);
|
||||
allResults.addAll(yearResult);
|
||||
}
|
||||
|
||||
final holidayResults = await _searchService.getHolidaySearchResults(query);
|
||||
|
@ -195,7 +193,8 @@ class _SearchWidgetState extends State<SearchWidget> {
|
|||
completer.complete(allResults);
|
||||
}
|
||||
|
||||
bool _isYearValid(int year) {
|
||||
return year != null && year <= currentYear;
|
||||
bool _isYearValid(String year) {
|
||||
final yearAsInt = int.tryParse(year); //returns null if cannot be parsed
|
||||
return yearAsInt != null && yearAsInt <= currentYear;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue