modified getYearSearchResults service to handle more than one year + refactoring

This commit is contained in:
ashilkn 2022-08-22 10:48:28 +05:30
parent 6e30282051
commit 32190e1ea5
5 changed files with 38 additions and 31 deletions

View file

@ -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);
}

View file

@ -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);

View file

@ -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++) {

View file

@ -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,
),

View file

@ -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;
}
}