This repository has been archived by the owner on May 16, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Cue.cs
122 lines (109 loc) · 4.03 KB
/
Cue.cs
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
using Newtonsoft.Json;
using System;
using System.IO;
using System.Text.RegularExpressions;
namespace Tiesto.Podcast
{
class Cue
{
static string pathToSave;
public static void Write(ComboboxItem data, string json_data)
{
var json = JsonConvert.DeserializeObject<Tiesto.Mix>(json_data);
pathToSave = Path.Combine(Download.Folder, Download.FileName.Replace("m4a", "cue"));
WriteHeader(data.Year, data.Episode, Download.FileName);
int tracknumber = 1;
int lasttime = 0;
foreach (var x in json.mixPodcastTracks)
{
bool guest = false;
if (tracknumber == 1)
{
AddIntro(tracknumber, Data.Normalize(x.artist), "Intro", 0);
}
else
{
guest = true;
}
foreach (var y in x.tracks)
{
tracknumber++;
if (y.track.starttime != 0)
{
lasttime = y.track.starttime;
}
else
{
lasttime += 60;
}
if (guest)
{
AddIntro(tracknumber, Data.Normalize(x.artist), "Guest Mix", lasttime);
tracknumber++;
lasttime += 30;
guest = false;
}
AddTrack(tracknumber, x.artist, Data.Normalize(y.track.title), lasttime);
}
}
}
private static void WriteHeader(string year, string episode, string filename)
{
File.WriteAllText(pathToSave,
$"REM GENRE Electronic Dance Music\r\n" +
$"REM DATE {year}\r\n" +
$"PERFORMER \"Tiësto\"\r\n" +
$"TITLE \"Club Life {episode}\"\r\n" +
$"FILE \"{filename}\" M4A\r\n");
}
private static void WriteTrack(int trackNumber, string performer, string title, int startTime)
{
var ts = TimeSpan.FromSeconds(startTime);
string duration = $"{ts.Minutes.ToString("00")}:{ts.Seconds.ToString("00")}:{ts.Milliseconds.ToString("00")}";
File.AppendAllText(pathToSave,
$" TRACK {trackNumber.ToString("00")} AUDIO\r\n" +
$" TITLE \"{title}\"\r\n" +
$" PERFORMER \"{performer}\"\r\n" +
$" INDEX 01 {duration}\r\n");
}
private static void AddIntro(int trackNumber, string artist, string trackName, int startTime)
{
string performer = Data.GetPerformer(artist);
WriteTrack(trackNumber, performer, trackName, startTime);
}
private static void AddTrack(int trackNumber, string artist, string trackName, int startTime)
{
var match = new Regex(@"(.+).?[-–_].?(.+)").Match(trackName);
string title, performer;
if (match.Success)
{
string value1 = match.Groups[1].Value.Trim();
string value2 = match.Groups[2].Value.Trim();
if (!value1.ToLower().Contains("guest"))
{
performer = value1;
title = value2;
}
else
{
performer = value2;
title = value1;
}
}
else
{
if (!trackName.ToLower().Contains("guest"))
{
performer = trackName;
title = "Mixed Track";
}
else
{
performer = Data.GetPerformer(artist);
title = "Mixed Track";
}
}
WriteTrack(trackNumber, performer, title, startTime);
}
}
}