74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
|
#!/usr/bin/env nix-shell
|
||
|
#!nix-shell -p "pkgs.python3.withPackages (p: with p; [tabulate])"
|
||
|
#!nix-shell -i python3
|
||
|
import csv
|
||
|
import os
|
||
|
import sqlite3
|
||
|
import sys
|
||
|
|
||
|
data_dir = os.environ.get("SHIMMERING_DATA_DIR")
|
||
|
db_path = data_dir + "/db.sqlite"
|
||
|
# if not os.path.exists(db_path):
|
||
|
# run(f"cat ./schema.sql | sqlite3 {db_path}")
|
||
|
conn = sqlite3.connect(db_path)
|
||
|
|
||
|
|
||
|
# {{{ Import songs
|
||
|
def import_charts_from_csv(input_file):
|
||
|
with open(input_file, mode="r") as file:
|
||
|
chart_count = 0
|
||
|
songs = dict()
|
||
|
|
||
|
for row in csv.reader(file):
|
||
|
if len(row) > 0:
|
||
|
chart_count += 1
|
||
|
[title, difficulty, level, cc, _, note_count, _, _, _] = row
|
||
|
if songs.get(title) is None:
|
||
|
songs[title] = []
|
||
|
songs[title].append((difficulty, level, cc, note_count))
|
||
|
|
||
|
for title, charts in songs.items():
|
||
|
artist = None
|
||
|
|
||
|
if title.startswith("Quon"):
|
||
|
artist = title[6:-1]
|
||
|
title = "Quon"
|
||
|
|
||
|
row = conn.execute(
|
||
|
"""
|
||
|
INSERT INTO songs(title,artist)
|
||
|
VALUES (?,?)
|
||
|
RETURNING id
|
||
|
""",
|
||
|
(title, artist),
|
||
|
).fetchone()
|
||
|
song_id = row[0]
|
||
|
|
||
|
for difficulty, level, cc, note_count in charts:
|
||
|
conn.execute(
|
||
|
"""
|
||
|
INSERT INTO charts(song_id, difficulty, level, note_count, chart_constant)
|
||
|
VALUES(?,?,?,?,?)
|
||
|
""",
|
||
|
(
|
||
|
song_id,
|
||
|
difficulty,
|
||
|
level,
|
||
|
int(note_count.replace(",", "").replace(".", "")),
|
||
|
int(float(cc) * 100),
|
||
|
),
|
||
|
)
|
||
|
|
||
|
conn.commit()
|
||
|
|
||
|
print(f"Imported {chart_count} charts and {len(songs)} songs")
|
||
|
|
||
|
|
||
|
# }}}
|
||
|
|
||
|
command = sys.argv[1]
|
||
|
subcommand = sys.argv[2]
|
||
|
|
||
|
if command == "import" and subcommand == "charts":
|
||
|
import_charts_from_csv(sys.argv[3])
|