Page MenuHomePhorge

D15477.1765023459.diff
No OneTemporary

Size
8 KB
Referenced Files
None
Subscribers
None

D15477.1765023459.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
@@ -84,6 +84,16 @@
const RETRY_DELAY_MS = 1000;
const MAX_BATCH_MESSAGE_SIZE = 500000;
+type FarcasterSyncProgress = {
+ +completedConversations: number,
+ +totalNumberOfConversations: number,
+ +completedMessages: number,
+};
+
+type OnFarcasterSyncProgressCallback = (
+ progress: Partial<FarcasterSyncProgress>,
+) => void;
+
class BatchedUpdates {
userIDs: Set<string>;
updateInfos: Array<ClientUpdateInfo>;
@@ -163,6 +173,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();
@@ -311,19 +334,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) {
@@ -342,7 +366,11 @@
return null;
} finally {
progress++;
- onProgress?.(progress, items.length);
+ completedMessages += itemBatchedUpdates.getMessageCount();
+ onProgress?.({
+ completedConversations: progress,
+ completedMessages,
+ });
}
});
@@ -1066,7 +1094,7 @@
}
function useFarcasterConversationsSync(): (
- onProgress?: (completed: number, total: number) => void,
+ onProgress?: OnFarcasterSyncProgressCallback,
) => Promise<void> {
const dispatch = useDispatch();
const fetchConversationWithMessages = useFetchConversationWithMessages();
@@ -1076,7 +1104,7 @@
const removeDeadThreads = useRemoveDeadThreads();
return React.useCallback(
- async (onProgress?: (completed: number, total: number) => void) => {
+ async (onProgress?: OnFarcasterSyncProgressCallback) => {
try {
const inboxResults = await Promise.all([
fetchInboxes(),
@@ -1104,7 +1132,11 @@
return;
}
- onProgress?.(0, conversations.length);
+ onProgress?.({
+ completedConversations: 0,
+ totalNumberOfConversations: conversations.length,
+ completedMessages: 0,
+ });
await processInBatchesWithReduxBatching(
conversations,
FARCASTER_DATA_BATCH_SIZE,
@@ -1115,7 +1147,7 @@
batchedUpdates,
),
dispatch,
- (completed, total) => onProgress?.(completed, total),
+ onProgress,
addLog,
);
@@ -1446,10 +1478,7 @@
function useFarcasterSync(onComplete?: () => void): {
+inProgress: boolean,
- +progress: ?{
- completed: number,
- total: number,
- },
+ +progress: ?FarcasterSyncProgress,
} {
const syncFarcasterConversations = useFarcasterConversationsSync();
const currentUserSupportsDCs = useCurrentUserSupportsDCs();
@@ -1458,18 +1487,23 @@
const userDataReady = useIsUserDataReady();
const fullyLoggedIn = isUserLoggedIn && userDataReady;
const [inProgress, setInProgress] = React.useState(false);
- const [progress, setProgress] = React.useState<?{
- completed: number,
- total: number,
- }>(null);
+ const [progress, setProgress] = React.useState<?FarcasterSyncProgress>(null);
const { socketState } = useTunnelbroker();
const handleProgress = React.useCallback(
- (completed: number, total: number) =>
- setProgress({
- completed,
- total,
- }),
+ (progressData: Partial<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,28 @@
</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
+ />
+ <View>
+ <Text style={styles.progressText}>
+ {progress.completedConversations} of{' '}
+ {progress.totalNumberOfConversations} conversations fetched
+ </Text>
+ </View>
+ <View>
+ <Text style={styles.progressText}>
+ {progress.completedMessages
+ ? `${progress.completedMessages.toLocaleString()} messages fetched`
+ : null}
+ </Text>
+ </View>
+ </>
) : (
<Progress.CircleSnail
indeterminate
@@ -126,6 +141,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, 12:17 PM (18 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5837358
Default Alt Text
D15477.1765023459.diff (8 KB)

Event Timeline