Update API response parameter names
This commit is contained in:
parent
80655c61d9
commit
46d173ada6
|
@ -13,7 +13,7 @@ class DatabaseHelper {
|
||||||
|
|
||||||
static final columnLocalPath = 'local_path';
|
static final columnLocalPath = 'local_path';
|
||||||
static final columnThumbnailPath = 'thumbnail_path';
|
static final columnThumbnailPath = 'thumbnail_path';
|
||||||
static final columnUrl = 'url';
|
static final columnPath = 'path';
|
||||||
static final columnHash = 'hash';
|
static final columnHash = 'hash';
|
||||||
static final columnSyncTimestamp = 'sync_timestamp';
|
static final columnSyncTimestamp = 'sync_timestamp';
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ class DatabaseHelper {
|
||||||
CREATE TABLE $table (
|
CREATE TABLE $table (
|
||||||
$columnLocalPath TEXT NOT NULL,
|
$columnLocalPath TEXT NOT NULL,
|
||||||
$columnThumbnailPath TEXT NOT NULL,
|
$columnThumbnailPath TEXT NOT NULL,
|
||||||
$columnUrl TEXT,
|
$columnPath TEXT,
|
||||||
$columnHash TEXT NOT NULL,
|
$columnHash TEXT NOT NULL,
|
||||||
$columnSyncTimestamp TEXT
|
$columnSyncTimestamp TEXT
|
||||||
)
|
)
|
||||||
|
@ -79,25 +79,26 @@ class DatabaseHelper {
|
||||||
|
|
||||||
Future<List<Photo>> getPhotosToBeUploaded() async {
|
Future<List<Photo>> getPhotosToBeUploaded() async {
|
||||||
Database db = await instance.database;
|
Database db = await instance.database;
|
||||||
var results = await db.query(table, where: '$columnUrl IS NULL');
|
var results = await db.query(table, where: '$columnPath IS NULL');
|
||||||
return _convertToPhotos(results);
|
return _convertToPhotos(results);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We are assuming here that the hash column in the map is set. The other
|
// We are assuming here that the hash column in the map is set. The other
|
||||||
// column values will be used to update the row.
|
// column values will be used to update the row.
|
||||||
Future<int> updateUrlAndTimestamp(
|
Future<int> updatePathAndTimestamp(
|
||||||
String hash, String url, String timestamp) async {
|
String hash, String path, String timestamp) async {
|
||||||
Database db = await instance.database;
|
Database db = await instance.database;
|
||||||
var row = new Map<String, dynamic>();
|
var row = new Map<String, dynamic>();
|
||||||
row[columnUrl] = url;
|
row[columnPath] = path;
|
||||||
row[columnSyncTimestamp] = timestamp;
|
row[columnSyncTimestamp] = timestamp;
|
||||||
return await db
|
return await db
|
||||||
.update(table, row, where: '$columnHash = ?', whereArgs: [hash]);
|
.update(table, row, where: '$columnHash = ?', whereArgs: [hash]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Photo> getPhotoByUrl(String url) async {
|
Future<Photo> getPhotoByPath(String path) async {
|
||||||
Database db = await instance.database;
|
Database db = await instance.database;
|
||||||
var rows = await db.query(table, where: '$columnUrl =?', whereArgs: [url]);
|
var rows =
|
||||||
|
await db.query(table, where: '$columnPath =?', whereArgs: [path]);
|
||||||
if (rows.length > 0) {
|
if (rows.length > 0) {
|
||||||
return Photo.fromRow(rows[0]);
|
return Photo.fromRow(rows[0]);
|
||||||
} else {
|
} else {
|
||||||
|
@ -124,7 +125,7 @@ class DatabaseHelper {
|
||||||
var row = new Map<String, dynamic>();
|
var row = new Map<String, dynamic>();
|
||||||
row[columnLocalPath] = photo.localPath;
|
row[columnLocalPath] = photo.localPath;
|
||||||
row[columnThumbnailPath] = photo.thumbnailPath;
|
row[columnThumbnailPath] = photo.thumbnailPath;
|
||||||
row[columnUrl] = photo.url;
|
row[columnPath] = photo.path;
|
||||||
row[columnHash] = photo.hash;
|
row[columnHash] = photo.hash;
|
||||||
row[columnSyncTimestamp] = photo.syncTimestamp;
|
row[columnSyncTimestamp] = photo.syncTimestamp;
|
||||||
return row;
|
return row;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
class Face {
|
class Face {
|
||||||
final int faceID;
|
final int faceID;
|
||||||
final String thumbnailURL;
|
final String thumbnailPath;
|
||||||
|
|
||||||
Face.fromJson(Map<String, dynamic> json)
|
Face.fromJson(Map<String, dynamic> json)
|
||||||
: faceID = json["faceID"],
|
: faceID = json["faceID"],
|
||||||
thumbnailURL = json["thumbnailURL"];
|
thumbnailPath = json["thumbnailPath"];
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:photo_manager/photo_manager.dart';
|
import 'package:photo_manager/photo_manager.dart';
|
||||||
|
|
||||||
class Photo {
|
class Photo {
|
||||||
String url;
|
String path;
|
||||||
String localPath;
|
String localPath;
|
||||||
String thumbnailPath;
|
String thumbnailPath;
|
||||||
String hash;
|
String hash;
|
||||||
|
@ -16,14 +16,14 @@ class Photo {
|
||||||
Photo();
|
Photo();
|
||||||
|
|
||||||
Photo.fromJson(Map<String, dynamic> json)
|
Photo.fromJson(Map<String, dynamic> json)
|
||||||
: url = json["url"],
|
: path = json["path"],
|
||||||
hash = json["hash"],
|
hash = json["hash"],
|
||||||
syncTimestamp = json["syncTimestamp"];
|
syncTimestamp = json["syncTimestamp"];
|
||||||
|
|
||||||
Photo.fromRow(Map<String, dynamic> row)
|
Photo.fromRow(Map<String, dynamic> row)
|
||||||
: localPath = row["local_path"],
|
: localPath = row["local_path"],
|
||||||
thumbnailPath = row["thumbnail_path"],
|
thumbnailPath = row["thumbnail_path"],
|
||||||
url = row["url"],
|
path = row["path"],
|
||||||
hash = row["hash"],
|
hash = row["hash"],
|
||||||
syncTimestamp = row["sync_timestamp"] == null
|
syncTimestamp = row["sync_timestamp"] == null
|
||||||
? -1
|
? -1
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
class SearchResult {
|
class SearchResult {
|
||||||
final String url;
|
final String path;
|
||||||
|
|
||||||
SearchResult(this.url);
|
SearchResult(this.path);
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,8 +93,8 @@ class PhotoSyncManager {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var uploadedPhoto = await _uploadFile(photo.localPath, photo.hash);
|
var uploadedPhoto = await _uploadFile(photo.localPath, photo.hash);
|
||||||
await DatabaseHelper.instance.updateUrlAndTimestamp(photo.hash,
|
await DatabaseHelper.instance.updatePathAndTimestamp(photo.hash,
|
||||||
uploadedPhoto.url, uploadedPhoto.syncTimestamp.toString());
|
uploadedPhoto.path, uploadedPhoto.syncTimestamp.toString());
|
||||||
prefs.setInt(_lastSyncTimestampKey, uploadedPhoto.syncTimestamp);
|
prefs.setInt(_lastSyncTimestampKey, uploadedPhoto.syncTimestamp);
|
||||||
uploadedCount++;
|
uploadedCount++;
|
||||||
}
|
}
|
||||||
|
@ -106,13 +106,13 @@ class PhotoSyncManager {
|
||||||
var path = externalPath + "/photos/";
|
var path = externalPath + "/photos/";
|
||||||
for (Photo photo in diff) {
|
for (Photo photo in diff) {
|
||||||
if (await DatabaseHelper.instance.containsPhotoHash(photo.hash)) {
|
if (await DatabaseHelper.instance.containsPhotoHash(photo.hash)) {
|
||||||
await DatabaseHelper.instance.updateUrlAndTimestamp(
|
await DatabaseHelper.instance.updatePathAndTimestamp(
|
||||||
photo.hash, photo.url, photo.syncTimestamp.toString());
|
photo.hash, photo.path, photo.syncTimestamp.toString());
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
var localPath = path + basename(photo.url);
|
var localPath = path + basename(photo.path);
|
||||||
await _dio
|
await _dio
|
||||||
.download(Constants.ENDPOINT + photo.url, localPath)
|
.download(Constants.ENDPOINT + "/" + photo.path, localPath)
|
||||||
.catchError(_onError);
|
.catchError(_onError);
|
||||||
photo.localPath = localPath;
|
photo.localPath = localPath;
|
||||||
await Photo.setThumbnail(photo);
|
await Photo.setThumbnail(photo);
|
||||||
|
|
|
@ -28,7 +28,7 @@ class FaceSearchResultsPage extends StatelessWidget {
|
||||||
Hero(
|
Hero(
|
||||||
tag: "face_" + _face.faceID.toString(),
|
tag: "face_" + _face.faceID.toString(),
|
||||||
child: CircularNetworkImageWidget(
|
child: CircularNetworkImageWidget(
|
||||||
Constants.ENDPOINT + _face.thumbnailURL, 20),
|
Constants.ENDPOINT + _face.thumbnailPath, 20),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -45,7 +45,7 @@ class FaceSearchResultsPage extends StatelessWidget {
|
||||||
if (snapshot.hasData) {
|
if (snapshot.hasData) {
|
||||||
return GridView.builder(
|
return GridView.builder(
|
||||||
itemBuilder: (_, index) =>
|
itemBuilder: (_, index) =>
|
||||||
_buildItem(context, snapshot.data[index].url),
|
_buildItem(context, snapshot.data[index].path),
|
||||||
itemCount: snapshot.data.length,
|
itemCount: snapshot.data.length,
|
||||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||||
crossAxisCount: 4,
|
crossAxisCount: 4,
|
||||||
|
@ -57,25 +57,25 @@ class FaceSearchResultsPage extends StatelessWidget {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildItem(BuildContext context, String url) {
|
Widget _buildItem(BuildContext context, String path) {
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
_routeToDetailPage(url, context);
|
_routeToDetailPage(path, context);
|
||||||
},
|
},
|
||||||
child: _getImage(url),
|
child: _getImage(path),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _getImage(String url) {
|
Widget _getImage(String path) {
|
||||||
return FutureBuilder<Photo>(
|
return FutureBuilder<Photo>(
|
||||||
future: DatabaseHelper.instance.getPhotoByUrl(url),
|
future: DatabaseHelper.instance.getPhotoByPath(path),
|
||||||
builder: (_, snapshot) {
|
builder: (_, snapshot) {
|
||||||
if (snapshot.hasData) {
|
if (snapshot.hasData) {
|
||||||
return ImageWidget(path: snapshot.data.thumbnailPath);
|
return ImageWidget(path: snapshot.data.thumbnailPath);
|
||||||
} else if (snapshot.hasError) {
|
} else if (snapshot.hasError) {
|
||||||
return Container(
|
return Container(
|
||||||
margin: EdgeInsets.all(2),
|
margin: EdgeInsets.all(2),
|
||||||
child: Image.network(Constants.ENDPOINT + url,
|
child: Image.network(Constants.ENDPOINT + "/" + path,
|
||||||
height: 124, width: 124, fit: BoxFit.cover),
|
height: 124, width: 124, fit: BoxFit.cover),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
@ -85,9 +85,9 @@ class FaceSearchResultsPage extends StatelessWidget {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _routeToDetailPage(String url, BuildContext context) async {
|
void _routeToDetailPage(String path, BuildContext context) async {
|
||||||
Widget page = NetworkImageDetailPage(url);
|
Widget page = NetworkImageDetailPage(path);
|
||||||
var photo = await DatabaseHelper.instance.getPhotoByUrl(url);
|
var photo = await DatabaseHelper.instance.getPhotoByPath(path);
|
||||||
if (photo != null) {
|
if (photo != null) {
|
||||||
page = DetailPage(photo);
|
page = DetailPage(photo);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:myapp/core/constants.dart' as Constants;
|
||||||
|
|
||||||
class NetworkImageDetailPage extends StatelessWidget {
|
class NetworkImageDetailPage extends StatelessWidget {
|
||||||
final String _url;
|
final String _path;
|
||||||
|
|
||||||
const NetworkImageDetailPage(this._url, {Key key}) : super(key: key);
|
const NetworkImageDetailPage(this._path, {Key key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(Object context) {
|
Widget build(Object context) {
|
||||||
|
@ -32,7 +33,7 @@ class NetworkImageDetailPage extends StatelessWidget {
|
||||||
onVerticalDragUpdate: (details) {
|
onVerticalDragUpdate: (details) {
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
},
|
},
|
||||||
child: Image.network(_url),
|
child: Image.network(Constants.ENDPOINT + "/" + _path),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ class SearchPage extends StatelessWidget {
|
||||||
child: Hero(
|
child: Hero(
|
||||||
tag: "face_" + face.faceID.toString(),
|
tag: "face_" + face.faceID.toString(),
|
||||||
child: CircularNetworkImageWidget(
|
child: CircularNetworkImageWidget(
|
||||||
Constants.ENDPOINT + face.thumbnailURL, 60),
|
Constants.ENDPOINT + "/" + face.thumbnailPath, 60),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue