-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathawesome.py
147 lines (125 loc) · 4.14 KB
/
awesome.py
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
from __future__ import with_statement
from flask import Flask, render_template, request, redirect, url_for
import subprocess
from database import db_session, init_db
from models import User
import os.path
import os
import shutil
import eyeD3
import pygame
import pygame.mixer
from pygame.locals import *
import glob
from random import choice
#import sqlite3
THEME_SONGS = 'static/theme_songs'
ALLOWED_EXTENSIONS = set(['mp3'])
MUSIC_END = USEREVENT + 1
app = Flask(__name__)
app.config["DEBUG"] = True
app.config['UPLOAD_FOLDER'] = THEME_SONGS
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
@app.route("/")
def home():
return render_template("home.html")
@app.route("/init")
def init():
init_db()
return "Initialized!"
@app.route("/<username>")
def profile(username):
u = User.query.filter(User.uid == username).first()
if u:
mp3s = sorted(glob.glob("%s/%s_theme_*" % (app.config['UPLOAD_FOLDER'],username)))
#mp3fname = os.path.join(app.config['UPLOAD_FOLDER'], u.mp3)
mp3list = []
for f in mp3s:
tag = eyeD3.Tag()
tag.link(f)
mp3list.append([f, tag.getTitle()])
return render_template("profile.html", uid=u.uid, mp3s=mp3list)
return "%s is not an awesome user" % username
@app.route("/<username>/<themeId>")
def awesome(username,themeId):
# lookup sound for username
usr = User.query.filter(User.uid == username).first()
if usr is None:
return "%s isn't registered to be AWESOME. :(" % username
if themeId == "random":
songs = glob.glob("%s/%s_theme_*.mp3" % (app.config['UPLOAD_FOLDER'], username))
mp3fname = choice(songs)
else:
mp3fname = os.path.join(app.config['UPLOAD_FOLDER'], "%s_theme_%s.mp3" % (username,themeId))
tag = eyeD3.Tag()
tag.link(mp3fname)
#print "calling mikehup mpg123 %s from %s &" % (mp3fname,os.getcwd());
#subprocess.call('mpg123 %s' % mp3fname, shell=True)
if pygame.mixer.music.get_busy():
pygame.mixer.music.queue(mp3fname)
else:
pygame.mixer.music.load(mp3fname)
pygame.mixer.music.play()
#this breaks the queue, disable or now
#pygame.mixer.music.set_endevent(MUSIC_END)
return render_template('awesome.html', title=tag.getTitle(), uid=username)
@app.route("/register")
@app.route("/register/<uid>")
def register_user(uid=None):
return render_template('register.html', uid=uid)
@app.route("/add", methods=['POST'])
def add():
f = request.files['mp3']
if f and allowed_file(f.filename):
u = User(request.form['uid'], "%s_theme.mp3" % request.form['uid'])
fname = os.path.join(app.config['UPLOAD_FOLDER'], u.mp3)
f.save(fname)
if (os.path.exists(fname)):
db_session.add(u)
db_session.commit()
return redirect("/%s" % u.uid)
return "Error saving file"
return "Error reading file"
@app.route("/change", methods=['POST'])
def change():
u = User.query.filter(User.uid == request.form['uid']).first()
if u:
for f in request.files.items():
fname = ""
print "File: ",f[0]
if f[0].startswith("new_theme"):
mp3s = glob.glob("%s/%s_theme_*" % (app.config['UPLOAD_FOLDER'],u.uid))
fname = "%s_theme_%i.mp3" % (u.uid, len(mp3s)+1)
else:
fname = "%s_%s.mp3" % (u.uid,f[0])
if f[1] and allowed_file(f[1].filename):
new_fname = "new_%s" % fname
fname = os.path.join(app.config['UPLOAD_FOLDER'], fname)
new_fname = os.path.join(app.config['UPLOAD_FOLDER'], new_fname)
if os.path.exists(new_fname):
os.remove(new_fname)
f[1].save(new_fname)
if os.path.exists(new_fname):
shutil.copyfile(new_fname, fname)
os.remove(new_fname)
return redirect("/%s" % u.uid)
return "You no awesome. Try a file that works!"
return "%s isn't awesome. <a href=\"/register\">Reigster first</a>"
@app.route("/unregister/<username>")
def unregister(username):
u = User.query.filter(User.uid == username).first()
if u:
os.unlink(os.path.join(app.config['UPLOAD_FOLDER'], u.mp3))
db_session.delete(u)
db_session.commit()
return "unregistered %s" % username
return "%s doesn't exist." % username
@app.teardown_request
def shutdown_session(exception=None):
db_session.remove()
if __name__ == "__main__":
pygame.mixer.init(22050,-16,2,2048)
app.run(host='0.0.0.0', port=80)
pygame.mixer.quit()