Skip to content

Commit 826c1a9

Browse files
committed
[OpenATVreader]
* cleanup actionmaps * add GitHub ruff action * add GitHub autotag action
1 parent 0cdc169 commit 826c1a9

File tree

5 files changed

+181
-78
lines changed

5 files changed

+181
-78
lines changed

.github/workflows/ruff.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: Ruff Linter
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
pull_request:
8+
9+
workflow_dispatch:
10+
11+
jobs:
12+
lint:
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- name: Checkout Repository
17+
uses: actions/checkout@v4
18+
19+
- name: Set up Python
20+
uses: actions/setup-python@v4
21+
with:
22+
python-version: '3.12'
23+
24+
- name: Install Ruff
25+
run: |
26+
python -m pip install --upgrade pip
27+
pip install ruff
28+
29+
- name: Run Ruff
30+
run: |
31+
cd src
32+
ruff check .

.github/workflows/tag_release.yml

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
name: Create Tag and Release on Version Change
2+
3+
on:
4+
push:
5+
paths:
6+
- src/__init__.py
7+
branches:
8+
- master
9+
workflow_dispatch:
10+
11+
permissions:
12+
contents: write
13+
14+
jobs:
15+
tag_and_release:
16+
runs-on: ubuntu-latest
17+
steps:
18+
- name: Checkout
19+
uses: actions/checkout@v4
20+
with:
21+
fetch-depth: 0
22+
23+
- name: Read version from file
24+
id: get_version
25+
run: |
26+
VERSION=$(grep -oP '(?<=__version__ = ")[^"]+' src/__init__.py)
27+
echo "version=$VERSION" >> $GITHUB_OUTPUT
28+
29+
- name: Check if tag already exists
30+
id: check_tag
31+
run: |
32+
if git ls-remote --tags origin | grep -q "refs/tags/v${{ steps.get_version.outputs.version }}$"; then
33+
echo "Tag v${{ steps.get_version.outputs.version }} already exists."
34+
echo "skip=true" >> $GITHUB_OUTPUT
35+
exit 0
36+
fi
37+
38+
- name: Create and push tag
39+
if: steps.check_tag.outputs.skip != 'true'
40+
run: |
41+
git config user.name "github-actions[bot]"
42+
git config user.email "github-actions[bot]@users.noreply.github.com"
43+
git tag v${{ steps.get_version.outputs.version }}
44+
git push origin v${{ steps.get_version.outputs.version }}
45+
46+
- name: Generate changelog
47+
id: changelog
48+
if: steps.check_tag.outputs.skip != 'true'
49+
run: |
50+
LAST_TAG=$(git describe --tags --abbrev=0 --exclude "v${{ steps.get_version.outputs.version }}" 2>/dev/null || echo "")
51+
52+
if [ -z "$LAST_TAG" ]; then
53+
echo "No previous tag found, showing last 10 commits."
54+
CHANGELOG=$(git log --pretty=format:"- %s (%h)" --no-merges -n 10)
55+
else
56+
echo "Previous tag: $LAST_TAG"
57+
CHANGELOG=$(git log "$LAST_TAG"..HEAD --pretty=format:"- %s (%h)" --no-merges -n 10)
58+
fi
59+
60+
# Escape only % to avoid GitHub Actions output issues
61+
CHANGELOG="${CHANGELOG//'%'/'%25'}"
62+
63+
echo "changelog<<EOF" >> $GITHUB_OUTPUT
64+
echo "$CHANGELOG" >> $GITHUB_OUTPUT
65+
echo "EOF" >> $GITHUB_OUTPUT
66+
67+
- name: Create GitHub Release
68+
if: steps.check_tag.outputs.skip != 'true'
69+
uses: softprops/action-gh-release@v2
70+
with:
71+
tag_name: v${{ steps.get_version.outputs.version }}
72+
name: Release v${{ steps.get_version.outputs.version }}
73+
body: |
74+
## Changes in this release
75+
${{ steps.changelog.outputs.changelog }}
76+
env:
77+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

CONTROL/control

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Package: enigma2-plugin-extensions-openatvreader
2-
Version: 2.0b
2+
Version: 2.1
33
Section: extra
44
Architecture: all
55
Maintainer: Mr.Servo
66
Source: https://github.com/openatv/openatvreader
7-
Description: openATV Reader v2.0b
7+
Description: openATV Reader v2.1

src/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
__version__ = "2.1"

src/plugin.py

Lines changed: 68 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
# the license), but it may not be commercially distributed. Advertise with this tool is not allowed. #
77
# For other uses, permission from the authors is necessary. #
88
#########################################################################################################
9-
from .forumparser import fparser
10-
119
from glob import glob
1210
from os import rename, makedirs, linesep
1311
from os.path import join, exists
@@ -16,12 +14,6 @@
1614
from twisted.internet.reactor import callInThread
1715
from urllib.parse import urlparse, parse_qs
1816
from enigma import getDesktop, eTimer, BT_SCALE, BT_KEEP_ASPECT_RATIO
19-
SUPPALLIMGS = True
20-
try:
21-
from enigma import detectImageType # new function in OpenATV 7.6.0 and newer
22-
except ImportError:
23-
SUPPALLIMGS = False
24-
from imghdr import what # DEPRECATED function in OpenATV 7.5.1 or older
2517
from Components.ActionMap import ActionMap, NumberActionMap
2618
from Components.ConditionalWidget import BlinkingWidget
2719
from Components.Label import Label
@@ -35,10 +27,19 @@
3527
from Tools.BoundFunction import boundFunction
3628
from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CONFIG
3729
from Tools.LoadPixmap import LoadPixmap
30+
from . import __version__
31+
from .forumparser import fparser
32+
33+
SUPPALLIMGS = True
34+
try:
35+
from enigma import detectImageType # new function in OpenATV 7.6.0 and newer
36+
except ImportError:
37+
SUPPALLIMGS = False
38+
from imghdr import what # DEPRECATED function in OpenATV 7.5.1 or older
3839

3940

4041
class ATVglobals:
41-
VERSION = "V2.1"
42+
VERSION = f"V{__version__}"
4243
AVATARPATH = "/tmp/avatare"
4344
PLUGINPATH = resolveFilename(SCOPE_PLUGINS, "Extensions/OpenATVreader/")
4445
FAVORITEN = resolveFilename(SCOPE_CONFIG, "openatvreader_fav.dat")
@@ -162,18 +163,20 @@ def __init__(self, session, number):
162163
self["version"] = StaticText(self.VERSION)
163164
self["headline"] = StaticText()
164165
self["number"] = StaticText(self.field)
165-
self['actions'] = NumberActionMap(['SetupActions'], {"ok": self.keyOK,
166-
"cancel": self.quit,
167-
"1": self.keyNumber,
168-
"2": self.keyNumber,
169-
"3": self.keyNumber,
170-
"4": self.keyNumber,
171-
"5": self.keyNumber,
172-
"6": self.keyNumber,
173-
"7": self.keyNumber,
174-
"8": self.keyNumber,
175-
"9": self.keyNumber,
176-
"0": self.keyNumber})
166+
self['actions'] = NumberActionMap(['OkCancelActions'], {
167+
"ok": self.keyOK,
168+
"cancel": self.quit,
169+
"1": self.keyNumber,
170+
"2": self.keyNumber,
171+
"3": self.keyNumber,
172+
"4": self.keyNumber,
173+
"5": self.keyNumber,
174+
"6": self.keyNumber,
175+
"7": self.keyNumber,
176+
"8": self.keyNumber,
177+
"9": self.keyNumber,
178+
"0": self.keyNumber
179+
})
177180
self.Timer = eTimer()
178181
self.Timer.callback.append(self.keyOK)
179182
self.Timer.start(2000, True)
@@ -230,15 +233,14 @@ def __init__(self, session, threadLinks):
230233
self["key_red"] = StaticText("Favorit entfernen")
231234
self["key_blue"] = StaticText("Startseite")
232235
self["favMenu"] = List([])
233-
self["actions"] = ActionMap(["OkCancelActions",
234-
"DirectionActions",
235-
"ColorActions"], {"ok": self.keyOk,
236-
"cancel": self.keyExit,
237-
"down": self.keyPageDown,
238-
"up": self.keyPageUp,
239-
"red": self.keyRed,
240-
"blue": self.keyBlue
241-
}, -1)
236+
self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ColorActions"], {
237+
"ok": self.keyOk,
238+
"cancel": self.keyExit,
239+
"down": self.keyPageDown,
240+
"up": self.keyPageUp,
241+
"red": self.keyRed,
242+
"blue": self.keyBlue
243+
}, -1)
242244
self.onLayoutFinish.append(self.makeFav)
243245

