kopia lustrzana https://gitlab.com/mysocialportal/relatica
Make reshare unavailable on posts that are reshared from you already.
rodzic
03a7ebc788
commit
4ceaabe02b
|
@ -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;
|
||||
|
|
Ładowanie…
Reference in New Issue