catch icon indicating copy to clipboard operation
catch copied to clipboard

Support for downloading files other than torrents

Open john-catalano opened this issue 3 years ago • 3 comments

I've been using Catch successfully (and happily) with ShowRSS for several years. Today, I had the idea that I'd like to use Catch to download podcasts via RSS. But, the podcast files are saved with a .torrent extension, despite the files being 40 to 100 MB. If I simply rename the file and add "mp3" in the place of "torrent", the file works fine and I can see all of the typical podcast metadata.

What switch do I need to flip to prevent this renaming?

Example, this RSS feed: https://atp.fm/rss

2022-01-31-619 Clipboard 2022-01-31-620 Clipboard

john-catalano avatar Jan 30 '22 00:01 john-catalano

Catch treats everything that isn't a magnet link as a .torrent file. It used to just preserve the file extension present in the feed, but turns out there are many feeds full of torrents with no extension.

You can work around this now by writing a download script that checks the extension and decides whether to download the file manually or launch a torrent client.

But I think long term we should change the app so it treats everything with no extension or a ".torrent" extension as a torrent file, and leaves everything else as is... I'm not sure though, Catch was never meant to download large files itself; the feed check will appear to have stalled until all downloads are complete, which is nor great. Needs more thought.

mipstian avatar Feb 14 '22 19:02 mipstian

"writing a download script"

Do you have any examples to post? I've searched this GitHub project and issues a few times and could not find any examples, or explanations about what kind of commands/syntax the script should have.

john-catalano avatar Feb 16 '22 14:02 john-catalano

Here's an example in Swift, obviously you can use whatever scripting language you want. The script only takes the url to download as an argument.

#!/usr/bin/env xcrun swift


import Foundation
import AppKit


precondition(CommandLine.arguments.count >= 2)

let downloadURL = CommandLine.arguments[1]

if downloadURL.hasPrefix("magnet:") {
  NSWorkspace.shared.open(URL(string: downloadURL)!)
} else {
  // do something else with downloadURL
}

mipstian avatar Mar 09 '22 14:03 mipstian