2020-09-30 17:12:29 +00:00
% if (my $invalid = stash('invalid')) {
%= include '_invalid_input', invalid => $invalid
% }
<h1>Träwelling</h1>
2023-08-07 19:17:10 +00:00
% if (flash('new_traewelling')) {
2020-09-30 17:12:29 +00:00
<div class="row">
<div class="col s12">
% if ($traewelling->{token}) {
<div class="card success-color">
<div class="card-content white-text">
<span class="card-title">Träwelling verknüpft</span>
2023-08-07 19:17:10 +00:00
% my $user = $traewelling->{data}{user_name} // '???';
2023-08-09 17:28:36 +00:00
<p>Dein travelynx-Account ist nun mit dem Träwelling-Account <b>@<%= $user %></b> verbunden.</p>
2020-09-30 17:12:29 +00:00
</div>
</div>
% }
2023-08-07 19:17:10 +00:00
% elsif (my $login_err = flash('login_error')) {
2020-09-30 17:12:29 +00:00
<div class="card caution-color">
<div class="card-content white-text">
<span class="card-title">Login-Fehler</span>
<p>Der Login bei Träwelling ist fehlgeschlagen: <%= $login_err %></p>
</div>
</div>
% }
% elsif (my $logout_err = stash('logout_error')) {
<div class="card caution-color">
<div class="card-content white-text">
<span class="card-title">Logout-Fehler</span>
<p>Der Logout bei Träwelling ist fehlgeschlagen: <%= $logout_err %>.
2023-08-07 19:17:10 +00:00
Dein Token bei travelynx wurde dennoch gelöscht, so
2020-09-30 17:12:29 +00:00
dass nun kein Zugriff von travelynx auf Träwelling mehr
möglich ist. In den <a
href="https://traewelling.de/settings">Träwelling-Einstellungen</a>
kannst du ihn vollständig löschen.</p>
</div>
</div>
% }
</div>
</div>
% }
2023-01-08 08:48:16 +00:00
<div class="row">
<div class="col s12">
<div class="card purple">
<div class="card-content white-text">
<span class="card-title">Eingeschränkte Synchronisierung</span>
<p>
Träwelling und travelynx setzen unterschiedliche Schwerpunkte und haben unterschiedliche Features.
2023-08-14 10:24:26 +00:00
Kombiniert mit der Vielzahl an möglichen Randfällen heißt das, dass die Synchronisierung nicht immer funktioniert.
2023-01-08 08:48:16 +00:00
Diese Einschränkung ist bekannt und wird voraussichtlich bestehen bleiben.
</p>
<p>
2023-08-14 10:24:26 +00:00
Bei hohen Verspätungen, Ausfällen und nachträglichen Checkin-Änderungen ist die Synchronisierung u.U. nicht möglich und muss von Hand vorgenommen werden.
2023-01-08 08:48:16 +00:00
Träwelling-Checkins in Nahverkehrsmittel und Züge außerhalb von Deutschland werden von travelynx nicht unterstützt.
Ebenso werden travelynx-Hooks bei via Träwelling vorgenommenen Checkins nicht ausgelöst.
</p>
</div>
<div class="card-action">
<a href="https://github.com/derf/travelynx/issues" class="waves-effect waves-light btn-flat white-text">
<i class="material-icons left" aria-hidden="true">bug_report</i>Bug melden
</a>
</div>
</div>
</div>
</div>
2020-10-04 09:51:22 +00:00
% if ($traewelling->{token} and ($traewelling->{expired} or $traewelling->{expiring})) {
<div class="row">
<div class="col s12">
<div class="card caution-color">
<div class="card-content white-text">
% if ($traewelling->{expired}) {
2023-08-07 19:17:10 +00:00
<span class="card-title">Token abgelaufen</span>
2020-10-04 09:51:22 +00:00
% }
% else {
2023-08-07 19:17:10 +00:00
<span class="card-title">Token läuft bald ab</span>
2020-10-04 09:51:22 +00:00
% }
<p>Melde deinen travelynx-Account von Träwelling ab und
verbinde ihn mit deinem Träwelling-Passwort erneut,
um einen neuen Token zu erhalten.</p>
</div>
<div class="card-action">
%= form_for '/account/traewelling' => (method => 'POST') => begin
%= csrf_field
<button class="btn-flat waves-effect waves-light white-text" type="submit" name="action" value="logout">
<i class="material-icons left" aria-hidden="true">sync_disabled</i>
Abmelden
</button>
%= end
</div>
</div>
</div>
</div>
% }
2020-09-30 17:12:29 +00:00
% if (not $traewelling->{token}) {
<div class="row">
<div class="col s12">
<p>
Hier hast du die Möglichkeit, deinen travelynx-Account mit einem
Account bei <a href="https://traewelling.de">Träwelling</a> zu
2021-10-30 08:07:08 +00:00
verknüpfen. Dies erlaubt die automatische Übernahme zukünftiger
Checkins zwischen den beiden Diensten. Träwelling-Checkins in
2020-09-30 17:12:29 +00:00
Nahverkehrsmittel und Züge außerhalb des deutschen Schienennetzes
2023-08-07 19:17:10 +00:00
werden (noch) nicht unterstützt und ignoriert. Checkins, die
vor dem Verknüpfen der Accounts stattgefunden haben, werden
nicht synchronisiert. Bei synchronisierten Checkins wird der
zugehörige Träwelling-Status von deiner travelynx-Statusseite
aus verlinkt.
2020-09-30 17:12:29 +00:00
</p>
</div>
</div>
<div class="row">
2023-08-07 19:17:10 +00:00
%= form_for '/oauth/traewelling' => (method => 'POST') => begin
2020-09-30 17:12:29 +00:00
%= csrf_field
<div class="col s12 center-align">
2023-08-07 19:17:10 +00:00
<button class="btn waves-effect waves-light" type="submit" name="action" value="connect">
2020-09-30 17:12:29 +00:00
Verknüpfen
<i class="material-icons right">send</i>
</button>
</div>
%= end
</div>
% }
% else {
<div class="row">
<div class="col s12">
<p>
Dieser travelynx-Account ist mit dem Träwelling-Account
% if (my $user = $traewelling->{data}{user_name}) {
2021-12-01 16:52:09 +00:00
<a href="https://traewelling.de/@<%= $user %>"><%= $user %></a>
2020-09-30 17:12:29 +00:00
% }
% else {
%= $traewelling->{email}
% }
2023-08-09 17:28:36 +00:00
verknüpft. Der aktuelle Token läuft <%= $traewelling->{expires_on}->strftime('am %d.%m.%Y um %H:%M Uhr') %> ab.
2020-09-30 17:12:29 +00:00
</p>
</div>
</div>
%= form_for '/account/traewelling' => (method => 'POST') => begin
2020-10-04 10:50:41 +00:00
%= csrf_field
2020-09-30 17:12:29 +00:00
<div class="row">
<div class="input-field col s12">
<div>
<label>
%= radio_button sync_source => 'none'
<span>Keine Synchronisierung</span>
</label>
</div>
</div>
<div class="input-field col s12">
<div>
<label>
2020-10-01 17:36:35 +00:00
%= radio_button sync_source => 'travelynx'
2020-09-30 17:12:29 +00:00
<span>Checkin-Synchronisierung travelynx → Träwelling</span>
</label>
</div>
2020-10-04 10:50:41 +00:00
<div>
<label>
%= check_box toot => 1
<span>… Checkin auf Mastodon veröffentlichen</span>
</label>
</div>
<div>
<label>
%= check_box tweet => 1
<span>… Checkin auf Twitter veröffentlichen</span>
</label>
</div>
2020-09-30 17:12:29 +00:00
<p>Die Synchronisierung erfolgt spätestens drei Minuten nach der
2023-06-18 06:43:34 +00:00
Zielwahl. Beachte, dass die Synchronisierung travelynx
→ Träwelling unabhängig von der eingestellten Sichtbarkeit
2023-07-13 19:10:36 +00:00
des Checkins erfolgt. travelynx reicht die Sichtbarkeit
aber an Träwelling weiter.
2023-06-18 06:43:34 +00:00
Träwelling-Checkins können von travelynx aktuell nicht
2020-10-01 17:48:18 +00:00
rückgängig gemacht werden. Eine nachträgliche Änderung der
2020-10-04 10:50:41 +00:00
Zielstation wird nicht übernommen. Mastodon und Twitter beziehen
sich auf die in den <a
href="https://traewelling.de/settings">Träwelling-Einstellungen</a>
verknüpften Accounts.</p>
2020-09-30 17:12:29 +00:00
</div>
<div class="input-field col s12">
<div>
<label>
%= radio_button sync_source => 'traewelling'
<span>Checkin-Synchronisierung Träwelling → travelynx</span>
</label>
</div>
2023-01-07 12:57:47 +00:00
<p>Alle fünf Minuten wird dein Status auf Träwelling abgefragt.
2023-08-14 10:24:26 +00:00
Falls du gerade in eingecheckt bist, wird der Checkin von
travelynx übernommen. Träwelling-Checkins in Züge
außerhalb des deutschen Schienennetzes werden noch nicht
2023-07-13 19:10:36 +00:00
unterstützt. Die Sichtbarkeit von Träwelling-Checkins wird
derzeit von travelynx nicht berücksichtigt.</p>
2020-09-30 17:12:29 +00:00
</div>
</div>
<div class="row hide-on-small-only">
<div class="col s12 m6 l6 center-align">
<button class="btn waves-effect waves-light red" type="submit" name="action" value="logout">
Abmelden
<i class="material-icons right" aria-hidden="true">sync_disabled</i>
</button>
</div>
<div class="col s12 m6 l6 center-align">
<button class="btn waves-effect waves-light" type="submit" name="action" value="config">
Speichern
<i class="material-icons right" aria-hidden="true">send</i>
</button>
</div>
</div>
<div class="row hide-on-med-and-up">
<div class="col s12 m6 l6 center-align">
<button class="btn waves-effect waves-light" type="submit" name="action" value="config">
Speichern
<i class="material-icons right" aria-hidden="true">send</i>
</button>
</div>
<div class="col s12 m6 l6 center-align" style="margin-top: 1em;">
<button class="btn waves-effect waves-light red" type="submit" name="action" value="logout">
Abmelden
<i class="material-icons right" aria-hidden="true">sync_disabled</i>
</button>
</div>
</div>
%= end
<h2>Status</h2>
<div class="row">
<div class="col s12"">
% if ($traewelling->{latest_run}->epoch) {
2020-09-30 17:46:54 +00:00
Letzter Checkin <%= $traewelling->{latest_run}->strftime('am %d.%m.%Y um %H:%M:%S') %><br/>
2020-09-30 17:12:29 +00:00
% if ($traewelling->{errored}) {
<i class="material-icons left">error</i>
Fehler: <%= $traewelling->{data}{error} %>
% }
% }
% else {
2020-09-30 17:46:54 +00:00
Bisher wurde noch kein Checkin übernommen.
2020-09-30 17:12:29 +00:00
% }
</div>
</div>
<h2>Log</h2>
<div class="row">
<div class="col s12"">
<ul>
% for my $log_entry (@{$traewelling->{data}{log} // []}) {
<li>
<%= $log_entry->[0]->strftime('%d.%m.%Y %H:%M:%S') %> –
% if ($log_entry->[2]) {
Träwelling <a href="https://traewelling.de/status/<%= $log_entry->[2] %>">#<%= $log_entry->[2] %></a> –
% }
%= $log_entry->[1]
</li>
% }
</ul>
</div>
</div>
% }