244246
def makeFav(self):
@@ -372,22 +374,18 @@ def __init__(self, session, threadTitle, postId, favMenu, threadLinks):
372374
self["key_red"] = StaticText("Favorit hinzufügen")
373375
self["key_yellow"] = StaticText("Favoriten aufrufen")
374376
self["key_blue"] = StaticText("Startseite")
375-
self["NumberActions"] = ActionMap(["NumberActions",
376-
"OkCancelActions",
377-
"DirectionActions",
378-
"ChannelSelectBaseActions",
379-
"MovieSelectionActions",
380-
"ColorActions"], {"cancel": self.keyExit,
381-
"down": self.keyDown,
382-
"up": self.keyUp,
383-
"right": self.keyPageDown,
384-
"left": self.keyPageUp,
385-
"nextBouquet": self.keyPageDown,
386-
"prevBouquet": self.keyPageUp,
387-
"red": self.keyRed,
388-
"yellow": self.keyYellow,
389-
"blue": self.keyBlue
390-
}, -1)
377+
self["NumberActions"] = ActionMap(["NumberActions", "OkCancelActions", "DirectionActions", "ChannelSelectBaseActions", "ColorActions"], {
378+
"cancel": self.keyExit,
379+
"down": self.keyDown,
380+
"up": self.keyUp,
381+
"right": self.keyPageDown,
382+
"left": self.keyPageUp,
383+
"nextBouquet": self.keyPageDown,
384+
"prevBouquet": self.keyPageUp,
385+
"red": self.keyRed,
386+
"yellow": self.keyYellow,
387+
"blue": self.keyBlue
388+
}, -1)
391389
self.onLayoutFinish.append(self.onLayoutFinished)
392390

393391
def onLayoutFinished(self):
@@ -598,36 +596,30 @@ def __init__(self, session, threadLinks=[], favlink="", favMenu=False):
598596
self["key_red"] = StaticText("Favorit hinzufügen")
599597
self["key_green"] = StaticText("Aktualisieren")
600598
self["menu"] = List([])
601-
self["NumberActions"] = NumberActionMap(["NumberActions",
602-
"WizardActions",
603-
"NumberActions",
604-
"DirectionActions",
605-
"MenuActions",
606-
"ChannelSelectBaseActions",
607-
"ColorActions"], {"ok": self.keyOk,
608-
"back": self.keyExit,
609-
"cancel": self.keyExit,
610-
"red": self.keyRed,
611-
"green": self.keyGreen,
612-
"yellow": self.keyYellow,
613-
"blue": self.keyBlue,
614-
"up": self.keyUp,
615-
"down": self.keyDown,
616-
"right": self.keyPageDown,
617-
"left": self.keyPageUp,
618-
"nextBouquet": self.prevPage,
619-
"prevBouquet": self.nextPage,
620-
"0": self.gotoPage,
621-
"1": self.gotoPage,
622-
"2": self.gotoPage,
623-
"3": self.gotoPage,
624-
"4": self.gotoPage,
625-
"5": self.gotoPage,
626-
"6": self.gotoPage,
627-
"7": self.gotoPage,
628-
"8": self.gotoPage,
629-
"9": self.gotoPage
630-
}, -1)
599+
self["NumberActions"] = NumberActionMap(["NumberActions", "WizardActions", "ChannelSelectBaseActions", "ColorActions"], {
600+
"ok": self.keyOk,
601+
"back": self.keyExit,
602+
"red": self.keyRed,
603+
"green": self.keyGreen,
604+
"yellow": self.keyYellow,
605+
"blue": self.keyBlue,
606+
"up": self.keyUp,
607+
"down": self.keyDown,
608+
"right": self.keyPageDown,
609+
"left": self.keyPageUp,
610+
"nextBouquet": self.prevPage,
611+
"prevBouquet": self.nextPage,
612+
"0": self.gotoPage,
613+
"1": self.gotoPage,
614+
"2": self.gotoPage,
615+
"3": self.gotoPage,
616+
"4": self.gotoPage,
617+
"5": self.gotoPage,
618+
"6": self.gotoPage,
619+
"7": self.gotoPage,
620+
"8": self.gotoPage,
621+
"9": self.gotoPage
622+
}, -1)
631623
self.checkFiles()
632624
linefile = join(self.PLUGINPATH, f"icons/line_{self.RESOLUTION}.png")
633625
self.linePix = LoadPixmap(cached=True, path=linefile) if exists(linefile) else None

0 commit comments

Comments
 (0)