Skip to content

[script.easymovie] 1.0.0#2813

Open
Rouzax wants to merge 1 commit intoxbmc:omegafrom
Rouzax:omega
Open

[script.easymovie] 1.0.0#2813
Rouzax wants to merge 1 commit intoxbmc:omegafrom
Rouzax:omega

Conversation

@Rouzax
Copy link
Copy Markdown

@Rouzax Rouzax commented Mar 24, 2026

New addon: EasyMovie v1.0.0

Addon ID: script.easymovie
Version: 1.0.0

What is EasyMovie?

EasyMovie simplifies movie night in Kodi. Instead of scrolling through hundreds of titles, a filter wizard asks a few quick questions — genre, age rating, runtime, year, score — then presents a curated random selection from the user's library.

Two ways to watch

  • Browse Mode — Visual results screen with 5 view styles (Showcase, Card List, Posters, Big Screen, Split View). Includes Re-roll for fresh suggestions and Surprise Me for instant playback.
  • Playlist Mode — Automatic movie marathon generation with partial resume support.

Key features

  • Filter wizard with 7 filter steps (each configurable as Ask, Pre-set, or Skip)
  • Movie set awareness — suggests first unwatched collection entry, prompts to continue the set
  • Earlier movie warnings via background service
  • Smart re-suggestion to avoid repeating recent picks
  • 4 color themes (Golden Hour, Ultraviolet, Ember, Nightfall)
  • Clone support for multiple instances with independent settings
  • Movie pool filtering via Kodi smart playlists
  • Structured logging to separate log file

Technical details

  • Python 3.8+ compatible (tested with Kodi 21 Omega and Kodi 22 Piers)
  • No external dependencies beyond xbmc.python 3.0.1
  • Passes pyright strict mode, pyflakes, and kodi-addon-checker with no errors
  • 136 unit tests passing
  • Sibling addon to script.easytv (already in the repo)

Links

@kodiai
Copy link
Copy Markdown

kodiai bot commented Mar 24, 2026

Kodiai Review Summary

What Changed

New addon submission for script.easymovie 1.0.0, a Kodi addon for movie selection and playback management.

Reviewed: core logic, docs

Strengths

  • ✅ Clean separation of concerns with dedicated modules for storage, queries, filters, and UI components (resources/lib/data/storage.py:24, resources/lib/data/queries.py:1, resources/lib/data/filters.py:1)
  • ✅ Comprehensive structured logging with event tracking throughout the codebase (resources/lib/utils.py:107-297)
  • ✅ Proper resource management with context managers for file operations and timing operations (resources/lib/utils.py:339-367, resources/lib/data/storage.py:78-90)

Observations

Impact

[MAJOR] script.easymovie/resources/lib/data/storage.py (78-90): Race condition in file write operation
The save() method performs a check-then-create pattern without atomic file operations. Between checking if the directory exists (line 82) and opening the file (line 84), another process could delete the directory, causing the file write to fail. The makedirs with exist_ok=True helps but doesn't protect against concurrent deletion.

[MAJOR] script.easymovie/resources/lib/ui/main.py (126-129): Command injection risk in executebuiltin call
Unsanitized addon_path from getAddonInfo('path') is concatenated directly into the executebuiltin command string at line 127. If an attacker controls the addon path (through symlinks or filesystem manipulation), they could inject additional builtin commands using commas or parentheses.

Verdict

🔴 Address before merging -- 2 blocking issue(s) found

Review Details
  • Files reviewed: 66

  • Lines changed: +11957 -0

  • Profile: minimal (auto, lines changed: 11957)

  • Author: newcomer (adapted tone)

  • Findings: 0 critical, 2 major, 0 medium, 0 minor (includes 2 from summary observations)

  • Review completed: 2026-03-24T10:41:34.889Z

  • Review scope: Reviewed 50/66 files, prioritized by risk

  • Full review: 30 files | Abbreviated review: 20 files | Not reviewed: 16 files

Files not fully reviewed (sorted by risk score)
  • script.easymovie/resources/icons/icon-ember.png (risk: 26)
  • script.easymovie/resources/icons/icon-golden-hour.png (risk: 26)
  • script.easymovie/resources/icons/icon-nightfall.png (risk: 26)
  • script.easymovie/resources/icons/icon-ultraviolet.png (risk: 26)
  • script.easymovie/resources/skins/Default/media/check_off.png (risk: 26)
  • script.easymovie/resources/skins/Default/media/check_on.png (risk: 26)
  • script.easymovie/resources/skins/Default/media/common/IconWatched.png (risk: 26)
  • script.easymovie/resources/skins/Default/media/common/gradient_bottom.png (risk: 26)
  • script.easymovie/resources/skins/Default/media/common/line_fade.png (risk: 26)
  • script.easymovie/resources/skins/Default/media/common/menu.png (risk: 26)
  • script.easymovie/resources/skins/Default/media/common/movieset.png (risk: 26)
  • script.easymovie/resources/skins/Default/media/common/scrim_topleft.png (risk: 26)
  • script.easymovie/resources/skins/Default/media/common/scrim_topright.png (risk: 26)
  • script.easymovie/resources/skins/Default/media/common/white.png (risk: 26)
  • script.easymovie/resources/skins/Default/media/common/white_rounded.png (risk: 26)
  • script.easymovie/changelog.txt (risk: 23)
- Keyword parsing: - focus hints: [SCRIPT.EASYMOVIE]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After discussing this with other team members, I would ask you to remove this functionality. Addons should be installed only via proper channels, that is, either from an online repo or from a .zip file using the respective Kodi UI functionality. "Drop in" installs are not allowed and not supported.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I fully understand the security concerns of addons cloning themselves, the functionality here is the same as in EasyTV (and LazyTV as it predecessor).

If you really want me to remove it I'll have to think about it as I don't think I have any other way of offering the same functionality without it.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it not be possible to add some profile feature? So it no longer needs cloning?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@basrieter, Could you elaborate on this?
The power is that the clone of the addon uses it own settings so you can configure it like you want to, and it will work as an independent end point for a menu entry to launch it.

Copy link
Copy Markdown
Contributor

@basrieter basrieter Mar 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is what I assumed. But you could create "profiles" within your add-on, so you can run one instance of the add-on with multiple setting-profiles.

Copy link
Copy Markdown
Author

@Rouzax Rouzax Mar 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I understand.
It would not offer the same level of flexibility.

Please let me know the final judgement, and also what that means for EasyTV.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How many instances would you need? What is the use case?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For EasTV, I run currently 3 clones. 1 for season premières, 1 for show premières and on to continue watching in progress.

Easymovie riight now with 3 clones, 1 for familie night, 1 for horrors and 1 for action movies.
But have just started using EasyMovie so that might not be the final tally.
Also I don't know how users use it.

@Rouzax
Copy link
Copy Markdown
Author

Rouzax commented Mar 31, 2026

Hi @basrieter, @romanvm,

Just circling back on this. To address the profiles suggestion and explain why cloning offers something a profile system can't fully replace:

The core value of clones is independent entry points. Each clone is its own addon ID, which means:

  • Each can be assigned to a different menu item/widget in the skin
  • Each has its own settings that users configure once and forget
  • Kodi treats them as separate endpoints for RunScript(), so skins, favorites, and shortcuts all work natively
  • No extra UI needed to pick "which profile" at launch - you just launch the one you want

A profile system would require either a selection step on every launch ("which profile?"), or a way to pass a profile parameter through skin shortcuts - which most skins don't support natively. It adds complexity for the user where clones keep it simple.

Use cases in practice:

  • EasyMovie: "Family Night" / "Horror Night" / "Action Night" - each with different genre filters, ratings, and viewing modes, each on its own home screen shortcut
  • EasyTV: "Season Premieres" / "Show Premieres" / "Continue Watching" - three very different workflows, each a single click from the home screen

The number of clones is up to the user. Some might want one, some might want five. That flexibility is hard to replicate with profiles without making the UX worse.

Regarding EasyTV: The clone mechanism in EasyMovie is identical to what EasyTV already uses in the official repo. If the decision is to disallow this pattern, I'd like to understand what that means for EasyTV as well, so I can plan accordingly for both addons.

I'm happy to discuss alternative approaches, but I wanted to lay out why I believe clones are the cleanest solution from a user experience perspective.

@romanvm
Copy link
Copy Markdown

romanvm commented Apr 2, 2026

Let us discuss this internally and reach some conclusion. My personal opinion is split: On one side, you've presented a legit use case, on the other side, we strongly discourage "drop-in" addon installs as a principle because they are often used to create "fully loaded Kodi boxes" that have given us bad reputation. And we cannot guarantee that your cloning method will work in the future.

@Rouzax
Copy link
Copy Markdown
Author

Rouzax commented Apr 2, 2026

I fully understand.

@romanvm
Copy link
Copy Markdown

romanvm commented Apr 4, 2026

I discussed this with the team and unfortunately we cannot allow this addnon cloning feature. In addition to the reasons explained above it also breaks addon auto-update mechanism, meaning that cloned addons, having their own addon IDs, wont' be auto-updated along with the primary addon.

As for this feature being present in your other addon, It seems as an honest mistake from one our our reviewers. We are all unpaid volunteers who review addon submissions in their free time and things may fall through the cracks.

As an alternative you can consider developing some kind of profile support as @basrieter suggested. Maybe existing Kodi profiles feature will do, but I never used it so I cannot tell you more.

@Rouzax
Copy link
Copy Markdown
Author

Rouzax commented Apr 4, 2026

@romanvm Thank you for the clear answer. I understand the team's position and I respect that.

One thing I do want to correct: the claim that cloned addons won't be auto-updated is not accurate. I specifically built an update mechanism to handle this. When the main EasyMovie addon gets updated through the repo, every clone detects the version mismatch on its next launch and triggers a mandatory update from the parent addon's files. The version check logic is in _check_clone_version() and the actual update process in resources/update_clone.py. EasyTV has the same update mechanism in place.

That said, if this is the final verdict, I'll need to think about how to proceed. The clone system is a core feature that I've invested significant time in, building it far more robust than what LazyTV ever had. A profile system, while possible, would not offer the same flexibility - profiles can't each have their own icon, name, or appear as independent entries in Kodi's addon list and skin shortcuts. Most likely I would stop releasing into the official repo and distribute through my own repository instead, so I can keep offering the full feature set to users.

I'd also like to understand what this means for EasyTV, which has had the same clone functionality in the official repo for a while now.

@basrieter
Copy link
Copy Markdown
Contributor

Unfortunately, this is the final verdict. I still think that you should be able to create profiles with their own icons within your add-on and then create links/favorites to those profiles to access the directly. The only think that might not work out of the box is putting it as seperate add-ons in a skin.

We will discuss the LazyTV add-on internally and see how to proceed with that.

Please don't misunderstand us: We do appreciate the effort that developers put into their contributions very much. And we hope to see you work out an alternative (such as profiles) that would allow us to accept this add-on into our repo.

@Rouzax
Copy link
Copy Markdown
Author

Rouzax commented Apr 4, 2026

@basrieter Thank you for the clarification. I will wait with my decision until you have discussed internally what this means for EasyTV, as that will factor into how I proceed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants