mirror of
https://github.com/yuukiwww/taiko-web.git
synced 2024-09-08 10:41:18 +02:00
87 lines
2.4 KiB
Python
87 lines
2.4 KiB
Python
from __future__ import division
|
|
import os
|
|
import sqlite3
|
|
import re
|
|
DATABASE = 'taiko.db'
|
|
|
|
conn = sqlite3.connect(DATABASE)
|
|
curs = conn.cursor()
|
|
|
|
def parse_osu(osu):
|
|
osu_lines = open(osu, 'r').read().replace('\x00', '').split('\n')
|
|
sections = {}
|
|
current_section = (None, [])
|
|
|
|
for line in osu_lines:
|
|
line = line.strip()
|
|
secm = re.match('^\[(\w+)\]$', line)
|
|
if secm:
|
|
if current_section:
|
|
sections[current_section[0]] = current_section[1]
|
|
current_section = (secm.group(1), [])
|
|
else:
|
|
if current_section:
|
|
current_section[1].append(line)
|
|
else:
|
|
current_section = ('Default', [line])
|
|
|
|
if current_section:
|
|
sections[current_section[0]] = current_section[1]
|
|
|
|
return sections
|
|
|
|
|
|
def get_osu_key(osu, section, key, default=None):
|
|
sec = osu[section]
|
|
for line in sec:
|
|
ok = line.split(':', 1)[0].strip()
|
|
ov = line.split(':', 1)[1].strip()
|
|
|
|
if ok.lower() == key.lower():
|
|
return ov
|
|
|
|
return default
|
|
|
|
|
|
def get_preview(song_id, song_type):
|
|
preview = 0
|
|
|
|
if song_type == "tja":
|
|
if os.path.isfile('public/songs/%s/main.tja' % song_id):
|
|
preview = get_tja_preview('public/songs/%s/main.tja' % song_id)
|
|
else:
|
|
osus = [osu for osu in os.listdir('public/songs/%s' % song_id) if osu in ['easy.osu', 'normal.osu', 'hard.osu', 'oni.osu']]
|
|
if osus:
|
|
osud = parse_osu('public/songs/%s/%s' % (song_id, osus[0]))
|
|
preview = int(get_osu_key(osud, 'General', 'PreviewTime', 0))
|
|
|
|
return preview
|
|
|
|
|
|
def get_tja_preview(tja):
|
|
tja_lines = open(tja, 'r').read().replace('\x00', '').split('\n')
|
|
|
|
for line in tja_lines:
|
|
line = line.strip()
|
|
if ':' in line:
|
|
name, value = line.split(':', 1)
|
|
if name.lower() == 'demostart':
|
|
value = value.strip()
|
|
try:
|
|
value = float(value)
|
|
except ValueError:
|
|
pass
|
|
else:
|
|
return int(value * 1000)
|
|
elif line.lower() == '#start':
|
|
break
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
songs = curs.execute('select id, type from songs').fetchall()
|
|
for song in songs:
|
|
preview = get_preview(song[0], song[1]) / 1000
|
|
curs.execute('update songs set preview = ? where id = ?', (preview, song[0]))
|
|
conn.commit()
|