import React, { useState } from 'react'
import PropTypes from 'prop-types'
import {
Button,
useNotify,
useRefresh,
useTranslate,
useUnselectAll,
} from 'react-admin'
import { useSelector } from 'react-redux'
import SyncIcon from '@material-ui/icons/Sync'
import CachedIcon from '@material-ui/icons/Cached'
import subsonic from '../subsonic'
const LibraryScanButton = ({ fullScan, selectedIds, className }) => {
const [loading, setLoading] = useState(false)
const notify = useNotify()
const refresh = useRefresh()
const translate = useTranslate()
const unselectAll = useUnselectAll()
const scanStatus = useSelector((state) => state.activity.scanStatus)
const handleClick = async () => {
setLoading(true)
try {
// Build scan options
const options = { fullScan }
// If specific libraries are selected, scan only those
// Format: "libraryID:" to scan entire library (no folder path specified)
if (selectedIds && selectedIds.length > 0) {
options.target = selectedIds.map((id) => `${id}:`)
}
await subsonic.startScan(options)
const notificationKey = fullScan
? 'resources.library.notifications.fullScanStarted'
: 'resources.library.notifications.quickScanStarted'
notify(notificationKey, 'info')
refresh()
// Unselect all items after successful scan
unselectAll('library')
} catch (error) {
notify('resources.library.notifications.scanError', 'warning')
} finally {
setLoading(false)
}
}
const isDisabled = loading || scanStatus.scanning
const label = fullScan
? translate('resources.library.actions.fullScan')
: translate('resources.library.actions.quickScan')
const icon = fullScan ? :
return (
)
}
LibraryScanButton.propTypes = {
fullScan: PropTypes.bool.isRequired,
selectedIds: PropTypes.array,
className: PropTypes.string,
}
export default LibraryScanButton