49 lines
1.7 KiB
Org Mode
49 lines
1.7 KiB
Org Mode
|
* The Glorious what.cd¹ Resolver
|
|||
|
|
|||
|
¹: At the time of writing, what.cd didn’t even exist anymore
|
|||
|
|
|||
|
** Idea
|
|||
|
|
|||
|
Stream your music (or media) from a private tracker transparently.
|
|||
|
“Spotify for torrents”
|
|||
|
|
|||
|
** Technical
|
|||
|
|
|||
|
You need to have a seedbox, which runs a server program.
|
|||
|
The server manages queries, downloads torrents and requested files, and
|
|||
|
provides http streams to the downloaded files (while caching them for
|
|||
|
seeding).
|
|||
|
|
|||
|
Clients then use the API to search for music (e.g. query for artists or
|
|||
|
tracks) and get back the promise of a stream to the resolved file (a bit how
|
|||
|
resolvers in the Tomahawk Player work)
|
|||
|
|
|||
|
*** The Server
|
|||
|
|
|||
|
**** Resolving queries
|
|||
|
|
|||
|
~resolve :: Query -> IO Identifiers~
|
|||
|
|
|||
|
A query is a search input for content (could be an artist or a movie name
|
|||
|
or something)
|
|||
|
|
|||
|
There have to be multiple providers, depending on the site used
|
|||
|
(e.g. one for Gazelle trackers, one for Piratebay) and some intermediate
|
|||
|
structure (e.g. for going through Musicbrainz first).
|
|||
|
|
|||
|
Output is a unique identifier for a fetchable resource; this could be a
|
|||
|
link to a torrent combined with a file/directory in said torrent.
|
|||
|
|
|||
|
**** Fetching Identifiers
|
|||
|
|
|||
|
~fetch :: Identifier -> IO (Promise Stream)~
|
|||
|
|
|||
|
Takes an Identifier (which should provide all information on how to grab
|
|||
|
the media file and returns a stream to the media file once it’s ready.
|
|||
|
|
|||
|
For torrents, this probably consists of telling the torrent
|
|||
|
library/application to fetch a certain torrent and start downloading the
|
|||
|
required files in it. The torrent fetcher would also need to do seeding and
|
|||
|
space management, since one usually has to keep a ratio and hard drive
|
|||
|
space is not unlimited.
|