Finding channel by destination directory if any.

This commit is contained in:
Roland 2022-11-09 08:54:56 -07:00
parent f1bc29d76f
commit ddb35448aa
No known key found for this signature in database
GPG key ID: 9D6DBD3ACF11AB93
5 changed files with 17 additions and 18 deletions

View file

@ -13,12 +13,7 @@ class Downloader extends React.Component {
constructor(props) {
super(props);
this.state = {
advancedOpen: false,
destination: '',
downloader: props.downloader,
pending: false,
urls: '',
valid: true,
advancedOpen: false, destination: '', downloader: props.downloader, pending: false, urls: '', valid: true,
};
}
@ -27,13 +22,7 @@ class Downloader extends React.Component {
if (urls) {
this.setState({pending: true});
try {
let response = await postDownload(
urls,
downloader,
null,
null,
null,
destination);
let response = await postDownload(urls, downloader, null, null, null, destination);
if (response.status === 204) {
this.setState({urls: '', pending: false});
}
@ -44,9 +33,14 @@ class Downloader extends React.Component {
}
handleInputChange = async (event, {name, value}) => {
console.log(name, value);
this.setState({[name]: value}, this.validateUrls);
}
handleDestinationChange = (value) => {
this.setState({destination: value});
}
validateUrls = async () => {
// Validate that all URLs in state are valid.
if (this.state.urls) {
@ -78,7 +72,7 @@ class Downloader extends React.Component {
<DirectoryInput
isDirectory={true}
value={destination}
setInput={value => this.handleInputChange('directory', value)}
setInput={this.handleDestinationChange}
placeholder='download/into/custom/directory'
/>
</FormField>

View file

@ -39,7 +39,8 @@ function VideoPage({videoFile, prevFile, nextFile, setFavorite, ...props}) {
const handleDeleteVideo = async (video_id) => {
try {
await deleteVideos(video_id)
await deleteVideos([video_id])
setDeleteOpen(false);
} catch (e) {
setDeleteOpen(false);
throw e;

View file

@ -241,10 +241,12 @@ class VideoDownloader(Downloader, ABC):
settings = download.settings or dict()
local_channel_id = settings.get('channel_id')
channel_url = settings.get('channel_url')
destination = settings.get('destination')
if not channel and (local_channel_id or channel_url):
# Could not find channel via yt-dlp info_json, use info from ChannelDownloader if it created this Download.
logger.info(f'Using download.settings to find channel')
channel = get_channel(channel_id=local_channel_id, url=channel_url, return_dict=False)
channel = get_channel(channel_id=local_channel_id, url=channel_url, directory=destination,
return_dict=False)
if channel:
found_channel = 'download_settings'
@ -256,7 +258,7 @@ class VideoDownloader(Downloader, ABC):
logger.info('Could not find channel')
# Use the default directory if this video has no channel.
if settings.get('destination'):
if destination:
out_dir = pathlib.Path(settings['destination'])
else:
out_dir = get_no_channel_directory()

View file

@ -446,6 +446,7 @@ async def test_download_result(test_session, test_directory, video_download_mana
@pytest.mark.asyncio
async def test_download_destination(test_session, test_directory, video_download_manager,
mock_video_process_runner, mock_video_extract_info, mock_video_prepare_filename):
"""A Video can be downloaded to a directory other than it's Channel's directory."""
mock_video_extract_info.return_value = example_video_json
settings = dict(destination=f'{test_directory}/custom')

View file

@ -221,7 +221,8 @@ async def post_download(_: Request, body: DownloadRequest):
downloader = body.downloader
if not downloader or downloader in ('auto', 'None', 'null'):
downloader = None
settings = dict(excluded_urls=excluded_urls, destination=body.destination)
destination = get_media_directory() / body.destination if body.destination else None
settings = dict(excluded_urls=excluded_urls, destination=str(destination))
if body.frequency:
download_manager.recurring_download(urls[0], body.frequency, downloader=downloader,
sub_downloader=body.sub_downloader, reset_attempts=True,