Skip to content

Commit 92a449b

Browse files
committed
feat: added orf1 support, added colored buttons to mtva text
1 parent 74da49f commit 92a449b

2 files changed

Lines changed: 240 additions & 43 deletions

File tree

main.py

Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22

33
import requests
44
from bs4 import BeautifulSoup
5+
import json
56

67

7-
8-
class TeletextReader:
8+
class hunTeletextReader:
99
def __init__(self):
1010
self.pagenum = "100"
1111
self.subpage = "01"
1212
self.getPage()
13+
self.colorbuttonsInit()
1314

1415
def getPage(self):
1516
url = f"https://teletext.hu/mtv1/{self.pagenum}-{self.subpage}.HTM"
@@ -19,7 +20,7 @@ def getPage(self):
1920
#"headers": {"Referer": "https://teletext.hu/"}
2021
}
2122

22-
rq=requests.post(url, **kwargs)
23+
rq=requests.get(url, **kwargs)
2324
self.soup = BeautifulSoup(rq.text, 'html.parser')
2425

2526
@property
@@ -60,3 +61,64 @@ def nextSubpage(self):
6061
return None
6162
else:
6263
return value
64+
65+
def colorbuttonsInit(self):
66+
try:
67+
buttons = []
68+
for button in self.soup.find_all('area'):
69+
buttons.append(button.get('href').replace('.HTM', '').split('-'))
70+
self.colorbuttons = [buttons[0], buttons[1], buttons[2], buttons[3]]
71+
return self.colorbuttons
72+
except:
73+
return self.colorbuttons
74+
75+
class atTeletextReader:
76+
def __init__(self, *args, **kwargs):
77+
self.pagenum = "100"
78+
self.subpage = "01"
79+
self.stationid = "orf1"
80+
81+
def getPage(self):
82+
url = f"https://afeeds.orf.at/teletext/api/v2/mobile/channels/orf1/pages/{self.pagenum}"
83+
rq=requests.get(url)
84+
self.json = json.loads(rq.text)
85+
86+
@property
87+
def getPageGif(self):
88+
#test rq
89+
url = f"https://appmeta.orf.at/teletext/{self.stationid}/{self.pagenum}_00{self.subpage}.png"
90+
return url
91+
92+
@property
93+
def prevPage(self):
94+
value = self.json["previousPage"]
95+
if value == '0' or value == 0:
96+
return None
97+
else:
98+
return str(value)
99+
100+
@property
101+
def nextPage(self):
102+
value = self.json["nextPage"]
103+
if value == '0' or value == 0:
104+
return None
105+
else:
106+
return str(value)
107+
108+
@property
109+
def subpages(self):
110+
value = len(teletext.json["subpages"])
111+
if value == '0' or value == 0:
112+
return None
113+
else:
114+
print(value)
115+
return value
116+
117+
def checkpageNum(self, pageNum):
118+
try:
119+
url = f"https://afeeds.orf.at/teletext/api/v2/mobile/channels/orf1/pages/{pageNum}"
120+
rq=requests.get(url)
121+
json.loads(rq.text)
122+
return True
123+
except:
124+
return False

window.py

Lines changed: 175 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from main import TeletextReader
1+
from main import *
22

33
import gi
44

@@ -7,18 +7,54 @@
77
from gi.repository import Gtk, Gdk, Adw, Gio, GdkPixbuf
88

99

10-
# css_provider = Gtk.CssProvider()
11-
# css_provider.load_from_path("")
12-
# Gtk.StyleContext.add_provider_for_display(Gdk.Display.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
10+
css_provider = Gtk.CssProvider()
11+
css_provider.load_from_string("""
12+
.margin {
13+
margin: 15px;
14+
}
15+
.image {
16+
margin-left: 30px;
17+
margin-right: 30px;
18+
border-radius: 10px;
19+
}
20+
.nav {
21+
margin-top: 30px;
22+
margin-bottom: 31px;
23+
}
24+
.redbutton {
25+
margin-left: 40px;
26+
margin-right: 120px;
27+
background-color: red;
28+
border-radius: 20px;
29+
}
30+
.greenbutton {
31+
margin-right: 100px;
32+
background-color: lime;
33+
border-radius: 20px;
34+
}
35+
.yellowbutton {
36+
margin-right: 100px;
37+
background-color: yellow;
38+
border-radius: 20px;
39+
}
40+
.bluebutton {
41+
margin-left: 20px;
42+
margin-right: 40px;
43+
background-color: blue;
44+
border-radius: 20px;
45+
}
46+
""")
47+
Gtk.StyleContext.add_provider_for_display(Gdk.Display.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
1348

1449

1550
class MainWindow(Gtk.ApplicationWindow):
1651
def __init__(self, *args, **kwargs):
1752
super().__init__(*args, **kwargs)
18-
self.set_default_size(800, 600)
53+
self.set_default_size(580, 685)
1954
self.set_title("Teletext")
2055
self.titlebar = Gtk.HeaderBar()
2156
self.set_titlebar(self.titlebar)
57+
self.country = "hu"
2258

2359
action = Gio.SimpleAction.new("home", None)
2460
action.connect("activate", self.home)
@@ -44,25 +80,60 @@ def __init__(self, *args, **kwargs):
4480

4581
self.titlebar.pack_start(self.homebutton)
4682

47-
self.teletext = TeletextReader()
83+
match self.country:
84+
case "hu":
85+
self.teletext = hunTeletextReader()
86+
case "at":
87+
self.teletext = atTeletextReader()
4888
self.home()
4989

5090
def home(self, *args, **kwargs):
5191
self.teletext.getPage()
5292
self.cbox = Gtk.CenterBox()
5393
self.set_child(self.cbox)
54-
self.ccbox = Gtk.CenterBox()
94+
self.ccbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
5595
self.cbox.set_center_widget(self.ccbox)
56-
5796
img = Gio.File.new_for_uri(self.teletext.getPageGif)
5897
img2 = GdkPixbuf.Pixbuf.new_from_stream(img.read(cancellable=None))
5998
image = Gtk.Image().new_from_pixbuf(img2)
99+
match self.country:
100+
case "hu":
101+
self.teletext.colorbuttonsInit()
60102
image.set_pixel_size(520)
61-
self.ccbox.set_start_widget(image)
103+
image.set_css_classes(["image"])
104+
self.ccbox.append(image)
105+
106+
if self.country == "hu":
107+
#buttons
108+
self.colorbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
109+
110+
redbutton = Gtk.Button()
111+
redbutton.set_css_classes(["redbutton"])
112+
redbutton.connect('clicked', self.redbuttonHandler)
113+
self.colorbox.append(redbutton)
114+
115+
greenbutton = Gtk.Button()
116+
greenbutton.set_css_classes(["greenbutton"])
117+
greenbutton.connect('clicked', self.greenbuttonHandler)
118+
self.colorbox.append(greenbutton)
119+
120+
yellowbutton = Gtk.Button()
121+
yellowbutton.set_css_classes(["yellowbutton"])
122+
yellowbutton.connect('clicked', self.yellowbuttonHandler)
123+
self.colorbox.append(yellowbutton)
124+
125+
bluebutton = Gtk.Button()
126+
bluebutton.set_css_classes(["bluebutton"])
127+
bluebutton.connect('clicked', self.bluebuttonHandler)
128+
self.colorbox.append(bluebutton)
129+
130+
self.ccbox.append(self.colorbox)
62131

63132
self.inputbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
64133
self.inputbox.set_valign(Gtk.Align.CENTER)
65-
self.ccbox.set_end_widget(self.inputbox)
134+
self.inputbox.set_halign(Gtk.Align.CENTER)
135+
self.inputbox.set_css_classes(["nav"])
136+
self.ccbox.append(self.inputbox)
66137

67138
text = Gtk.Label()
68139
text.set_markup('<span size="large">Page Number</span>')
@@ -99,43 +170,107 @@ def pagenumEntry(self, *args, **kwargs):
99170
buf = self.input.get_buffer()
100171
text = buf.get_text()
101172
if len(text) == 3:
102-
self.teletext.pagenum = text
103-
self.home()
173+
if self.teletext.checkpageNum(text):
174+
self.teletext.pagenum = text
175+
self.home()
176+
else:
177+
self.teletext.pagenum = "100"
178+
self.home()
104179

105180
def nextPage(self, *args, **kwargs):
106-
nextpage = self.teletext.nextPage
107-
if nextpage == None:
108-
pass
109-
else:
110-
self.teletext.pagenum = nextpage[0]
111-
self.teletext.subpage = nextpage[1]
112-
self.home()
181+
match self.country:
182+
case "hu":
183+
nextpage = self.teletext.nextPage
184+
if nextpage == None:
185+
pass
186+
else:
187+
self.teletext.pagenum = nextpage[0]
188+
self.teletext.subpage = nextpage[1]
189+
self.home()
190+
case "at":
191+
try:
192+
self.teletext.pagenum = self.teletext.nextPage
193+
self.teletext.getPage()
194+
except:
195+
self.teletext.pagenum = "100"
196+
self.home()
113197

114198
def prevPage(self, *args, **kwargs):
115-
prevpage = self.teletext.prevPage
116-
if prevpage == None:
117-
pass
118-
else:
119-
self.teletext.pagenum = prevpage[0]
120-
self.teletext.subpage = prevpage[1]
121-
self.home()
199+
match self.country:
200+
case "hu":
201+
prevpage = self.teletext.prevPage
202+
if prevpage == None:
203+
pass
204+
else:
205+
self.teletext.pagenum = prevpage[0]
206+
self.teletext.subpage = prevpage[1]
207+
self.home()
208+
case "at":
209+
try:
210+
self.teletext.pagenum = self.teletext.prevPage
211+
self.teletext.getPage()
212+
except:
213+
self.teletext.pagenum = "100"
214+
self.home()
122215
def nextsubPage(self, *args, **kwargs):
123-
nextsubpage = self.teletext.nextSubpage
124-
if nextsubpage == None:
125-
pass
126-
else:
127-
self.teletext.pagenum = nextsubpage[0]
128-
self.teletext.subpage = nextsubpage[1]
129-
self.home()
216+
match self.country:
217+
case "hu":
218+
nextsubpage = self.teletext.nextSubpage
219+
if nextsubpage == None:
220+
pass
221+
else:
222+
self.teletext.pagenum = nextsubpage[0]
223+
self.teletext.subpage = nextsubpage[1]
224+
self.home()
225+
case "at":
226+
try:
227+
nextsubpage = int(self.teletext.subpage)+1
228+
if nextsubpage < self.teletext.subpages:
229+
self.teletext.subpage = f"{nextsubpage:02d}"
230+
self.home()
231+
except:
232+
self.teletext.subpage = "01"
233+
self.home()
130234

131235
def prevsubPage(self, *args, **kwargs):
132-
prevsubpage = self.teletext.prevSubpage
133-
if prevsubpage == None:
134-
pass
135-
else:
136-
self.teletext.pagenum = prevsubpage[0]
137-
self.teletext.subpage = prevsubpage[1]
138-
self.home()
236+
match self.country:
237+
case "hu":
238+
prevsubpage = self.teletext.prevSubpage
239+
if prevsubpage == None:
240+
pass
241+
else:
242+
self.teletext.pagenum = prevsubpage[0]
243+
self.teletext.subpage = prevsubpage[1]
244+
self.home()
245+
case "at":
246+
try:
247+
prevsubpage = int(self.teletext.subpage)-1
248+
if prevsubpage >= 1:
249+
self.teletext.subpage = f"{prevsubpage:02d}"
250+
self.home()
251+
except:
252+
self.teletext.subpage = "01"
253+
self.home()
254+
255+
def redbuttonHandler(self, *args, **kwargs):
256+
self.teletext.pagenum = self.teletext.colorbuttons[0][0]
257+
self.teletext.subpage = self.teletext.colorbuttons[0][1]
258+
self.home()
259+
260+
def greenbuttonHandler(self, *args, **kwargs):
261+
self.teletext.pagenum = self.teletext.colorbuttons[1][0]
262+
self.teletext.subpage = self.teletext.colorbuttons[1][1]
263+
self.home()
264+
265+
def yellowbuttonHandler(self, *args, **kwargs):
266+
self.teletext.pagenum = self.teletext.colorbuttons[2][0]
267+
self.teletext.subpage = self.teletext.colorbuttons[2][1]
268+
self.home()
269+
270+
def bluebuttonHandler(self, *args, **kwargs):
271+
self.teletext.pagenum = self.teletext.colorbuttons[3][0]
272+
self.teletext.subpage = self.teletext.colorbuttons[3][1]
273+
self.home()
139274

140275

141276
class MyApp(Adw.Application):

0 commit comments

Comments
 (0)