Skip to content

Commit 2f8326c

Browse files
authored
implement hide remaster (#132)
1 parent 17993db commit 2f8326c

4 files changed

Lines changed: 90 additions & 1 deletion

File tree

api/templates/callback.html.j2

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@
105105
<span>Censor Profanity</span>
106106
</label>
107107
</div>
108+
<div class="col s12 m3">
109+
<label class="row">
110+
<input type="checkbox" class="filled-in" id="hide-remaster-checkbox" />
111+
<span>Hide Remaster</span>
112+
</label>
113+
</div>
108114
</div>
109115

110116
<div class="row center">
@@ -237,7 +243,8 @@
237243
show_offline: false,
238244
background_color: "121212",
239245
interchange:false,
240-
profanity: false
246+
profanity: false,
247+
hide_remaster: false
241248
};
242249
var openSong = false;
243250
@@ -288,6 +295,11 @@
288295
updateUrl();
289296
});
290297
298+
$("#hide-remaster-checkbox").change(function() {
299+
urlParams.hide_remaster = this.checked;
300+
updateUrl();
301+
});
302+
291303
$('#theme-select').change(function() {
292304
// Reset visibility defaults
293305
$('.bar-color').show();

api/view.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from util.firestore import get_firestore_db
66
from util.profanity import profanity_check
7+
from util.remaster import remove_remaster
78

89
load_dotenv(find_dotenv())
910

@@ -352,6 +353,7 @@ def catch_all(path):
352353
interchange = request.args.get("interchange", default="false") == "true"
353354
mode = request.args.get("mode", default="light")
354355
is_enable_profanity = request.args.get("profanity", default="false") == "true"
356+
hide_remaster = request.args.get("hide_remaster", default="false") == "true"
355357

356358
# Handle invalid request
357359
if not uid:
@@ -454,6 +456,10 @@ def catch_all(path):
454456
artist_name = profanity_check(artist_name)
455457
song_name = profanity_check(song_name)
456458

459+
# Strip remaster annotations from song title
460+
if hide_remaster:
461+
song_name = remove_remaster(song_name)
462+
457463
if interchange:
458464
x = artist_name
459465
artist_name = song_name

tests/test_util_remaster.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import sys
2+
import os
3+
4+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
5+
6+
from util.remaster import remove_remaster
7+
8+
9+
def test_no_remaster_unchanged():
10+
assert remove_remaster("Hotel California") == "Hotel California"
11+
12+
13+
def test_remaster_suffix_dash():
14+
assert remove_remaster("Hotel California - 2013 Remaster") == "Hotel California"
15+
16+
17+
def test_remaster_suffix_parens():
18+
assert remove_remaster("Come Together (Remastered)") == "Come Together"
19+
20+
21+
def test_remastered_with_year_parens():
22+
assert remove_remaster("Roxanne (Remastered 2003)") == "Roxanne"
23+
24+
25+
def test_remaster_year_before_keyword():
26+
assert remove_remaster("Starman - 2012 Remaster") == "Starman"
27+
28+
29+
def test_remastered_version():
30+
assert remove_remaster("Heroes - Remastered Version") == "Heroes"
31+
32+
33+
def test_remastered_year_version():
34+
assert remove_remaster("Life On Mars? (2015 Remastered Version)") == "Life On Mars?"
35+
36+
37+
def test_case_insensitive():
38+
assert remove_remaster("Song Title - REMASTERED") == "Song Title"
39+
40+
41+
def test_remaster_not_mid_title():
42+
"""Remaster text in the middle of a title must not be removed."""
43+
title = "Remastered Soul"
44+
assert remove_remaster(title) == "Remastered Soul"

util/remaster.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import re
2+
3+
# Matches common "Remaster" / "Remastered" suffixes appended to song titles.
4+
# Examples handled:
5+
# "Song Title - 2020 Remaster"
6+
# "Song Title (2020 Remaster)"
7+
# "Song Title (Remastered)"
8+
# "Song Title - Remastered 2020"
9+
# "Song Title (Remastered 2020 Version)"
10+
_REMASTER_RE = re.compile(
11+
r"""
12+
[\s\-–]+ # separator: whitespace and/or dash
13+
[\(\[]? # optional opening bracket
14+
(?:\d{4}\s+)? # optional year before keyword
15+
Remaster(?:ed)? # "Remaster" or "Remastered"
16+
(?:\s+\d{4})? # optional year after keyword
17+
(?:\s+Version)? # optional trailing "Version"
18+
[\)\]]? # optional closing bracket
19+
\s*$ # up to end of string
20+
""",
21+
re.IGNORECASE | re.VERBOSE,
22+
)
23+
24+
25+
def remove_remaster(name: str) -> str:
26+
"""Return *name* with any remaster annotation stripped from the end."""
27+
return _REMASTER_RE.sub("", name).strip()

0 commit comments

Comments
 (0)