-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathRacetimeAPI.cs
More file actions
106 lines (84 loc) · 2.87 KB
/
RacetimeAPI.cs
File metadata and controls
106 lines (84 loc) · 2.87 KB
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
using LiveSplit.Model;
using LiveSplit.Racetime.Controller;
using LiveSplit.Racetime.Model;
using LiveSplit.Racetime.View;
using LiveSplit.UI.Components;
using LiveSplit.Web;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
namespace LiveSplit.Racetime
{
public class RacetimeAPI : RaceProviderAPI
{
protected static readonly Uri BaseUri = new Uri($"{Properties.Resources.PROTOCOL_REST}://{Properties.Resources.DOMAIN}/");
protected static string racesEndpoint => Properties.Resources.ENDPOINT_RACES;
private static RacetimeAPI _instance;
public static RacetimeAPI Instance
{
get
{
if (_instance == null)
_instance = new RacetimeAPI();
return _instance;
}
}
public RacetimeAPI()
{
Authenticator = new RacetimeAuthenticator(new RTAuthentificationSettings());
JoinRace = Join;
CreateRace = Create;
}
public void Join(ITimerModel model, string id)
{
var channel = new RacetimeChannel(model.CurrentState, model);
var form = new ChannelForm(channel, id, model.CurrentState.LayoutSettings.AlwaysOnTop);
}
public void Warn()
{
}
public void Create(ITimerModel model)
{
Process.Start(GetUri(Properties.Resources.CREATE_RACE_ADDRESS).AbsoluteUri);
}
public IEnumerable<Race> Races { get; set; }
internal RacetimeAuthenticator Authenticator { get; set; }
public override string ProviderName => "racetime.gg";
public override string Username => Authenticator.Identity?.Name;
protected Uri GetUri(string subUri)
{
return new Uri(BaseUri, subUri);
}
public override void RefreshRacesListAsync()
{
Task.Factory.StartNew(() => RefreshRacesList());
}
protected void RefreshRacesList()
{
Races = GetRacesFromServer().ToArray();
RacesRefreshedCallback?.Invoke(this);
}
protected IEnumerable<Race> GetRacesFromServer()
{
var races = JSON.FromUri(new Uri(BaseUri.AbsoluteUri + racesEndpoint)).races;
foreach (var r in races)
{
var fulldata = JSON.FromUri(new Uri(BaseUri.AbsoluteUri + r.name + "/data"));
Race raceObj = RTModelBase.Create<Race>(fulldata);
yield return raceObj;
}
yield break;
}
public override IEnumerable<IRaceInfo> GetRaces()
{
return Races;
}
public override Image GetGameImage(string id)
{
return null;
}
}
}