Squash merge nostrfeed-localStorage into ario
This commit is contained in:
parent
5e6bc32f02
commit
5ceb12ca3b
5 changed files with 432 additions and 121 deletions
85
src/composables/useNostrFeedPreloader.ts
Normal file
85
src/composables/useNostrFeedPreloader.ts
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
import { ref, computed } from 'vue'
|
||||
import { useNostrFeed, type NostrFeedConfig } from './useNostrFeed'
|
||||
|
||||
export function useNostrFeedPreloader(config: NostrFeedConfig = {}) {
|
||||
const feed = useNostrFeed(config)
|
||||
|
||||
// Preload state
|
||||
const isPreloading = ref(false)
|
||||
const isPreloaded = ref(false)
|
||||
const preloadError = ref<Error | null>(null)
|
||||
|
||||
// Check if feed data is available in localStorage
|
||||
const hasStoredData = computed(() => {
|
||||
const storageKey = `nostr-feed-${config.feedType || 'all'}`
|
||||
const storedData = localStorage.getItem(storageKey)
|
||||
return storedData !== null
|
||||
})
|
||||
|
||||
// Check if we should show loading (only if no cached data and actually loading)
|
||||
const shouldShowLoading = computed(() => {
|
||||
return (feed.isLoading.value || isPreloading.value) && feed.notes.value.length === 0
|
||||
})
|
||||
|
||||
// Preload feed data
|
||||
const preloadFeed = async () => {
|
||||
if (isPreloaded.value || isPreloading.value) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
isPreloading.value = true
|
||||
preloadError.value = null
|
||||
|
||||
console.log('Preloading Nostr feed...')
|
||||
|
||||
// Connect and load notes
|
||||
await feed.connectToFeed()
|
||||
await feed.loadNotes()
|
||||
|
||||
// Subscribe to updates
|
||||
feed.subscribeToFeedUpdates()
|
||||
|
||||
isPreloaded.value = true
|
||||
console.log('Nostr feed preloaded successfully')
|
||||
|
||||
} catch (error) {
|
||||
console.error('Failed to preload Nostr feed:', error)
|
||||
preloadError.value = error instanceof Error ? error : new Error('Failed to preload feed')
|
||||
} finally {
|
||||
isPreloading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// Reset preload state
|
||||
const resetPreload = () => {
|
||||
isPreloaded.value = false
|
||||
isPreloading.value = false
|
||||
preloadError.value = null
|
||||
feed.resetFeedState()
|
||||
}
|
||||
|
||||
// Auto-preload if we have stored data
|
||||
const autoPreload = async () => {
|
||||
if (hasStoredData.value && !isPreloaded.value && !isPreloading.value) {
|
||||
await preloadFeed()
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
// State
|
||||
isPreloading: computed(() => isPreloading.value),
|
||||
isPreloaded: computed(() => isPreloaded.value),
|
||||
preloadError: computed(() => preloadError.value),
|
||||
hasStoredData,
|
||||
shouldShowLoading,
|
||||
|
||||
// Actions
|
||||
preloadFeed,
|
||||
resetPreload,
|
||||
autoPreload,
|
||||
|
||||
// Expose feed methods
|
||||
...feed
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue