OpenATV 7.6 – Discussion & New Features

There are 1,057 replies in this Thread which was already clicked 250,675 times. The last Post () by haldborg.

  • Captain , also just noticed when you do normal backupsettings restore it is picking up plugins that had been installed that I may have removed that is ok and normal,


    but it should it not just be installing ones missing from feeds and from media/hdd/images/ipk.

    It has found one I moved to root of hard drive as I did not want to install that its ok i just unticked it.

    But as I said I thought it was only supposed to install from ipk folder.

  • have tried flashonline unpacking but there with error install not suscces online :thumbs down:


    have tried software update it works fine :thumbs up:

    This has nothing to do with flashonline , this is just restore settings .


    But in saying that just tried flash online with fastrestore and the ipk on root of hard drive was also installed with ones from ipk folder i think due to fact it was in installed-list.txt so don't know if that is a bug or new feature as I aways thought only from /images/ipk folder.

  • DNS için bir kontrol betiği sağladım. Ne yapılandırdığınızı kimse bilmediği için, kimse size yardımcı olamaz. Normalde standart imajı yükleyip test edersiniz; VPN etkinse, test için kapatmanız gerekir.

    Hello captain I upgraded to openatv 7.6 I encountered a problem in openwebif application. There are 3 icons below the channels on webif. There is an epg tv icon and a phone icon. In the previous version when I clicked on the tv icon it would download as an m3u file to the desktop of my computer. However in 7.6 when I click on the tv icon it tries to open in the browser but it does not download to the desktop. I disable the play in browser option in webif application but it does not help. Can you help me?

    Hello, I'm experiencing the same problem after the update. The channel's m3u file isn't downloading from the WEBIF interface. How can we fix this?

  • DNS için bir kontrol betiği sağladım. Ne yapılandırdığınızı kimse bilmediği için, kimse size yardımcı olamaz. Normalde standart imajı yükleyip test edersiniz; VPN etkinse, test için kapatmanız gerekir.

    Hello captain I upgraded to openatv 7.6 I encountered a problem in openwebif application. There are 3 icons below the channels on webif. There is an epg tv icon and a phone icon. In the previous version when I clicked on the tv icon it would download as an m3u file to the desktop of my computer. However in 7.6 when I click on the tv icon it tries to open in the browser but it does not download to the desktop. I disable the play in browser option in webif application but it does not help. Can you help me?

    Hello, I'm experiencing the same problem after the update. The channel's m3u file isn't downloading from the WEBIF interface. How can we fix this?

    Why don't you post image so members can see.


    Here is image from part of my webif and .m3u downloads are working.


    Capture.PNG

  • Hello, I installed Kodi with image 7.6 and it works for a while, but after a few uses, I get sound but no picture. When I exit Kodi, I also lose the picture on my Octagon 8008; I have to restart the device, as if the tuner is crashing.

  • Hi everyone, it's all good, I've solved my problem. If this can help others, you simply shouldn't tune into an IPTV channel, but rather start with a satellite or terrestrial antenna channel... Thanks to the OpenATV team, great work, as always...

    • Official Post

    I took the liberty of correcting openatv's setup.py by adding two lines so that the setup.xml can also be translated into the user language.

    It might not be good for the team, but at least I tested it, and it works for me.

    I'll apply it to the new Calendar plugin that I'll release soon.


    i have setup.it.xml for eg.


    pasted-from-clipboard.png


    334774-1-jpg


    334717-1-jpg



    With this modification, the system will look for:



    Code

    HOW IT WORKS

    1. Language Detection: Uses language.getLanguage()[:2] to get 2-char language code
    2. Priority Search:
      • First tries setup.[lang].xml (e.g., setup.it.xml)
      • Falls back to setup.xml if localized version doesn't exist
    3. Backward Compatible: If no localized files exist, behaves exactly like original
    4. Plugin & System Support: Works for both plugin setups and system setups

    ADVANTAGES

    1. No breaking changes: Original function names and behavior preserved
    2. Automatic fallback: If setup.it.xml doesn't exist, uses setup.xml
    3. Cache maintained: Uses same caching system as original
    4. Clean implementation: Only modifies the file selection logic

    EXAMPLE

    Italian user with setup.it.xml available:

    Code

    Code
    [Setup] Using setup file: setup.it.xml
    [Setup] XML setup file '/usr/lib/.../setup.it.xml', using element 'settingCalendar' from plugin 'Extensions/Calendar'.


    German user without setup.de.xml:


    Code

    Code
    [Setup] Using default setup file
    [Setup] XML setup file '/usr/lib/.../setup.xml', using element 'settingCalendar' from plugin 'Extensions/Calendar'.



    I have tested on openatv 7.6 and work very fine..
    i have putted all setup.it.xml on plugin / system. .and all default plugin . i have all translate plugins

    pasted-from-clipboard.png


    filecommander


    pasted-from-clipboard.png

    mymetrix

    pasted-from-clipboard.png


    oaweather

    pasted-from-clipboard.png





    i attached file setup.py for developer team


    For users who want to test: it's best not to do so if you don't know how to do it or how to go back ;)

    At your own risk.

  • This setup.py xml translation is completely wrong.

    The translation of the xml text will be done by gettext and extra xml files for different languages are wrong.

    e2Remote -> The best iOS and MacOS App for enigma2.

    • Official Post

    amen


    Maybe your gettext is different from ours.

    I've tested with some users and it doesn't translate the .xml files.

    Maybe you could explain it to me so I can understand and fix my plugins.

    So, for you, it's all "wrong."


    :smiling face with halo: happy holidays

    • Official Post

    But I was referring to the setup.xml files.

    Unfortunately, they aren't translated.

    Maybe there's something I'm missing that I don't know about.


    Calendar/usr/lib/enigma2/python/Plugins/Extensions/Calendar/__init__.py at main · Belfagor2005/Calendar

  • hello captain thanks for your works, please could you fix the kodi crashes about resolution there is not picture with 2160 resolution and sometimes crash depending on the channel you are launching the plugin,


    thanks

  • PlutoTV Repository — Git Workflow, Setup/Build, and Translation Tooling

    1. Scope

    This document describes:

    • The repository’s Git/GitHub workflow as implemented via files in this repository.

    • The setup/build pipeline driven by src/setup.py.

    • The translation pipeline implemented in src/setup_translate.py and src/PlutoTV/locale/:

      • POT generation,

      • extraction from setup.xml,

      • PO maintenance,

      • PO → MO compilation.

    Out of scope:

    • Plugin feature documentation (runtime behavior, UI/UX, playback, etc.).

    2. Repository Layout (Relevant to This Document)

    • .github/workflows/ — GitHub Actions workflows:

      • compile.yml

      • ruff.yml

      • pylint.yml

      • buildbot.yml

      • autotag.yml

    • CI/ — automation scripts invoked by GitHub Actions:

      • build.sh

      • PEP8.sh

      • dos2unix.sh

      • chmod.sh

    • src/ — Python packaging and translation tooling:

      • setup.py

      • setup_translate.py

      • PlutoTV/setup.xml

      • PlutoTV/locale/ (PlutoTV.pot, *.po, updatepot.sh, xml2po.py)

    3. GitHub Workflow

    3.1 Continuous Integration (CI)

    3.1.1 Python compilation check (.github/workflows/compile.yml)

    Triggers:

    • push to main

    • all pull_requests

    Job:

    • Runs on ubuntu-24.04 with Python 3.13

    • Executes:

      • cd src

      • python -m compileall .

    3.1.2 Ruff linting (.github/workflows/ruff.yml)

    Triggers:

    • push to main

    • all pull_requests

    Job:

    • Runs on ubuntu-latest with Python 3.13

    • Installs Ruff and executes:

      • cd src

      • ruff check .

    Ruff configuration is defined in pyproject.toml under [tool.ruff].

    3.1.3 Pylint check (.github/workflows/pylint.yml)

    Triggers:

    • push to main

    • all pull_requests

    Job:

    • Runs on ubuntu-latest with Python 3.13

    • Installs pylint

    • Executes:

      • cd src

      • pylint --exit-zero $(git ls-files '*.py')

    Pylint configuration is defined in .pylintrc.

    3.1.4 Repository “cleanup bot” workflow (.github/workflows/buildbot.yml)

    Triggers:

    • push to main

    • manual (workflow_dispatch)

    Job:

    • Runs on ubuntu-24.04 with Python 3.13

    • Installs dos2unix, pip, and autopep8

    • Executes:

      • ./CI/build.sh

    CI/build.sh performs:

    • Git identity configuration:

      • user.email = bot@oe-alliance.com

      • user.name = oe-alliance python bot

    • Working tree cleanup:

      • git clean -fd

      • remove *.pyc, *.pyo, and *.mo

      • git checkout main

    • Executes formatting/normalization scripts:

      • ./CI/chmod.sh (chmod normalization + commit chmod files)

      • ./CI/dos2unix.sh (line-ending normalization + commit dos2unix files)

      • ./CI/PEP8.sh (autopep8 + commit PEP8)

    • Pushes back to main via an authenticated remote:

      • git remote add upstream https://${GITHUB_TOKEN}@github.com/oe-alliance/PlutoTV.git

      • git push --quiet upstream main

    3.2 Tagging and Release Automation (.github/workflows/autotag.yml)

    Triggers:

    • push to main affecting src/PlutoTV/__init__.py

    • manual (workflow_dispatch)

    Permissions:

    • contents: write

    Workflow behavior:

    1. Reads version from src/PlutoTV/__init__.py:

      • VERSION=$(grep -oP '(?<=__version__ = ")[^"]+' src/PlutoTV/__init__.py)

    2. Checks whether tag v<version> already exists:

      • git ls-remote --tags origin | grep -q "refs/tags/v<version>$"

      • if it exists, sets skip=true and exits.

    3. If not skipped:

      • creates and pushes tag v<version> to origin.

    4. Generates a changelog:

      • attempts to identify the previous tag (git describe ... --exclude "v${{ steps...)

      • if no previous tag is found:

        • git log --pretty=format:"- %s (%h)" --no-merges -n 10

      • else:

        • git log "$LAST_TAG"..HEAD --pretty=format:"- %s (%h)" --no-merges -n 10

      • escapes % for GitHub Actions outputs.

    5. Creates a GitHub Release using softprops/action-gh-release@v2:

      • tag_name: v<version>

      • name: Release v<version>

      • body includes the generated changelog.

    4. Setup / Build System

    4.1 Packaging entrypoint (src/setup.py)

    src/setup.py uses setuptools.setup(...) and imports setup_translate:

    • Package name: enigma2-plugin-extensions-plutotv

    • Version: 3.0

    • Python package mapping:

      • pkg = 'Extensions.PlutoTV'

      • package_dir = {pkg: 'PlutoTV'}

      • packages = [pkg]

    • Packaged data includes:

      • images/*.png

      • *.png

      • *.xml

      • locale/*/LC_MESSAGES/*.mo

    • Translation build integration:

      • cmdclass = setup_translate.cmdclass

    4.2 Translation build hook (src/setup_translate.py)

    src/setup_translate.py defines a custom setuptools build step:

    • build_trans (a setuptools.Command) compiles translations.

    • build extends setuptools.command.build.build and appends ('build_trans', None) to sub_commands.

    • cmdclass registers both commands:

      • 'build': build

      • 'build_trans': build_trans

    4.2.1 PO → MO compilation logic

    On build_trans.run():

    • Translation source directory:

      • s = os.path.join('PlutoTV', 'locale')

    • Domains:

      • lang_domains = glob.glob(os.path.join(s, '*.pot'))

    • For each *.po in PlutoTV/locale/:

      • src = PlutoTV/locale/<lang>.po

      • output directory:

        • destdir = PlutoTV/locale/<lang>/LC_MESSAGES

        • created if missing

      • for each *.pot domain file:

        • dest = PlutoTV/locale/<lang>/LC_MESSAGES/<domain>.mo

        • compilation command:

          • msgfmt '<src>' -o '<dest>'

        • compilation errors raise an exception

    • If no *.pot exists in PlutoTV/locale/:

      • prints: we got no domain -> no translation was compiled

    5. Translation Tooling (POT/PO Maintenance)

    5.1 Translation assets (src/PlutoTV/locale/)

    • Template catalog:

      • PlutoTV.pot

    • Language catalogs:

      • de.po

      • es.po

      • it.po

      • pl.po

    • Tooling scripts:

      • updatepot.sh

      • xml2po.py

    5.2 POT/PO update script (src/PlutoTV/locale/updatepot.sh)

    Purpose:

    • Generates updated POT content and merges it into all existing *.po files.

    Prerequisites (as stated in the script):

    • gawk, find, xgettext, sed, python, msguniq, msgmerge, msgattrib, msgfmt, msginit

    Execution context (as stated in the script):

    • “Run this script from within the po folder.”

      (The script resides in src/PlutoTV/locale/.)

    Key steps:

    1. GNU sed detection:

      • Initializes localgsed="sed"

      • Checks whether sed --version reports GNU sed.

      • On macOS (OSTYPE starts with darwin):

        • prints OS type

        • sets findoptions=" -s -X "

        • sets localgsed="gsed"

    2. Tool availability checks:

      • Verifies python or python3 exists in PATH, else exits with an error message.

      • Verifies xgettext exists in PATH, else exits with an error message.

    3. Create Python-derived POT fragment:

      • prints: Creating temporary file PlutoTV-py.pot

      • runs find .. -name "*.py" -exec xgettext ... -d PlutoTV ... -o PlutoTV-py.pot {} \\+

      • normalizes charset in the generated pot:

        • $localgsed --in-place PlutoTV-py.pot --expression=s/CHARSET/UTF-8/

    4. Create XML-derived POT fragment from setup.xml:

      • prints: Creating temporary file PlutoTV-xml.pot

      • runs one of:

        • find .. -name "setup.xml" -exec python xml2po.py {} \\+ > PlutoTV-xml.pot

        • find .. -name "setup.xml" -exec python3 xml2po.py {} \\+ > PlutoTV-xml.pot

    5. Merge fragments into PlutoTV.pot:

      • prints: Merging pot files to create: PlutoTV.pot

      • cat PlutoTV-py.pot PlutoTV-xml.pot | msguniq -s --no-wrap --no-location -o PlutoTV.pot -

    6. Update all *.po files in the folder:

      • collects languages from existing .po files:

        • languages=($(ls *.po | ... | $localgsed 's/.po//g'))

      • for each language:

        • msgmerge --backup=none --no-wrap -s -U <lang>.po PlutoTV.pot && touch <lang>.po

        • msgattrib --no-wrap --no-obsolete --no-location <lang>.po -o <lang>.po

    7. Cleanup:

      • removes temp files:

        • rm PlutoTV-py.pot PlutoTV-xml.pot

      • prints completion message.

    5.3 setup.xml extraction (src/PlutoTV/locale/xml2po.py)

    xml2po.py converts XML attribute text into gettext entries.

    Implementation details:

    • Uses xml.sax with:

      • ContentHandler

      • LexicalHandler

      • property_lexical_handler

    • Tracks XML comments:

      • comment(self, comment) stores the last comment when it contains TRANSLATORS:.

    • Extracts translatable strings from element attributes with names:

      • text

      • title

      • menuTitle

      • value

      • caption

      • description

    • Filters:

      • ignores empty/whitespace-only keys

      • ignores values matching a hex pattern #[0-9a-fA-F]+ (via self.ishex)

    • Output format:

      • For each extracted key, prints a POT-style entry:

        • #: <arg> (the input file path)

        • optional translator comment lines printed as #. <line> for each line of the stored comment

        • msgid "<key>"

        • msgstr ""

    • Input handling:

      • Iterates over argv[1:]

      • Skips any path containing "../.git" (comment: “skip /.git/ and /.github/”)

      • If an argument is a directory, parses all .xml files in that directory.

      • Otherwise, parses the argument as a file.

    6. Generated Translation Artifacts

    • updatepot.sh produces/updates:

      • PlutoTV.pot (and transient PlutoTV-py.pot, PlutoTV-xml.pot)

      • merges updates into *.po files in src/PlutoTV/locale/

    • setup_translate.py generates compiled catalogs during build:

      • src/PlutoTV/locale/<lang>/LC_MESSAGES/PlutoTV.mo

    Repository automation (CI/build.sh) removes *.mo during its normalization run before committing and pushing.

OpenATV Team Images Support Forum ~ based on OE-Alliance

OpenATV Supported Models ~ Airdigital, Amiko, Anadol, Atemio, Atto, AX Technology, Axas, Beyonwiz, Dinobot, Dreambox, Edision, EVO, Ferguson, Formuler, Galaxy Innovations, Gigablue, Golden Interstar, HDBox, Hitube, James Donkey, IQON, Izibox, Jepssen, Maxdigital, Medialink, MaXytec, MediaArt, Megaset, Miraclebox, MK-Digital, Mut@nt, Novaler, Octagon, Odin, Optibox, Protek, PULSe, Qviart, Red-Eagle, Relook, Roxxs, SAB, Sezam, Sogno, Space, Spycat, Technomate, Telestar, Tiviar, T-Rex, Uclan, Venton Unibox, Vimastec, VisionNet, VU+, VUplus, World Vision, Vizyon, WWio, Xsarius, and Xtrend.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!