$events = Event::where('external_schedule', 'LIKE', 'sg:%')
->where(function (Builder $query) {
$query->whereNull('end');
- $query->orWhere('end', '<', now());
+ $query->orWhere('end', '>', now());
})
->get();
private function syncEvent(Event $event) {
$sgHandle = substr($event->external_schedule, 3);
$from = now()->sub(1, 'day');
- $to = now()->add(6, 'day');
+ $to = now()->add(14, 'day');
$sgSchedule = HTTP::get('https://speedgaming.org/api/schedule/', [
'event' => $sgHandle,
'from' => $from->toIso8601String(),
->where('start', '<=', $to)
->whereNotIn('ext_id', $ext_ids);
foreach ($to_purge->get() as $episode) {
+ $episode->channels()->detach();
+ $episode->crew()->delete();
$episode->players()->delete();
}
$to_purge->delete();
$episode->event()->associate($event);
$episode->title = $sgEntry['match1']['title'];
$start = Carbon::createFromFormat('Y-m-d\TH:i:sP', $sgEntry['when']);
- if ($start->ne($episode->start)) {
+ if ($event->fix_timezone && !$episode->timezone_fix_override) {
+ $sg_zone = new \DateTimeZone('America/Detroit');
+ $event_zone = new \DateTimeZone($event->fix_timezone);
+ // if speedgaming is in DST, it fucks up the timestamp
+ if (Carbon::createFromTimestamp($start->timestamp, $sg_zone)->dst && !Carbon::createFromTimestamp($start->timestamp, $event_zone)->dst) {
+ $start->add(1, 'hour');
+ } else if (!Carbon::createFromTimestamp($start->timestamp, $sg_zone)->dst && Carbon::createFromTimestamp($start->timestamp, $event_zone)->dst) {
+ $start->sub(1, 'hour');
+ }
+ }
+ if (!$episode->start || $start->ne($episode->start)) {
$episode->start = $start;
}
$episode->estimate = $sgEntry['length'] * 60;
$this->purgeChannels($episode, $sgEntry);
$channelIds = [];
foreach ($sgEntry['channels'] as $sgChannel) {
- if ($sgChannel['initials'] == 'NONE') continue;
+ if ($sgChannel['initials'] == 'NONE' || $sgChannel['name'] == 'Undecided, Not SG') continue;
try {
$channel = $this->syncChannel($episode, $sgChannel);
$channelIds[] = $channel->id;
foreach ($sgEntry['channels'] as $sgChannel) {
$ext_ids[] = 'sg:'.$sgChannel['id'];
}
- $episode->channels()
- ->where('ext_id', 'LIKE', 'sg:%')
- ->whereNotIn('ext_id', $ext_ids)
- ->detach();
+ $channels = $episode->channels()
+ ->where('ext_id', 'LIKE', 'sg:%')
+ ->whereNotIn('ext_id', $ext_ids)
+ ->get();
+ if (!$channels->isEmpty()) {
+ $episode->channels()->detach($channels->pluck('id'));
+ }
}
private function syncChannel(Episode $episode, $sgChannel) {
if ($channel) {
return $channel;
}
+ return $episode->channels()
+ ->where('ext_id', 'LIKE', 'sg:%')
+ ->first();
}
private function getUserBySGPlayer($player) {
}
if (!empty($player['discordTag'])) {
$tag = explode('#', $player['discordTag']);
- $user = User::firstWhere([
- ['username', 'LIKE', $tag[0]],
- ['username', 'LIKE', $tag[1]],
- ]);
+ $user = count($tag) < 2 || $tag[1] == '0'
+ ? User::firstWhere([
+ ['username', 'LIKE', $tag[0]],
+ ])
+ : User::firstWhere([
+ ['username', 'LIKE', $tag[0]],
+ ['discriminator', '=', $tag[1]],
+ ]);
if ($user) return $user;
}
return null;