1+ using System . Text . RegularExpressions ;
2+ using MiniMediaMetadataAPI . Application . Models . Database . Discogs ;
3+
4+ namespace MiniMediaMetadataAPI . Application . Helpers ;
5+
6+ public static class DiscogsHelper
7+ {
8+ public static int GetDiscNumber ( DiscogsReleaseTrack track )
9+ {
10+ //let's not process this weird stuff, not sure what it means this "arrow"
11+ if ( track . Position . Contains ( '→' ) )
12+ {
13+ return 0 ;
14+ }
15+
16+ //couldn't Discogs come to just 1 standard... this makes no sense to me
17+ string cdRegexPrefix = "^[(]{0,1}(CD|CDR|cd|cdr|CD\\ -Rom){0,}[ ]*([0-9]*)" ;
18+ string cdRegexPostfix = "(CD|CDR|cd|cdr|CD\\ -Rom){1,}([0-9]*)$" ;
19+
20+ //try postfix first otherwise we grab the Tracknumber by accident
21+ var postfixMatch = Regex . Match ( track . Position , cdRegexPostfix ) ;
22+ if ( postfixMatch . Success )
23+ {
24+ return int . TryParse ( postfixMatch . Groups . Values . LastOrDefault ( ) ? . Value , out var discNumber ) ? discNumber : 0 ;
25+ }
26+
27+ var prefixMatch = Regex . Match ( track . Position , cdRegexPrefix ) ;
28+ if ( prefixMatch . Success )
29+ {
30+ return int . TryParse ( prefixMatch . Groups . Values . LastOrDefault ( ) ? . Value , out var discNumber ) ? discNumber : 0 ;
31+ }
32+ return 0 ;
33+ }
34+
35+ public static string GetTrackNumber ( DiscogsReleaseTrack track )
36+ {
37+ //let's not process this weird stuff, not sure what it means this "arrow"
38+ if ( track . Position . Contains ( '→' ) )
39+ {
40+ return string . Empty ;
41+ }
42+
43+ //couldn't Discogs come to just 1 standard... this makes no sense to me
44+ //cd/CD/cdr/CDR optional prefix
45+ //get optional CD Number
46+ //try get tracknumber
47+ //try get tracknumber from "xx-yy"
48+ //try get tracknumber that has prefix "Track" before it
49+ string trackRegexPrefix = "^[(]{0,1}(CD|CDR|cd|cdr|CD\\ \\ -Rom){0,}[ ]*([0-9A-Z]*)[)]{0,1}[ \\ \\ -\\ \\ .\\ \\ \\ /]*([0-9]*)[\\ - ]*([0-9]*)(Track[ ]*([0-9]*))*" ;
50+
51+ var prefixMatch = Regex . Match ( track . Position , trackRegexPrefix ) ;
52+ if ( prefixMatch . Success )
53+ {
54+ return int . TryParse ( prefixMatch . Groups . Values . LastOrDefault ( ) ? . Value , out var trackNumber ) ? trackNumber . ToString ( ) : string . Empty ;
55+ }
56+
57+ return string . Empty ;
58+ }
59+ }
0 commit comments