forked from jonsmy/glowers-radio
		
	initial
This commit is contained in:
		
							
								
								
									
										1
									
								
								data/songs.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								data/songs.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								data/songs.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								data/songs.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										251
									
								
								generate.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										251
									
								
								generate.js
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,251 @@ | |||||||
|  | #!/usr/bin/env node | ||||||
|  | "use-strict"; | ||||||
|  | const fs = require("fs") | ||||||
|  |  | ||||||
|  | const objSerialize = (obj, keys, cb) => { | ||||||
|  |     let a = Object.create(null) | ||||||
|  |     for (const key of keys) | ||||||
|  |         a[key] = obj[key] | ||||||
|  |     if (cb) | ||||||
|  |         return cb(a) | ||||||
|  |     return a | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const RadioItem = function (id) { | ||||||
|  |     this.id = id | ||||||
|  |     this.metadata = undefined | ||||||
|  |     this.tags = undefined | ||||||
|  |     this.sources = [] | ||||||
|  |     return this | ||||||
|  | } | ||||||
|  |  | ||||||
|  | RadioItem.new = id => new RadioItem(id) | ||||||
|  | RadioItem.prototype.setMetadata = function (title, artist) { this.metadata = { title, artist }; return this } | ||||||
|  | RadioItem.prototype.setTags = function (tags) { this.tags = tags; return this } | ||||||
|  | RadioItem.prototype.addSource = function (source) { this.sources.push(source); return this } | ||||||
|  | RadioItem.prototype.serialize = function () { | ||||||
|  |     return objSerialize(this, [ | ||||||
|  |         "id", | ||||||
|  |         "tags", | ||||||
|  |         "metadata" | ||||||
|  |     ], obj => ({ ...obj, "sources": this.sources.map(source => source.serialize()) })) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const EThumbnailType = { | ||||||
|  |     "NATIVE": -1, | ||||||
|  |     "SQUARE": 0, | ||||||
|  |     "STRETCH": 1, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const RadioSource = function (type) { | ||||||
|  |     this.type = type | ||||||
|  |     this.url = null | ||||||
|  |     this.thumbnail_type = type.startsWith("video/") ? EThumbnailType.NATIVE : EThumbnailType.SQUARE | ||||||
|  |     this.thumbnail_url = undefined | ||||||
|  |     return this | ||||||
|  | } | ||||||
|  |  | ||||||
|  | RadioSource.new = type => new RadioSource(type) | ||||||
|  | RadioSource.prototype.setThumbnailType = function (thumbnail_type) { this.thumbnail_type = thumbnail_type; return this } | ||||||
|  | RadioSource.prototype.setURL = function (uri) { this.url = uri; return this } | ||||||
|  | RadioSource.prototype.setThumbnailURL = function (uri) { this.thumbnail_url = uri; return this } | ||||||
|  | RadioSource.prototype.serialize = function () { | ||||||
|  |     return objSerialize(this, [ | ||||||
|  |         "type", | ||||||
|  |         "url", | ||||||
|  |         "thumbnail_type", | ||||||
|  |         "thumbnail_url" | ||||||
|  |     ]) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const radioEntries = [ | ||||||
|  |  | ||||||
|  |     RadioItem.new("nightinjunitaki") | ||||||
|  |       .setMetadata("Night In Junitaki", "Wünsche") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("x-gwm://wiki/night_in_junitaki_-_waves.mp3") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/HCiiIVMOekjPZtiEaexDdUsD")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("goodbyeautumn") | ||||||
|  |       .setMetadata("Goodbye Autumn", "Tomppabeats") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("x-gwm://wiki/goodbye_autumn.mp3") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/HCiiIVMOekjPZtiEaexDdUsD")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("balmy") | ||||||
|  |       .setMetadata("Balmy", "90sFlav") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("x-gwm://wiki/balmy90sblav.mp3") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/kDNCBjvQxfPvtJVmfEMmcdov")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("springletter") | ||||||
|  |       .setMetadata("Spring Letter", "90sFlav") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("x-gwm://wiki/spring_letter.mp3") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/wTLwzrymoDeNGdJLEpDoEBtZ")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("weep") | ||||||
|  |       .setMetadata("Weep", "90sFlav") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("x-gwm://wiki/weep.mp3") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/jIkXGOSECsPPyJTvgrxPhRoq")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("whenimetyou") | ||||||
|  |       .setMetadata("When I Met You", "90sFlav") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("x-gwm://wiki/when_i_met_you.mp3") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/ntDKDFtqeQCmIVoRtzRQdvEC")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("sevenofnine") | ||||||
|  |       .setMetadata("Seven of Nine", "90sFlav") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("x-gwm://wiki/seven_of_nine.mp3") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/kDNCBjvQxfPvtJVmfEMmcdov")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("callme") | ||||||
|  |       .setMetadata("Call Me", "90sFlav") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("x-gwm://wiki/call_me.mp3") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/kDNCBjvQxfPvtJVmfEMmcdov")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("midnightsession") | ||||||
|  |       .setMetadata("Midnight Session", "90sFlav") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("x-gwm://wiki/полуночная_сессия.mp3") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/pLexnITqTOhJUXBOKtDAiZzv")), | ||||||
|  |  | ||||||
|  |     // TODO: Add thumb | ||||||
|  |     RadioItem.new("southdakota") | ||||||
|  |       .setMetadata("South Dakota", "Keeloh") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("x-gwm://wiki/southdakota.mp3")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("dobson") | ||||||
|  |       .addSource(RadioSource.new("video/mp4") | ||||||
|  |         .setURL("mxc://glowers.club/mRtnfcoHYkyAOXSkYvrnbZgX") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/eHKVfIITgdRKERhVOPSTDQAc")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("poljacked") | ||||||
|  |       .addSource(RadioSource.new("video/webm") | ||||||
|  |         .setURL("mxc://glowers.club/xnYQdrroEheIZBfigHGZferu") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/BczfFtojBhwMxTNjoZfhemam")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("femalecops") | ||||||
|  |       .setTags([ "misc" ]) | ||||||
|  |       .addSource(RadioSource.new("video/webm") | ||||||
|  |         .setURL("mxc://glowers.club/RYjIfTiZKSKBdYBvjGtyBILa") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/BVQhXkWSYbvFcSerzVZFgfrn")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("autisticclowns") | ||||||
|  |       .setTags([ "misc" ]) | ||||||
|  |       .addSource(RadioSource.new("video/webm") | ||||||
|  |         .setURL("mxc://glowers.club/WqYtubpqVplLjSxxmaxNeQir") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/esDPBgpoTvTtqekHAQJRwqtK")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("ifuckinglovescience") | ||||||
|  |       .setMetadata("I FUCKING LOVE SCIENCE", "Hank Green") | ||||||
|  |       .addSource(RadioSource.new("video/webm") | ||||||
|  |         .setURL("mxc://glowers.club/abgQasVrghOSkpRZTIfHMFyF") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/IhivpcDssjnjSDHBdMEGGwVp")) | ||||||
|  |       .addSource(RadioSource.new("video/mp4") | ||||||
|  |         .setURL("mxc://glowers.club/ieQlfAlPPGeXLsvevolcQKqO") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/IhivpcDssjnjSDHBdMEGGwVp")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("dootnukem") | ||||||
|  |       .setMetadata("Grabbag", "Lee Jackson") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("mxc://glowers.club/xsuBJwyAUwuDoASbmqjZWrLO") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/ymWgXucYRzhsgdiecjBkFvmz") | ||||||
|  |         .setThumbnailType(EThumbnailType.STRETCH)), | ||||||
|  |  | ||||||
|  |     RadioItem.new("hyperborea") | ||||||
|  |       .setMetadata("Somebody That I Used to Know", "VelvetCasca") | ||||||
|  |       .addSource(RadioSource.new("video/mp4") | ||||||
|  |         .setURL("mxc://glowers.club/egAyPBuGNFPYyvnMWMxySLiX") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/dOxJvUWRlGqRRxJdpDRZyeko")), | ||||||
|  |  | ||||||
|  |     // TODO: Add metadata | ||||||
|  |     RadioItem.new("feizhou") | ||||||
|  |       .addSource(RadioSource.new("video/webm") | ||||||
|  |         .setURL("mxc://glowers.club/EVRGpqeefZdsjVawOvSkOdvZ") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/GywrCPMpcpsLFJQAuYoZRuzq")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("breathe") | ||||||
|  |       .setMetadata("Breathe (in the Air)", "Pink Floyd") | ||||||
|  |       .addSource(RadioSource.new("video/webm") | ||||||
|  |         .setURL("mxc://glowers.club/HAGTNySLRemaDfjZMSmpktDj") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/KytvUDmLWCFKQWwHemdDTksd")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("fuckjuice") | ||||||
|  |       .setMetadata("Fuck Jannies and Fuck Juice", "The Crystal Crypt") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("mxc://glowers.club/bxMoRJmYFteVNNntNhqrniNJ") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/YgeFvRPLguZOCGtUJFJednNj")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("onegame") | ||||||
|  |       .setMetadata("ONE GAME", "Chris Voiceman") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("mxc://glowers.club/iejQiyaVtnqhuSSCuXqviAIN") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/bZonXMZjhadXyazpKscvRBiP")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("imaginebeingdruckmann") | ||||||
|  |       .setMetadata("Imagine Being Druckmann", "Chris Voiceman") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("mxc://glowers.club/wRsCVvtUiLzFnDjwwgkCnXzN") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/ipWDVreHeWKOqefUBuvyFxjj")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("copeacabana") | ||||||
|  |       .setMetadata("Cope-a-Cabana", "Chris Voiceman") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("mxc://glowers.club/zEmMFUyaIBmuqAeogVZAMrmO") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/WBhXYzFgTyMVTTEWKwzDfsgF")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("jihad") | ||||||
|  |       .setMetadata("Heyaw Rijal Al Qassam", "Inshad Ensemble") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("x-gwm://gnujihad.mp3") | ||||||
|  |         .setThumbnailURL("x-gwm://chromiumjihad.gif")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("thisistheinfowar") | ||||||
|  |       .setMetadata("In the House, In a Heartbeat", "John Murphy") | ||||||
|  |       .addSource(RadioSource.new("video/webm") | ||||||
|  |         .setURL("mxc://glowers.club/znoCPlczXEXaEAVaiKHopnAV") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/klXuXEwYNmYvsZhNOaXsDGJq")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("floyd") | ||||||
|  |       .setMetadata("Paralyzer", "Finger Seven") | ||||||
|  |       .setTags([ "misc" ]) | ||||||
|  |       .addSource(RadioSource.new("video/webm") | ||||||
|  |         .setURL("mxc://glowers.club/IusHmBCOyJZFGHxsGjRkYqXf") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/JjsGuJkEGAbudLaYvbAcxryQ")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("amd") | ||||||
|  |       .setMetadata("Svetovid", "Jan Janko Močnik") | ||||||
|  |       .setTags([ "misc" ]) | ||||||
|  |       .addSource(RadioSource.new("video/webm") | ||||||
|  |         .setURL("mxc://glowers.club/RBvSWrEWiFtIuDUCoxZbCDTW") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/GccquMupQGvDXYNeifUbxfuy")), | ||||||
|  |  | ||||||
|  |     // TODO: Add thumbnail | ||||||
|  |     RadioItem.new("israel") | ||||||
|  |       .setMetadata("Shake Israel's Security", "National Radio") | ||||||
|  |       .setTags([ "misc" ]) | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("mxc://glowers.club/cJMVPnPpkSZFHIRHtzXRrvna")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("honorary") | ||||||
|  |       .setMetadata("Erika", "Major Han Friess") | ||||||
|  |       .addSource(RadioSource.new("video/webm") | ||||||
|  |         .setURL("mxc://glowers.club/qMkbHHunSgPzkFpcoOuYeIuE") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/aENkwWEKXIztqyBTJrBHCmRQ")), | ||||||
|  |  | ||||||
|  |     RadioItem.new("bashar") | ||||||
|  |       .setMetadata("God, Syria, and Bashar", "Jan Janko Močnik") | ||||||
|  |       .addSource(RadioSource.new("audio/mp3") | ||||||
|  |         .setURL("mxc://glowers.club/egmaXMIHsNmblfDjyTGHdyas") | ||||||
|  |         .setThumbnailURL("mxc://glowers.club/wpwHKoSFsxkNttaNyaNFzhMk")), | ||||||
|  |  | ||||||
|  | ].filter(Boolean).map(a => a.serialize()).sort((a,b) => a.id.localeCompare(b.id)) | ||||||
|  |  | ||||||
|  | fs.writeFileSync("./data/songs.js", `glowersRadioSongsCallback(${JSON.stringify(radioEntries)})`) | ||||||
|  | fs.writeFileSync("./data/songs.json", JSON.stringify(radioEntries)) | ||||||
							
								
								
									
										29
									
								
								readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								readme.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | # glowers-radio | ||||||
|  | This repo contains backing information for Glowers Radio. | ||||||
|  |  | ||||||
|  | ## Format | ||||||
|  | The `songs.json` **is only intended for use for Glowers Radio**, and is effectively living standard as a result. **Live data may change drastically without warning** | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | required: [ id, sources ] | ||||||
|  | properties: | ||||||
|  |   id: | ||||||
|  |     type: string | ||||||
|  |   tags: | ||||||
|  |     type: array | ||||||
|  |     items: [ { type: string } ] | ||||||
|  |   metadata: | ||||||
|  |     required: [ title, artist ] | ||||||
|  |     properties: | ||||||
|  |       title: { type: string } | ||||||
|  |       artist: { type: string } | ||||||
|  |   sources: | ||||||
|  |     type: array | ||||||
|  |     items: | ||||||
|  |     - required: [ type, url ] | ||||||
|  |       properties: | ||||||
|  |         type: { type: string, format: mimetype } | ||||||
|  |         url: { type: string, format: uri } | ||||||
|  |         thumbnail_type: { type: string } | ||||||
|  |         thumbnail_url: { format: uri } | ||||||
|  | ``` | ||||||
		Reference in New Issue
	
	Block a user