summaryrefslogtreecommitdiff
path: root/libs/music/player.d/cgi-bin/pcm.cgi
blob: a1dc27f1d4acbd7cd15c958fdc334ecae459b640 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/python3
import sys,os,cgi,json
from urllib.parse import quote,unquote

def getfilelist(d):
    fmt='ogg' if 'fmt' not in d else d['fmt']

    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:
    #hard code this for now, until pcm api stabilizes
                    alblist.append({'fileName':quote(line+'.ogg'),'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)