2024-02-07 21:34:11 +00:00
#!/usr/bin/python3
# Copyright (c) 2024 Antonia <antonia@antonia.is>
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import sys
import json
import urllib . request
import time
2024-02-08 11:17:08 +00:00
import argparse
2024-02-07 21:34:11 +00:00
2024-02-08 11:17:08 +00:00
parser = argparse . ArgumentParser ( description = ' Travelynx Integration for waybar ' )
parser . add_argument ( " token " , help = " travelynx status API token " )
parser . add_argument ( " -l " , " --last-checkin " , metavar = " MINUTES " , help = " keep showing last checkin for a given amount of minutes, 0 for indefinitely " , type = int , )
parser . add_argument ( " -d " , " --ds-100 " , action = " store_true " , help = " Prefer DS100 codes for stations " , default = False )
args = parser . parse_args ( )
token = args . token
2024-02-07 21:34:11 +00:00
contents = urllib . request . urlopen ( " https://travelynx.de/api/v1/status/ " + token ) . read ( )
response = json . loads ( contents )
2024-02-08 11:17:08 +00:00
st = " "
2024-02-07 21:34:11 +00:00
2024-02-08 11:17:08 +00:00
def get_destination ( response ) :
2024-02-07 21:34:11 +00:00
if " toStation " in response :
s = response [ " toStation " ]
2024-02-08 11:17:08 +00:00
s [ " humantime " ] = time . strftime ( " % H: % M " , time . localtime ( int ( s [ " realTime " ] ) ) )
s [ " delay " ] = ( int ( s [ " realTime " ] ) - int ( s [ " scheduledTime " ] ) ) / / 60
if " ds100 " in s and s [ " ds100 " ] and args . ds_100 :
s [ " prefname " ] = s [ " ds100 " ]
2024-02-07 21:34:11 +00:00
else :
2024-02-08 11:17:08 +00:00
s [ " prefname " ] = s [ " name " ]
return s
else :
return None
2024-02-08 17:18:58 +00:00
tooltip = " "
2024-02-08 11:17:08 +00:00
checked_in = response [ " checkedIn " ]
if checked_in or args . last_checkin is not None :
s = get_destination ( response )
elapsed = int ( time . time ( ) ) - int ( s [ " realTime " ] )
if checked_in or args . last_checkin == 0 or args . last_checkin * 60 > elapsed :
st = f ' { s [ " prefname " ] } { s [ " humantime " ] } '
if s [ " delay " ] > 0 :
st = st + " (+ %d ) " % s [ " delay " ]
2024-02-08 17:18:58 +00:00
if " train " in response :
train = response [ " train " ]
2024-02-09 14:08:03 +00:00
tooltip = f ' { train [ " type " ] } { train [ " line " ] } ( { train [ " no " ] } ) to { s [ " name " ] } '
2024-02-08 11:17:08 +00:00
2024-02-07 21:34:11 +00:00
2024-02-08 17:18:58 +00:00
print ( json . dumps ( { " text " : st , " tooltip " : tooltip , " class " : " active " , " percentage " : " " } ) )