Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F32126486
D15477.1765023459.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
D15477.1765023459.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D15477: [lib] Report number of messages during sync
Attached
Detach File
Event Timeline
Log In to Comment