mirror of
https://github.com/dergigi/boris.git
synced 2025-12-21 00:24:22 +01:00
feat: only track reading progress for articles above minimum length
- Add MIN_CONTENT_LENGTH constant (1000 chars ≈ 150 words) to config/kinds - Create shouldTrackReadingProgress helper to validate content length - Strip HTML tags when calculating character count - Only save reading progress for articles meeting the threshold - Log when content is too short to track This prevents noisy tracking of very short articles or excerpts.
This commit is contained in:
@@ -32,7 +32,7 @@ import {
|
|||||||
import AuthorCard from './AuthorCard'
|
import AuthorCard from './AuthorCard'
|
||||||
import { faBooks } from '../icons/customIcons'
|
import { faBooks } from '../icons/customIcons'
|
||||||
import { extractYouTubeId, getYouTubeMeta } from '../services/youtubeMetaService'
|
import { extractYouTubeId, getYouTubeMeta } from '../services/youtubeMetaService'
|
||||||
import { classifyUrl } from '../utils/helpers'
|
import { classifyUrl, shouldTrackReadingProgress } from '../utils/helpers'
|
||||||
import { buildNativeVideoUrl } from '../utils/videoHelpers'
|
import { buildNativeVideoUrl } from '../utils/videoHelpers'
|
||||||
import { useReadingPosition } from '../hooks/useReadingPosition'
|
import { useReadingPosition } from '../hooks/useReadingPosition'
|
||||||
import { ReadingProgressIndicator } from './ReadingProgressIndicator'
|
import { ReadingProgressIndicator } from './ReadingProgressIndicator'
|
||||||
@@ -164,6 +164,12 @@ const ContentPanel: React.FC<ContentPanelProps> = ({
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if content is long enough to track reading progress
|
||||||
|
if (!shouldTrackReadingProgress(html, markdown)) {
|
||||||
|
console.log('[progress] ⏭️ ContentPanel: Content too short to track reading progress')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
const scrollTop = window.pageYOffset || document.documentElement.scrollTop
|
const scrollTop = window.pageYOffset || document.documentElement.scrollTop
|
||||||
console.log('[progress] 💾 ContentPanel: Saving position:', {
|
console.log('[progress] 💾 ContentPanel: Saving position:', {
|
||||||
position,
|
position,
|
||||||
@@ -190,7 +196,7 @@ const ContentPanel: React.FC<ContentPanelProps> = ({
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('[progress] ❌ ContentPanel: Failed to save reading position:', error)
|
console.error('[progress] ❌ ContentPanel: Failed to save reading position:', error)
|
||||||
}
|
}
|
||||||
}, [activeAccount, relayPool, eventStore, articleIdentifier, settings?.syncReadingPosition, selectedUrl])
|
}, [activeAccount, relayPool, eventStore, articleIdentifier, settings?.syncReadingPosition, selectedUrl, html, markdown])
|
||||||
|
|
||||||
const { isReadingComplete, progressPercentage, saveNow } = useReadingPosition({
|
const { isReadingComplete, progressPercentage, saveNow } = useReadingPosition({
|
||||||
enabled: isTextContent,
|
enabled: isTextContent,
|
||||||
|
|||||||
@@ -14,3 +14,9 @@ export const KINDS = {
|
|||||||
|
|
||||||
export type KindValue = typeof KINDS[keyof typeof KINDS]
|
export type KindValue = typeof KINDS[keyof typeof KINDS]
|
||||||
|
|
||||||
|
// Reading progress tracking configuration
|
||||||
|
export const READING_PROGRESS = {
|
||||||
|
// Minimum character count to track reading progress (roughly 150 words)
|
||||||
|
MIN_CONTENT_LENGTH: 1000
|
||||||
|
} as const
|
||||||
|
|
||||||
|
|||||||
@@ -123,3 +123,15 @@ export function createParallelReqStreams(
|
|||||||
return { local$, remote$ }
|
return { local$, remote$ }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if content is long enough to track reading progress
|
||||||
|
* Minimum 1000 characters (roughly 150 words)
|
||||||
|
*/
|
||||||
|
export const shouldTrackReadingProgress = (html: string | undefined, markdown: string | undefined): boolean => {
|
||||||
|
const { READING_PROGRESS } = require('../config/kinds')
|
||||||
|
const content = (html || markdown || '').trim()
|
||||||
|
// Strip HTML tags to get character count
|
||||||
|
const plainText = content.replace(/<[^>]*>/g, '').trim()
|
||||||
|
return plainText.length >= READING_PROGRESS.MIN_CONTENT_LENGTH
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user