Merge pull request #818 from ente-io/fix_potential_null_check_failure
Improve logging and add null checks at missing places
This commit is contained in:
commit
0bbe467750
|
@ -49,6 +49,13 @@ class Collection {
|
|||
return mMdVersion > 0 && magicMetadata.visibility == visibilityArchive;
|
||||
}
|
||||
|
||||
// hasLink returns true if there's any link attached to the collection
|
||||
// including expired links
|
||||
bool get hasLink => publicURLs != null && publicURLs!.isNotEmpty;
|
||||
|
||||
// hasSharees returns true if the collection is shared with other ente users
|
||||
bool get hasSharees => sharees != null && sharees!.isNotEmpty;
|
||||
|
||||
bool isHidden() {
|
||||
if (isDefaultHidden()) {
|
||||
return true;
|
||||
|
|
|
@ -374,8 +374,17 @@ class _CreateCollectionSheetState extends State<CreateCollectionSheet> {
|
|||
);
|
||||
} else {
|
||||
for (final file in widget.selectedFiles!.files) {
|
||||
final File? currentFile =
|
||||
await (FilesDB.instance.getFile(file.generatedID!));
|
||||
File? currentFile;
|
||||
if (file.uploadedFileID != null) {
|
||||
currentFile = file;
|
||||
} else if (file.generatedID != null) {
|
||||
// when file is not uploaded, refresh the state from the db to
|
||||
// ensure we have latest upload status for given file before
|
||||
// queueing it up as pending upload
|
||||
currentFile = await (FilesDB.instance.getFile(file.generatedID!));
|
||||
} else if (file.generatedID == null) {
|
||||
_logger.severe("generated id should not be null");
|
||||
}
|
||||
if (currentFile == null) {
|
||||
_logger.severe("Failed to find fileBy genID");
|
||||
continue;
|
||||
|
|
|
@ -11,6 +11,7 @@ import 'package:photos/events/collection_updated_event.dart';
|
|||
import 'package:photos/events/local_photos_updated_event.dart';
|
||||
import 'package:photos/events/tab_changed_event.dart';
|
||||
import 'package:photos/events/user_logged_out_event.dart';
|
||||
import 'package:photos/models/collection.dart';
|
||||
import 'package:photos/models/collection_items.dart';
|
||||
import 'package:photos/models/gallery_type.dart';
|
||||
import 'package:photos/services/collections_service.dart';
|
||||
|
@ -69,12 +70,22 @@ class _SharedCollectionGalleryState extends State<SharedCollectionGallery>
|
|||
final List<CollectionWithThumbnail> outgoing = [];
|
||||
final List<CollectionWithThumbnail> incoming = [];
|
||||
for (final file in files) {
|
||||
final c = CollectionsService.instance
|
||||
.getCollectionByID(file.collectionID!)!;
|
||||
if (file.collectionID == null) {
|
||||
_logger.severe("collection id should not be null");
|
||||
continue;
|
||||
}
|
||||
final Collection? c =
|
||||
CollectionsService.instance.getCollectionByID(file.collectionID!);
|
||||
if (c == null) {
|
||||
_logger
|
||||
.severe("shared collection is not cached ${file.collectionID}");
|
||||
CollectionsService.instance
|
||||
.fetchCollectionByID(file.collectionID!)
|
||||
.ignore();
|
||||
continue;
|
||||
}
|
||||
if (c.owner!.id == Configuration.instance.getUserID()) {
|
||||
if (c.sharees!.isNotEmpty ||
|
||||
c.publicURLs!.isNotEmpty ||
|
||||
c.isSharedFilesCollection()) {
|
||||
if (c.hasSharees || c.hasLink || c.isSharedFilesCollection()) {
|
||||
outgoing.add(
|
||||
CollectionWithThumbnail(
|
||||
c,
|
||||
|
@ -113,8 +124,12 @@ class _SharedCollectionGalleryState extends State<SharedCollectionGallery>
|
|||
if (snapshot.hasData) {
|
||||
return _getSharedCollectionsGallery(snapshot.data!);
|
||||
} else if (snapshot.hasError) {
|
||||
_logger.shout(snapshot.error);
|
||||
return Center(child: Text(snapshot.error.toString()));
|
||||
_logger.severe(
|
||||
"critical: failed to load share gallery",
|
||||
snapshot.error,
|
||||
snapshot.stackTrace,
|
||||
);
|
||||
return const Center(child: Text("Something went wrong."));
|
||||
} else {
|
||||
return const EnteLoadingWidget();
|
||||
}
|
||||
|
@ -268,27 +283,29 @@ class OutgoingCollectionItem extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final sharees = <String?>[];
|
||||
for (int index = 0; index < c.collection.sharees!.length; index++) {
|
||||
final sharee = c.collection.sharees![index]!;
|
||||
final name =
|
||||
(sharee.name?.isNotEmpty ?? false) ? sharee.name : sharee.email;
|
||||
if (index < 2) {
|
||||
sharees.add(name);
|
||||
} else {
|
||||
final remaining = c.collection.sharees!.length - index;
|
||||
if (remaining == 1) {
|
||||
// If it's the last sharee
|
||||
sharees.add(name);
|
||||
final shareesName = <String>[];
|
||||
if (c.collection.hasSharees) {
|
||||
for (int index = 0; index < c.collection.sharees!.length; index++) {
|
||||
final sharee = c.collection.sharees![index]!;
|
||||
final String name =
|
||||
(sharee.name?.isNotEmpty ?? false) ? sharee.name! : sharee.email;
|
||||
if (index < 2) {
|
||||
shareesName.add(name);
|
||||
} else {
|
||||
sharees.add(
|
||||
"and " +
|
||||
remaining.toString() +
|
||||
" other" +
|
||||
(remaining > 1 ? "s" : ""),
|
||||
);
|
||||
final remaining = c.collection.sharees!.length - index;
|
||||
if (remaining == 1) {
|
||||
// If it's the last sharee
|
||||
shareesName.add(name);
|
||||
} else {
|
||||
shareesName.add(
|
||||
"and " +
|
||||
remaining.toString() +
|
||||
" other" +
|
||||
(remaining > 1 ? "s" : ""),
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return GestureDetector(
|
||||
|
@ -325,22 +342,22 @@ class OutgoingCollectionItem extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
const Padding(padding: EdgeInsets.all(2)),
|
||||
c.collection.publicURLs!.isEmpty
|
||||
? Container()
|
||||
: (c.collection.publicURLs!.first!.isExpired
|
||||
c.collection.hasLink
|
||||
? (c.collection.publicURLs!.first!.isExpired
|
||||
? const Icon(
|
||||
Icons.link,
|
||||
color: warning500,
|
||||
)
|
||||
: const Icon(Icons.link)),
|
||||
: const Icon(Icons.link))
|
||||
: Container(),
|
||||
],
|
||||
),
|
||||
sharees.isEmpty
|
||||
shareesName.isEmpty
|
||||
? Container()
|
||||
: Padding(
|
||||
padding: const EdgeInsets.fromLTRB(0, 4, 0, 0),
|
||||
child: Text(
|
||||
"Shared with " + sharees.join(", "),
|
||||
"Shared with " + shareesName.join(", "),
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Theme.of(context).primaryColorLight,
|
||||
|
|
|
@ -46,7 +46,7 @@ class _ShareCollectionPageState extends State<ShareCollectionPage> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
_sharees = widget.collection.sharees ?? [];
|
||||
final bool hasUrl = widget.collection.publicURLs?.isNotEmpty ?? false;
|
||||
final bool hasUrl = widget.collection.hasLink;
|
||||
final children = <Widget>[];
|
||||
children.add(
|
||||
MenuSectionTitle(
|
||||
|
|
|
@ -12,7 +12,7 @@ description: ente photos application
|
|||
# Read more about iOS versioning at
|
||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||
|
||||
version: 0.7.8+408
|
||||
version: 0.7.11+411
|
||||
|
||||
environment:
|
||||
sdk: '>=2.17.0 <3.0.0'
|
||||
|
|
Loading…
Reference in a new issue