summaryrefslogtreecommitdiff
path: root/libs/music/player.d/cgi-bin/pcm.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'libs/music/player.d/cgi-bin/pcm.cgi')
-rwxr-xr-xlibs/music/player.d/cgi-bin/pcm.cgi81
1 files changed, 55 insertions, 26 deletions
diff --git a/libs/music/player.d/cgi-bin/pcm.cgi b/libs/music/player.d/cgi-bin/pcm.cgi
index e43262f..34539ad 100755
--- a/libs/music/player.d/cgi-bin/pcm.cgi
+++ b/libs/music/player.d/cgi-bin/pcm.cgi
@@ -1,31 +1,60 @@
#!/usr/bin/python3
import sys,os,cgi,json
from urllib.parse import quote,unquote
-d=cgi.parse(fp=sys.stdin)
-print('Status: 200 OK',end='\r\n')
-print('Content-type: application/json',end='\r\n')
-print(end='\r\n')
+def getfilelist(d):
+ fmt='ogg' if 'fmt' not in d else d['fmt']
+ AUDIO_BASE='//filestorage.chrisoft.org/music/ogg/'
+
+ ro={'status':200,'message':'OK'}
+ if 'folder' not in d or d['folder']=='':
+ plp=os.environ['DOCUMENT_ROOT']+'/libs/music/player.d/playlists/playlists'
+ alblist=list()
+ with open(plp,mode='r',encoding='utf-8') as f:
+ for line in f:
+ line=line.strip()
+ if len(line)>0:alblist.append(quote(line))
+ rro={'type':'fileList','data':{'subFolderList':alblist}}
+ ro['result']=rro
+ print(json.dumps(ro))
+ else:
+ alp=os.environ['DOCUMENT_ROOT']+'/libs/music/player.d/playlists/'+unquote(d['folder'][0]).strip('/')+'.playlist'
+ alblist=list()
+ with open(alp,mode='r',encoding='utf-8') as f:
+ for line in f:
+ line=line.strip()
+ if len(line)>0:
+ alblist.append({
+ 'fileName':quote(line+'.ogg'),
+ 'url':quote(AUDIO_BASE+line+'.ogg'),
+ 'displayName':line,
+ 'fileSize':0,
+ 'modifiedTime':0
+ })
+ rro={'type':'fileList','data':{'musicList':alblist[1:],'subFolderList':list()}}
+ ro['result']=rro
+ print(json.dumps(ro))
+
+def getserverinfo(d):
+ ro={'status': 200, 'message': 'OK'}
+ ro['result']={
+ 'serverName': 'Pineapple Cloud Music',
+ 'serverShortName': 'PCM',
+ 'baseFolderNameHint': '',
+ 'preferredFormatsHint': 'ogg',
+ 'apiVersion': 1,
+ 'mediaRootUrl': '//filestorage.chrisoft.org/music/ogg/'
+ }
+ print(json.dumps(ro))
+
+if __name__ == '__main__':
+ d=cgi.parse(fp=sys.stdin)
+
+ print('Status: 200 OK',end='\r\n')
+ print('Content-type: application/json',end='\r\n')
+ print(end='\r\n')
+
+ actionmap={'getserverinfo':getserverinfo, 'getfilelist':getfilelist}
+ if d['do'][0] in actionmap:
+ actionmap[d['do'][0]](d)
-ro={'status':200,'message':'OK'}
-if 'folder' not in d or d['folder']=='':
- plp=os.environ['DOCUMENT_ROOT']+'/libs/music/player.d/playlists/playlists'
- alblist=list()
- with open(plp,mode='r',encoding='utf-8') as f:
- for line in f:
- line=line.strip()
- if len(line)>0:alblist.append(quote(line))
- rro={'type':'fileList','data':{'subFolderList':alblist}}
- ro['result']=rro
- print(json.dumps(ro))
-else:
- alp=os.environ['DOCUMENT_ROOT']+'/libs/music/player.d/playlists/'+unquote(d['folder'][0]).strip('/')+'.playlist'
- alblist=list()
- with open(alp,mode='r',encoding='utf-8') as f:
- for line in f:
- line=line.strip()
- if len(line)>0:
- alblist.append({'fileName':quote(line),'fileSize':0,'modifiedTime':0})
- rro={'type':'fileList','data':{'musicList':alblist[1:],'subFolderList':list()}}
- ro['result']=rro
- print(json.dumps(ro))