Change-Id: Ieb377fb8caa60e716703153dfeca5173f9a6779d Reviewed-on: https://cl.tvl.fyi/c/depot/+/8830 Reviewed-by: Profpatsch <mail@profpatsch.de> Tested-by: BuildkiteCI
		
			
				
	
	
		
			48 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Org Mode
		
	
	
	
	
	
			
		
		
	
	
			48 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.
 |