Make reshare unavailable on posts that are reshared from you already.

merge-requests/67/merge
Hank Grabowski 2022-12-28 08:52:55 -05:00
rodzic 03a7ebc788
commit 4ceaabe02b
1 zmienionych plików z 32 dodań i 36 usunięć

Wyświetl plik

@ -85,7 +85,8 @@ class EntryManagerService extends ChangeNotifier {
return Result.ok(true);
}
FutureResult<bool, ExecError> createNewStatus(String text, {
FutureResult<bool, ExecError> createNewStatus(
String text, {
String spoilerText = '',
String inReplyToId = '',
required NewEntryMediaItems mediaItems,
@ -122,11 +123,10 @@ class EntryManagerService extends ChangeNotifier {
}
final uploadResult =
await MediaUploadAttachmentHelper.getUploadableImageBytes(
await MediaUploadAttachmentHelper.getUploadableImageBytes(
item.localFilePath,
).andThenAsync(
(imageBytes) async =>
await client.uploadFileAsAttachment(
(imageBytes) async => await client.uploadFileAsAttachment(
bytes: imageBytes,
album: mediaItems.albumName,
description: item.description,
@ -144,10 +144,10 @@ class EntryManagerService extends ChangeNotifier {
final result = await client
.createNewStatus(
text: text,
spoilerText: spoilerText,
inReplyToId: inReplyToId,
mediaIds: mediaIds)
text: text,
spoilerText: spoilerText,
inReplyToId: inReplyToId,
mediaIds: mediaIds)
.andThenSuccessAsync((item) async {
await processNewItems([item], client.credentials.username, null);
return item;
@ -168,7 +168,7 @@ class EntryManagerService extends ChangeNotifier {
_logger.finest('${status.id} status created');
return true;
}).mapError(
(error) {
(error) {
_logger.finest('Error creating post: $error');
return ExecError(
type: ErrorType.localError,
@ -190,7 +190,7 @@ class EntryManagerService extends ChangeNotifier {
final client = clientResult.value;
final itemsResult =
await client.getTimeline(type: type, maxId: maxId, sinceId: sinceId);
await client.getTimeline(type: type, maxId: maxId, sinceId: sinceId);
if (itemsResult.isFailure) {
_logger.severe('Error getting timeline: ${itemsResult.error}');
return itemsResult.errorCast();
@ -198,11 +198,9 @@ class EntryManagerService extends ChangeNotifier {
itemsResult.value.sort((t1, t2) => t1.id.compareTo(t2.id));
final updatedPosts =
await processNewItems(itemsResult.value, auth.currentId, client);
await processNewItems(itemsResult.value, auth.currentId, client);
_logger.finest(() {
final postCount = _entries.values
.where((e) => e.parentId.isEmpty)
.length;
final postCount = _entries.values.where((e) => e.parentId.isEmpty).length;
final commentCount = _entries.length - postCount;
final orphanCount = _entries.values
.where(
@ -213,9 +211,11 @@ class EntryManagerService extends ChangeNotifier {
return Result.ok(updatedPosts);
}
Future<List<EntryTreeItem>> processNewItems(List<TimelineEntry> items,
String currentId,
FriendicaClient? client,) async {
Future<List<EntryTreeItem>> processNewItems(
List<TimelineEntry> items,
String currentId,
FriendicaClient? client,
) async {
items.sort((i1, i2) => int.parse(i1.id).compareTo(int.parse(i2.id)));
final allSeenItems = [...items];
for (final item in items) {
@ -242,9 +242,7 @@ class EntryManagerService extends ChangeNotifier {
await client
?.getPostOrComment(o.id, fullContext: true)
.andThenSuccessAsync((items) async {
final parentPostId = items
.firstWhere((e) => e.parentId.isEmpty)
.id;
final parentPostId = items.firstWhere((e) => e.parentId.isEmpty).id;
_parentPostIds[o.id] = parentPostId;
allSeenItems.addAll(items);
for (final item in items) {
@ -282,9 +280,7 @@ class EntryManagerService extends ChangeNotifier {
.toList();
_logger.finest(
'Completed processing new items ${client == null
? 'sub level'
: 'top level'}');
'Completed processing new items ${client == null ? 'sub level' : 'top level'}');
return updatedPosts;
}
@ -300,11 +296,10 @@ class EntryManagerService extends ChangeNotifier {
final client = clientResult.value;
final result = await client
.getPostOrComment(id, fullContext: false)
.andThenAsync((rootItems) async =>
await client
.getPostOrComment(id, fullContext: true)
.andThenSuccessAsync(
(contextItems) async => [...rootItems, ...contextItems]))
.andThenAsync((rootItems) async => await client
.getPostOrComment(id, fullContext: true)
.andThenSuccessAsync(
(contextItems) async => [...rootItems, ...contextItems]))
.andThenSuccessAsync((items) async {
await processNewItems(items, client.credentials.username, null);
});
@ -313,7 +308,7 @@ class EntryManagerService extends ChangeNotifier {
_logger.finest('$id post updated');
return _nodeToTreeItem(_getPostRootNode(id)!, auth.currentId);
}).mapError(
(error) {
(error) {
_logger.finest('$id error updating: $error');
return ExecError(
type: ErrorType.localError,
@ -334,7 +329,7 @@ class EntryManagerService extends ChangeNotifier {
final client = clientResult.value;
final result =
await client.resharePost(id).andThenSuccessAsync((item) async {
await client.resharePost(id).andThenSuccessAsync((item) async {
await processNewItems([item], client.credentials.username, null);
});
@ -342,7 +337,7 @@ class EntryManagerService extends ChangeNotifier {
_logger.finest('$id post updated after reshare');
return _nodeToTreeItem(_postNodes[id]!, auth.currentId);
}).mapError(
(error) {
(error) {
_logger.finest('$id error updating: $error');
return ExecError(
type: ErrorType.localError,
@ -363,7 +358,7 @@ class EntryManagerService extends ChangeNotifier {
final client = clientResult.value;
final result =
await client.unResharePost(id).andThenSuccessAsync((item) async {
await client.unResharePost(id).andThenSuccessAsync((item) async {
await processNewItems([item], client.credentials.username, null);
});
@ -377,8 +372,8 @@ class EntryManagerService extends ChangeNotifier {
return Result.ok(true);
}
FutureResult<EntryTreeItem, ExecError> toggleFavorited(String id,
bool newStatus) async {
FutureResult<EntryTreeItem, ExecError> toggleFavorited(
String id, bool newStatus) async {
final auth = getIt<AuthService>();
final clientResult = auth.currentClient;
if (clientResult.isFailure) {
@ -407,7 +402,8 @@ class EntryManagerService extends ChangeNotifier {
childenEntries[c.id] = _nodeToTreeItem(c, currentId);
}
final entry = _entries[node.id]!;
final isMine = entry.authorId == currentId;
final isMine =
entry.authorId == currentId || entry.reshareAuthorId == currentId;
return EntryTreeItem(
_entries[node.id]!,
isMine: isMine,
@ -474,7 +470,7 @@ class _Node {
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is _Node && runtimeType == other.runtimeType && id == other.id;
other is _Node && runtimeType == other.runtimeType && id == other.id;
@override
int get hashCode => id.hashCode;