Page MenuHomePhorge

D15477.1765035852.diff
No OneTemporary

Size
8 KB
Referenced Files
None
Subscribers
None

D15477.1765035852.diff

diff --git a/lib/shared/farcaster/farcaster-hooks.js b/lib/shared/farcaster/farcaster-hooks.js
--- a/lib/shared/farcaster/farcaster-hooks.js
+++ b/lib/shared/farcaster/farcaster-hooks.js
@@ -83,6 +83,16 @@
const RETRY_DELAY_MS = 1000;
const MAX_BATCH_MESSAGE_SIZE = 500000;
+type FarcasterSyncProgress = {
+ +completedConversations?: number,
+ +totalNumberOfConversations?: number,
+ +completedMessages?: number,
+};
+
+type OnFarcasterSyncProgressCallback = (
+ progress: FarcasterSyncProgress,
+) => void;
+
class BatchedUpdates {
userIDs: Set<string>;
updateInfos: Array<ClientUpdateInfo>;
@@ -162,6 +172,19 @@
return this.estimatedSize;
}
+ getMessageCount(): number {
+ let count = this.messageInfos.length + this.additionalMessageInfos.length;
+ for (const updateInfo of this.updateInfos) {
+ if (
+ updateInfo.type === updateTypes.JOIN_THREAD &&
+ updateInfo.rawMessageInfos
+ ) {
+ count += updateInfo.rawMessageInfos.length;
+ }
+ }
+ return count;
+ }
+
trimToSize(maxSize: number): BatchedUpdates {
const overflow = new BatchedUpdates();
@@ -286,19 +309,20 @@
batchSize: number,
processor: (item: T, batchedUpdates: BatchedUpdates) => Promise<R>,
dispatch: Dispatch,
- onProgress?: (completed: number, total: number) => void,
+ onProgress?: OnFarcasterSyncProgressCallback,
addLog?: AddLogCallback,
): Promise<Array<R>> {
const results: Array<R> = [];
let failedItemsCount = 0;
let progress = 0;
+ let completedMessages = 0;
for (let i = 0; i < items.length; i += batchSize) {
const batch = items.slice(i, i + batchSize);
const batchPromises = batch.map(async item => {
+ const itemBatchedUpdates = new BatchedUpdates();
try {
- const itemBatchedUpdates = new BatchedUpdates();
const result = await processor(item, itemBatchedUpdates);
return { result, updates: itemBatchedUpdates };
} catch (error) {
@@ -317,7 +341,12 @@
return null;
} finally {
progress++;
- onProgress?.(progress, items.length);
+ completedMessages += itemBatchedUpdates.getMessageCount();
+ onProgress?.({
+ completedConversations: progress,
+ totalNumberOfConversations: items.length,
+ completedMessages,
+ });
}
});
@@ -1041,7 +1070,7 @@
}
function useFarcasterConversationsSync(): (
- onProgress?: (completed: number, total: number) => void,
+ onProgress?: OnFarcasterSyncProgressCallback,
) => Promise<void> {
const dispatch = useDispatch();
const fetchConversationWithMessages = useFetchConversationWithMessages();
@@ -1051,7 +1080,7 @@
const removeDeadThreads = useRemoveDeadThreads();
return React.useCallback(
- async (onProgress?: (completed: number, total: number) => void) => {
+ async (onProgress?: OnFarcasterSyncProgressCallback) => {
try {
const inboxResults = await Promise.all([
fetchInboxes(),
@@ -1079,7 +1108,11 @@
return;
}
- onProgress?.(0, conversations.length);
+ onProgress?.({
+ completedConversations: 0,
+ totalNumberOfConversations: conversations.length,
+ completedMessages: 0,
+ });
await processInBatchesWithReduxBatching(
conversations,
FARCASTER_DATA_BATCH_SIZE,
@@ -1090,7 +1123,7 @@
batchedUpdates,
),
dispatch,
- (completed, total) => onProgress?.(completed, total),
+ onProgress,
addLog,
);
@@ -1402,8 +1435,9 @@
function useFarcasterSync(onComplete?: () => void): {
+inProgress: boolean,
+progress: ?{
- completed: number,
- total: number,
+ completedConversations: number,
+ totalNumberOfConversations: number,
+ completedMessages: number,
},
} {
const syncFarcasterConversations = useFarcasterConversationsSync();
@@ -1414,16 +1448,25 @@
const fullyLoggedIn = isUserLoggedIn && userDataReady;
const [inProgress, setInProgress] = React.useState(false);
const [progress, setProgress] = React.useState<?{
- completed: number,
- total: number,
+ completedConversations: number,
+ totalNumberOfConversations: number,
+ completedMessages: number,
}>(null);
const handleProgress = React.useCallback(
- (completed: number, total: number) =>
- setProgress({
- completed,
- total,
- }),
+ (progressData: FarcasterSyncProgress) =>
+ setProgress(prev => ({
+ completedConversations:
+ progressData.completedConversations ??
+ prev?.completedConversations ??
+ 0,
+ totalNumberOfConversations:
+ progressData.totalNumberOfConversations ??
+ prev?.totalNumberOfConversations ??
+ 0,
+ completedMessages:
+ progressData.completedMessages ?? prev?.completedMessages ?? 0,
+ })),
[],
);
diff --git a/native/farcaster/farcaster-sync-loading-screen.react.js b/native/farcaster/farcaster-sync-loading-screen.react.js
--- a/native/farcaster/farcaster-sync-loading-screen.react.js
+++ b/native/farcaster/farcaster-sync-loading-screen.react.js
@@ -27,7 +27,7 @@
const { progress } = useFarcasterSync(handleComplete);
const progressValue = progress
- ? progress.completed / progress.total
+ ? progress.completedConversations / progress.totalNumberOfConversations
: undefined;
return (
@@ -63,13 +63,20 @@
</View>
<View style={styles.progressContainer}>
{progress ? (
- <Progress.Circle
- progress={progressValue}
- size={100}
- color={colors.panelForegroundIcon}
- strokeCap="round"
- showsText
- />
+ <>
+ <Progress.Circle
+ progress={progressValue}
+ size={100}
+ color={colors.panelForegroundIcon}
+ strokeCap="round"
+ showsText
+ />
+ <Text style={styles.progressText}>
+ {progress.completedMessages
+ ? `${progress.completedMessages.toLocaleString()} messages fetched`
+ : 'Fetching messages...'}
+ </Text>
+ </>
) : (
<Progress.CircleSnail
indeterminate
@@ -126,6 +133,13 @@
alignItems: 'center',
justifyContent: 'center',
},
+ progressText: {
+ marginTop: 16,
+ fontFamily: 'Arial',
+ fontSize: 15,
+ color: 'panelForegroundSecondaryLabel',
+ textAlign: 'center',
+ },
};
export default FarcasterSyncLoadingScreen;
diff --git a/web/farcaster/farcaster-sync-loading-screen.css b/web/farcaster/farcaster-sync-loading-screen.css
--- a/web/farcaster/farcaster-sync-loading-screen.css
+++ b/web/farcaster/farcaster-sync-loading-screen.css
@@ -13,7 +13,7 @@
div.loading {
width: 600px;
- min-height: 438px;
+ min-height: 60vh;
background: var(--auth-modal-bg);
border: var(--auth-modal-border-color) solid 1px;
border-radius: 12px;
diff --git a/web/farcaster/farcaster-sync-loading-screen.react.js b/web/farcaster/farcaster-sync-loading-screen.react.js
--- a/web/farcaster/farcaster-sync-loading-screen.react.js
+++ b/web/farcaster/farcaster-sync-loading-screen.react.js
@@ -16,14 +16,23 @@
}
return (
<>
- <p className={css.description}>Loading conversations...</p>
<p className={css.description}>
- {progress.completed} of {progress.total} (
- {progress.total
- ? Math.round((progress.completed / progress.total) * 100)
+ {progress.completedConversations} of{' '}
+ {progress.totalNumberOfConversations} (
+ {progress.totalNumberOfConversations
+ ? Math.round(
+ (progress.completedConversations /
+ progress.totalNumberOfConversations) *
+ 100,
+ )
: 0}
- %)
+ %) conversations fetched
</p>
+ {progress.completedMessages ? (
+ <p className={css.description}>
+ {progress.completedMessages.toLocaleString()} messages fetched
+ </p>
+ ) : null}
</>
);
}, [progress]);

File Metadata

Mime Type
text/plain
Expires
Sat, Dec 6, 3:44 PM (10 h, 40 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5839322
Default Alt Text
D15477.1765035852.diff (8 KB)

Event Timeline