Update to new face search API

This commit is contained in:
Vishnu Mohandas 2020-07-20 02:56:26 +05:30
parent d232780fc2
commit 7c75093b15
5 changed files with 19 additions and 14 deletions

View file

@ -114,13 +114,14 @@ class FileDB {
return _convertToFiles(results);
}
Future<List<File>> getAllInFolder(int folderId, int offset, int limit) async {
Future<List<File>> getAllInFolder(
int folderId, int sinceUpdationTime, int limit) async {
final db = await instance.database;
final results = await db.query(
table,
where:
'$columnRemoteFolderId = ? AND $columnIsDeleted = 0 OFFSET ? LIMIT ?',
whereArgs: [folderId, offset, limit],
'$columnRemoteFolderId = ? AND $columnIsDeleted = 0 AND $columnUpdationTime > ? LIMIT ?',
whereArgs: [folderId, sinceUpdationTime, limit],
orderBy: '$columnCreationTime DESC',
);
return _convertToFiles(results);

View file

@ -29,7 +29,7 @@ class FaceSearchManager {
}
Future<List<File>> getFaceSearchResults(
Face face, int offset, int limit) async {
Face face, int sinceTime, int limit) async {
final result = await _dio
.get(
Configuration.instance.getHttpEndpoint() +
@ -37,7 +37,7 @@ class FaceSearchManager {
face.faceID.toString(),
queryParameters: {
"limit": limit,
"offset": offset,
"sinceTime": sinceTime,
},
options:
Options(headers: {"X-Auth-Token": Configuration.instance.getToken()}),

View file

@ -15,8 +15,9 @@ class FaceSearchResultsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
var gallery = Gallery(
asyncLoader: (offset, limit) =>
_faceSearchManager.getFaceSearchResults(face, offset, limit),
asyncLoader: (sinceFile, limit) =>
_faceSearchManager.getFaceSearchResults(
face, sinceFile == null ? 0 : sinceFile.updationTime, limit),
tagPrefix: "face_search_results",
selectedFiles: selectedFiles,
);

View file

@ -16,7 +16,7 @@ import 'package:pull_to_refresh/pull_to_refresh.dart';
class Gallery extends StatefulWidget {
final List<File> Function() syncLoader;
final Future<List<File>> Function(int offset, int limit) asyncLoader;
final Future<List<File>> Function(File file, int limit) asyncLoader;
// TODO: Verify why the event is necessary when calling loader post onRefresh
// should have done the job.
final Stream<Event> reloadEvent;
@ -82,7 +82,7 @@ class _GalleryState extends State<Gallery> {
return _onDataLoaded();
}
return FutureBuilder<List<File>>(
future: widget.asyncLoader(0, kLoadLimit),
future: widget.asyncLoader(null, kLoadLimit),
builder: (context, snapshot) {
if (snapshot.hasData) {
_requiresLoad = false;
@ -160,14 +160,15 @@ class _GalleryState extends State<Gallery> {
void _loadNextItems() {
_isLoadingNext = true;
widget.asyncLoader(_files.length, 100).then((files) {
widget.asyncLoader(_files[_files.length - 1], kLoadLimit).then((files) {
setState(() {
_isLoadingNext = false;
_saveScrollPosition();
if (files.length == 0) {
if (files.length < kLoadLimit) {
_hasLoadedAll = true;
} else {
_files.addAll(files);
}
_files.addAll(files);
});
});
}

View file

@ -21,8 +21,10 @@ class _RemoteFolderPageState extends State<RemoteFolderPage> {
@override
Widget build(Object context) {
var gallery = Gallery(
asyncLoader: (offset, limit) =>
FileDB.instance.getAllInFolder(widget.folder.id, offset, limit),
asyncLoader: (sinceFile, limit) => FileDB.instance.getAllInFolder(
widget.folder.id,
sinceFile == null ? 0 : sinceFile.updationTime,
limit),
onRefresh: () => FolderSharingService.instance.syncDiff(widget.folder),
tagPrefix: "remote_folder",
selectedFiles: _selectedFiles,