https://travis-ci.org/asciidisco/plugin.video.telekom-sport.svg?branch=master https://codeclimate.com/github/asciidisco/plugin.video.telekom-sport/badges/gpa.svg https://codeclimate.com/github/asciidisco/plugin.video.telekom-sport/badges/coverage.svg https://codeclimate.com/github/asciidisco/plugin.video.telekom-sport/badges/issue_count.svg https://img.shields.io/github/release/asciidisco/plugin.video.telekom-sport.svg https://img.shields.io/badge/License-MIT-yellow.svg

Indices and tables

Code Docs

Kodi plugin for Telekom Sport (https://telekomsport.de)

addon.__categories_action(params, processed)[source]

Show categories selection

Parameters:
  • params (dict) – Route paramters
  • processed (bool) – Other route already matched
Returns:

bool – Route matched

addon.__event_lane_action(params, processed)[source]

Show event lane selection

Parameters:
  • params (dict) – Route paramters
  • processed (bool) – Other route already matched
Returns:

bool – Route matched

addon.__login_failed_action(user, password)[source]

Veryfies the users login & shows a notification if it failes

Parameters:
  • user (string) – Telekom account email address or user id
  • password (string) – Telekom account password
Returns:

bool – Login succeeded

addon.__match_details_action(params, processed)[source]

Show match details selection

Parameters:
  • params (dict) – Route paramters
  • processed (bool) – Other route already matched
Returns:

bool – Route matched

addon.__matches_list_action(params, processed)[source]

Show matches list selection

Parameters:
  • params (dict) – Route paramters
  • processed (bool) – Other route already matched
Returns:

bool – Route matched

addon.__play_action(params, processed)[source]

Play an item

param params:Route paramters
type params:dict
param processed:
 Other route already matched
type processed:bool
returns:bool – Route matched
addon.__settings_action(params)[source]

Operates on actions from within the settings pane Can logout the user, can switch users account

Parameters:params (dict) – Route paramters
Returns:bool – Route matched
addon.__sport_selection_action(keys, processed)[source]

Show sport selection

Parameters:
  • keys (list) – Route paramters keys
  • processed (bool) – Other route already matched
Returns:

bool – Route matched

addon.router(paramstring, user, password)[source]

Converts paramstrings into dicts & decides which method should be called in order to display contents

Parameters:
  • user (string) – Telekom account email address or user id
  • password (string) – Telekom account password
Returns:

bool – Matching route found

class resources.lib.Cache.Cache[source]

Caching facade for KODIs window API

classmethod _Cache__get_window_instance()

Returns the current window instance from KODI

Returns:xmbcguiWindow – Window instance
add_cached_item(cache_id, contents)[source]

Adds an item to the cache

Parameters:
  • cache_id (str.) – ID of the item to be cached
  • contents (mixed) – Contents to be cached
get_cached_item(cache_id)[source]

Returns a cached item

Parameters:cache_id (str.) – ID of the cached item
Returns:mixed – Cached item
has_cached_item(cache_id)[source]

Checks if an item exists in the mem cache

Parameters:cache_id (str.) – ID of the cached item
Returns:bool – Matching item found
setup_memcache()[source]

Setup in memory cache

class resources.lib.Constants.Constants[source]

Access methods for static links & list of sports

classmethod get_addon_id()[source]

Returns the addon id

Returns:string – Addon ID
classmethod get_base_url()[source]

Returns the Telekom sport base HTTP address

Returns:string – Base address
classmethod get_epg_url()[source]

Returns the EPG API URL

Returns:string – EPG API URL
classmethod get_login_endpoint()[source]

Returns the Telekom login SSO endpoint

Returns:string – SSO login endpoint

Returns the Telekom Sport login HTTP route

Returns:string – Login route
classmethod get_sports_list()[source]

Returns the list of available sports

Returns:dict – List of available sports
classmethod get_statics_list()[source]

Returns list of static menu items for various categories

Returns:dict – List of static menu items for various categories
classmethod get_stream_definition_url()[source]

Returns the stream defintion URL, used to get the final stream URL. It contains a %VIDEO_ID% placeholder, that needs to be replaced in order to fetch the streams

Returns:string – EPG API URL
class resources.lib.ContentLoader.ContentLoader(cache, session, item_helper, handle)[source]

Fetches and parses content from the Telekom Sport API & website

_ContentLoader__add_static_folders(statics, sport)

Adds static folder items to Kodi (if available)

Parameters:
  • statics (dict) – All static entries
  • sport (string) – Chosen sport
_ContentLoader__add_video_item(video, list_item, url)

Adds a playable video item to Kodi

Parameters:
  • video (dict) – Video details
  • list_item (xbmcgui.ListItem) – Kodi list item
  • url (string) – Video url
classmethod _ContentLoader__is_playable_video_item(video)

Determines if the item is playable

Parameters:video – Raw video data
Returns:bool - Video is playable
_ContentLoader__parse_epg_element(use_slots, element, details, match_time)

Parses an EPG element & returns a list of parsed elements

Parameters:
  • use_slots (bool) – Slot item
  • element (dict) – Raw EPG element
  • details (dict) – EPG element details
  • match_time (string) – Events match time
Returns:

list - EPG element list

_ContentLoader__parse_regular_event(target_url, details, match_time)

Parses a regular event (one that´s not part of a slot)

Parameters:
  • target_url (string) – Events target url
  • details (dict) – Events details
  • match_time (string) – Events match time
Returns:

dict - Parsed event

_ContentLoader__parse_slot_events(element, details, match_time)

Parses an event

Parameters:
  • element (dict) – Raw element info
  • details (dict) – Events details
  • match_time (string) – Events match time
Returns:

dict - Parsed event

classmethod _ContentLoader__set_item_playable(list_item, title)

Sets an Kodi item playable

Parameters:
  • list_item (xbmcgui.ListItem) – Kodi list item
  • title (string) – Title of the video
Returns:

bool - EPG has slot type elements

classmethod _ContentLoader__use_slots(data)

Determines if the EPG uses slot type events

Parameters:data (dict) – Raw EPG data
Returns:bool - EPG has slot type elements
fetch_epg(sport, _session)[source]

Builds the EPG URL & fetches the EPG

Parameters:
  • sport (string) – Chosen sport
  • _session (requests.session) – Requests session instance
Returns:

dict - Parsed EPG

get_epg(sport)[source]

Loads EPG either from cache or starts fetching it

Parameters:sport (resources.lib.Cache) – Cache instance
Returns:dict - Parsed EPG
get_m3u_url(stream_url)[source]

Fetches the m3u description XML, parses the attributes & builds the m3u url

Parameters:stream_url (string) – Url to fetch the m3u description XML from
Returns:string - m3u url
classmethod get_player_ids(src)[source]

Parses the player id HTML & returns stream & customer ids

Parameters:src (string) – Raw HTML
Returns:tuple - Stream & customer id
get_stream_urls(video_id)[source]

Fetches the stream urls document & parses them as well

Parameters:video_id (string) – Id of the video to fetch stream urls for
Returns:dict - Stream urls
load_epg(sport, _session)[source]

Fetches EPG & appends it to the cache

Parameters:
  • sport (string) – Chosen sport
  • _session (requests.session) – Requests session instance
Returns:

dict - EPG

parse_epg(epg)[source]

Parses the raw EPG

Parameters:epg (dict) – Raw epg
Returns:dict - Parsed EPG
play(video_id)[source]

Plays a video by Video ID

Parameters:target (string) – Video ID
show_date_list(_for)[source]

Creates the KODI list items for a list of dates with contents based on the current date & syndication.

Parameters:_for (string) – Chosen sport
show_event_lane(sport, lane)[source]

Creates the KODI list items with the contents of an event-lanes for a selected sport & lane

Parameters:
  • sport (string) – Chosen sport
  • lane (string) – Chosen event-lane
show_match_details(target, lane, _for)[source]

Creates the KODI list items with the contents of a matche (Gamereport, Interviews, Rematch, etc.)

Parameters:
  • target (string) – Chosen match
  • lane (string) – Chosen event-lane
  • _for (string) – Chosen sport
show_matches_list(game_date, _for)[source]

Creates the KODI list items with the contents of available matches for a given date

Parameters:
  • game_date (string) – Chosen event-lane
  • _for (string) – Chosen sport
show_sport_categories(sport)[source]

Creates the KODI list items for the contents of a sport selection. It loads the sport html page & parses the event lanes given

Parameters:sport (string) – Chosen sport
show_sport_selection()[source]

Creates the KODI list items for the static sport selection

class resources.lib.Dialogs.Dialogs(utils)[source]

Displays localized dialogs for Kodi

show_email_dialog()[source]

Shows email input

Returns:string - Email characters
show_login_failed_notification()[source]

Shows login failed notification for 5 sec

Returns:bool - Notification shown
show_not_available_dialog()[source]

Shows “video not playable/available” modal

Returns:bool - Dialog shown
show_password_dialog()[source]

Shows password input

Returns:string - Password characters
show_storing_credentials_failed()[source]

Shows “storing credentials failed” modal

Returns:bool - Dialog shown
class resources.lib.ItemHelper.ItemHelper(constants, utils)[source]

Interface for matching API data with the Kodi item interface

classmethod _ItemHelper__build_fallback_title(title, metadata)

Generates a fallback title

Parameters:
  • title (string) – Original title
  • metadata (dict) – Item metadata
Returns:

string – Fallback title

classmethod _ItemHelper__build_match_title_full(details)

Generates a long match title

Parameters:details (dict) – Item details
Returns:string – Match title (long)
classmethod _ItemHelper__build_match_title_short(details)

Generates a short match title

Parameters:details (dict) – Item details
Returns:string – Match title (short)
_ItemHelper__get_editorial_art(list_item, base_url, images)

Sets editorial art for the given item

Parameters:
  • list_item (xbmcgui.ListItem) – Kodi list item
  • base_url (string) – Image base url
  • images (dict) – Map of usable images
Returns:

xbmcgui.ListItem – Kodi list item

_ItemHelper__get_sports_art(list_item, sport, sports)

Sets editorial art for static sport item

Parameters:
  • list_item (xbmcgui.ListItem) – Kodi list item
  • sport (string) – Chosen sport
  • sports (dict) – Map of available sports
Returns:

xbmcgui.ListItem – Kodi list item

build_description(item)[source]

Generates an item description

Parameters:item (dict) – Item to be described
Returns:string – Item description
classmethod build_epg_title(details, match_time)[source]

Generates a epg title

Parameters:
  • details (dict) – Item details
  • match_time (string) – Events match time
Returns:

string – EPG item title

build_page_leave(target_url, details, match_time, shorts=None)[source]

Builds the data for an Kodi folder item

Parameters:
  • target_url (string) – Plugin target url
  • details (dict) – EPG element details
  • match_time (string) – Events match time
  • shorts (dict) – Add shorts desc
Returns:

dict – List item info properties

build_title(item)[source]

Generates an title for an item

Parameters:item (dict) – Item to be described
Returns:string – Item title
classmethod datetime_from_utc(metadata, element=None)[source]

Generates a homan readable time from an items UTC timestamp

Parameters:
  • metadata (dict) – Item metadata
  • details (dict) – Item details
Returns:

tuple – Match date & match time

set_art(list_item, sport, item=None)[source]

Sets art for the given item

Parameters:
  • list_item (xbmcgui.ListItem) – Kodi list item
  • sport (string) – Chosen sport
  • item (dict) – Item to set art for
Returns:

xbmcgui.ListItem – Kodi list item

class resources.lib.Session.Session(constants, util, settings)[source]

Stores, loads & builds up a request session object. Provides login

clear_session()[source]

Clears the session, e.g. removes Cookie file

get_session()[source]

Returns the build up session object

Returns:requests.session – Session object
load_session()[source]

Generates the build up session object, loads & deserializes Cookie file if exists

Returns:requests.session – Session object
login(user, password)[source]

Logs in to the platform, fetches cookie headers and checks if the login succeeded

Parameters:
  • user (string) – Username/E-Mail
  • password (string) – Password
Returns:

bool – Login succeeded

logout()[source]

Clears the session

save_session()[source]

Persists the session, e.g. generates Cookie file

switch_account()[source]

Clears the session & opens up credentials dialogs

class resources.lib.Settings.Settings(utils, dialogs, constants)[source]

Settings interface for Kodi, includes en-/decryption of credentials

classmethod _Settings__get_mac_address(delay=1)

Returns the users mac address

Parameters:delay (int) – retry delay in sec
Returns:string – Devices MAC address
decode(data)[source]

Decodes data

Parameters:data (str) – Data to be decoded
Returns:string – Decoded data
encode(data)[source]

Encodes data

Parameters:data (str) – Data to be encoded
Returns:string – Encoded data
get_credentials()[source]

Returns credentials in clear text

Returns:tuple – Clear text credentials
has_credentials()[source]

checks if credentials are set

Returns:bool – Credentials set
set_credentials()[source]

Opens up the email & password dialogs and stores entered credentials

Returns:tuple – Credential pai
uniq_id(delay=1)[source]

Returns a unique id based on the devices MAC address

Parameters:delay (int) – Retry delay in sec
Returns:string – Unique secret
class resources.lib.Utils.Utils(kodi_base_url, constants)[source]

General plugin utils

build_url(query)[source]

Generates an URL for internal plugin navigation

Parameters:query (dict) – Map of request params
Returns:string - Url
classmethod capitalize(sentence)[source]

Capitalizes a sentence

Parameters:sentence (string) – String to be capitalized
Returns:string - Capitalized sentence
classmethod generate_hash(text)[source]

Returns an hash for a given text

Parameters:text (string) – String to be hashed
Returns:string - Hash
get_addon()[source]

Returns an Kodi addon instance

Returns:xbmcaddon.Addon - Addon instance
get_addon_data()[source]

Returns the relevant addon data for the plugin, e.g. name, version, default fanart, base data path & cookie pathname

Returns:dict - Addon data
classmethod get_inputstream_version()[source]

Retrieves the Inputsteam version (Defaults to 1.0.0)

Returns:string - Inputsteam version
classmethod get_kodi_version()[source]

Retrieves the Kodi version (Defaults to 17)

Returns:string - Kodi version
get_local_string(string_id)[source]

Fetches a translated string from the po files

Parameters:string_id (int) – Id of the string to be translated
Returns:string - Translated string
classmethod get_user_agent()[source]

Determines the user agent string for the current platform

Returns:str – User agent string
log(msg, level=2)[source]

Logs a message to the Kodi log (default debug)

Parameters:
  • msg (mixed) – Message to be logged
  • level (int) – Log level
use_inputstream()[source]

Determines if inoutstream can/should be used to play the videos

Note: At least Kodi 17.4 & Inoutstream 2.0.7 are needed, because of HSL support

Returns:bool - Use inputstream to play videos

Contributor Covenant Code of Conduct

Our Pledge

In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.

Our Standards

Examples of behavior that contributes to creating a positive environment include:

  • Using welcoming and inclusive language
  • Being respectful of differing viewpoints and experiences
  • Gracefully accepting constructive criticism
  • Focusing on what is best for the community
  • Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

  • The use of sexualized language or imagery and unwelcome sexual attention or advances
  • Trolling, insulting/derogatory comments, and personal or political attacks
  • Public or private harassment
  • Publishing others’ private information without explicit permission
  • Other conduct which could reasonably be considered inappropriate

Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

Scope

This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.

Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at undefined. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project’s leadership.

Attribution

This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at http://contributor-covenant.org/version/1/4

Contributing to plugin.video.telekom-sport

Please take a moment to review this document in order to make the contribution process easy and effective for everyone involved.

Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests.

As for everything else in the project, the contributions are governed by our Code of Conduct.

Using the issue tracker

First things first: Do NOT report security vulnerabilities in public issues! Please disclose responsibly by letting us know upfront. We will assess the issue as soon as possible on a best-effort basis and will give you an estimate for when we have a fix and release available for an eventual public disclosure.

The issue tracker is the preferred channel for bug reports, features requests and submitting pull requests, but please respect the following restrictions:

  • Please do not use the issue tracker for personal support requests.
  • Please do not derail or troll issues. Keep the discussion on topic and respect the opinions of others.

Bug reports

A bug is a demonstrable problem that is caused by the code in the repository. Good bug reports are extremely helpful - thank you!

Guidelines for bug reports:

  • Use the GitHub issue search — check if the issue has already been reported.
  • Check if the issue has been fixed — try to reproduce it using master.
  • Isolate the problem — ideally create a reduced test case.

A good bug report shouldn’t leave others needing to chase you up for more information. Please try to be as detailed as possible in your report. What is your environment? What steps will reproduce the issue? What OS experiences the problem? What would you expect to be the outcome? All these details will help people to fix any potential bugs.

Example:

Short and descriptive example bug report title

A summary of the issue and the Kodi & the OS/Processor Arch environment in which it occurs. If suitable, include the steps required to reproduce the bug.

This is the first step This is the second step Further steps, etc.

<log> - a link to the Kodi debug log

Any other information you want to share that is relevant to the issue being reported. This might include the lines of code that you have identified as causing the bug, and potential solutions (and your opinions on their merits).

Feature requests

Feature requests are welcome. But take a moment to find out whether your idea fits with the scope and aims of the project. It’s up to you to make a strong case to convince the project’s developers of the merits of this feature. Please provide as much detail and context as possible.

Pull requests

Good pull requests - patches, improvements, new features - are a fantastic help. They should remain focused in scope and avoid containing unrelated commits.

Please ask first before embarking on any significant pull request (e.g. implementing features, refactoring code), otherwise you risk spending a lot of time working on something that the project’s developers might not want to merge into the project.

For new Contributors

If you never created a pull request before, welcome :tada: :smile: Here is a great tutorial on how to send one :)

  • Fork, clone, and configure the remotes:
# Clone your fork of the repo into the current directory
git clone https://github.com/<your-username>/<repo-name>
# Navigate to the newly cloned directory
cd <repo-name>
# Assign the original repo to a remote called "upstream"
git remote add upstream https://github.com/asciidisco/plugin.video.telekom-sport
  • If you cloned a while ago, get the latest changes from upstream:

    git checkout master
    git pull upstream master
    
  • Create a new topic branch (off the main project development branch) to

    contain your feature, change, or fix:

    git checkout -b <topic-branch-name>
    
  • Make sure to update, or add to the tests when appropriate. Patches and

    features will not be accepted without tests. Run make test to check that all tests pass after you’ve made changes.Run make lint to ensure that your code meets our guildelines (PEP-8)

  • If you added or changed a feature, make sure to document it accordingly in

    the README.md file.

  • Push your topic branch up to your fork:

    git push origin <topic-branch-name>
    
  • Note: We follow Angular style commit guildelines

    Best to install NodeJS & use commitizen for that, all you need to do is

       npm install
    
    initially in the root directiory & then use
    
       make commit
    
    to commit changes.
    
  • Open a Pull Request

    with a clear title and description.

Addendum

Optionally, you can help us with these things. But don’t worry if they are too complicated, we can help you out and teach you as we go :)

  • Update your branch to the latest changes in the upstream master branch. You

    can do that locally with

       git pull --rebase upstream master
    
    Afterwards force push your changes to your remote feature branch.
    
  • Once a pull request is good to go, you can tidy up your commit messages using

    Git’s interactive rebase. Please follow our commit message conventions shown below, as they are used by semantic-release to automatically determine the new version and release to npm. In a nutshell:

Commit Message Conventions

  • Commit test files with test: ... or test(scope): ... prefix
  • Commit bug fixes with fix: ... or fix(scope): ... prefix
  • Commit breaking changes by adding BREAKING CHANGE: in the commit body
    (not the subject line)
  • Commit changes to package.json, .gitignore and other meta files with
    chore(filenamewithoutext): ...
  • Commit changes to README files or comments with docs: ...
  • Cody style changes with style: standard

IMPORTANT: By submitting a patch, you agree to license your work under the same license as that used by the project.

Maintainers

If you have commit access, please follow this process for merging patches and cutting new releases.

Reviewing changes

  • Check that a change is within the scope and philosophy of the component.
  • Check that a change has any necessary tests.
  • Check that a change has any necessary documentation.
  • If there is anything you don’t like, leave a comment below the respective
    lines and submit a “Request changes” review. Repeat until everything has been addressed.
  • If you are not sure about something, mention @asciidisco or specific
    people for help in a comment.
  • If there is only a tiny change left before you can merge it and you think
    it’s best to fix it yourself, you can directly commit to the author’s fork. Leave a comment about it so the author and others will know.
  • Once everything looks good, add an “Approve” review. Don’t forget to say
    something nice 👏🐶💖✨
  • If the commit messages follow our conventions
  • If there is a breaking change, make sure that BREAKING CHANGE: with
    exactly that spelling (incl. the ”:”) is in body of the according commit message. This is very important, better look twice :)
  • Make sure there are fix: ... or feat: ... commits depending on whether
    a bug was fixed or a feature was added. Gotcha: look for spaces before the prefixes of fix: and feat:, these get ignored by semantic-release.
  • Use the “Rebase and merge” button to merge the pull request.
  • Done! You are awesome! Thanks so much for your help 🤗
  • If the commit messages do not follow our conventions
  • Use the “squash and merge” button to clean up the commits and merge at
    the same time: ✨🎩
  • Is there a breaking change? Describe it in the commit body. Start with
    exactly BREAKING CHANGE: followed by an empty line. For the commit subject:
  • Was a new feature added? Use feat: ... prefix in the commit subject
  • Was a bug fixed? Use fix: ... in the commit subject

Sometimes there might be a good reason to merge changes locally. The process looks like this:

Reviewing and merging changes locally

git checkout master # or the main branch configured on github
git pull # get latest changes
git checkout feature-branch # replace name with your branch
git rebase master
git checkout master
git merge feature-branch # replace name with your branch
git push

When merging PRs from forked repositories, we recommend you install the hub command line tools.

This allows you to do:

hub checkout link-to-pull-request

meaning that you will automatically check out the branch for the pull request, without needing any other steps like setting git upstreams! :sparkles:

Changelog

1.2.8 (2018-11-01)

  • chore:
    • github:
    • dependencies:
      • Adds restructured test & yaml linter [ci skip]
  • misc:
    • misc:
      • Update Session.py. fixes asciidisco/plugin.video.telekom-sport/issues/7 [Benjamin]
  • -sport/issues/7style:
    • config:
      • Fixes linting issues in yml files [ci skip]

1.2.7 (2017-10-09)

  • chore:
    • version:
  • fix:
    • fileio:
      • Fixes problems with parsing cookie files. [asciidisco]
  • misc:
    • misc:
      • asciidisco/plugin.video.telekomsport. [asciidisco]
  • ci:
    • docs:
      • Fixes issue with old doc versions being uploaded. [asciidisco]
    • travis:
  • -sport: chore:
  • feat:
    • http:
      • Adds ability to enable processing of invalid SSL certs. [asciidisco]

1.2.6 (2017-10-06)

  • ci:
  • misc:
    • misc:
      • asciidisco/plugin.video.telekomsport. [asciidisco]
  • chore:
    • version:
  • feat:
    • sports:
  • -sport: chore:

1.2.5 (2017-10-06)

  • chore:
    • version:
  • misc:
    • misc:
      • asciidisco/plugin.video.telekomsport. [asciidisco]
  • ci:
  • -sport: chore:
  • test:
    • core:
    • itemhelper:
      • Fixing tests for envs with different timezone settings. [asciidisco]
  • feat:
    • request:
      • Reintruducing ARM based user agent. [asciidisco]

1.2.4 (2017-10-04)

  • chore:
    • version:
  • feat:
    • inputstream:
      • Adds setting to deactivate inputstream, even if available. [asciidisco]
  • ci:

1.2.3 (2017-10-04)

  • docs:
  • fix:
    • settings:
      • Plugin should work without pyDes installed. [asciidisco]
  • ci:
  • chore:
    • version:
  • build:

1.2.2 (2017-09-23)

  • fix:
    • utils:
      • Removes ARM specific entry from the user agent getter. [asciidisco]
  • chore:

1.2.1 (2017-09-22)

  • feat:
    • settings:
      • Allows credentials to be stored unencrypted. [asciidisco]

1.2.0 (2017-09-22)

  • chore:
    • core:
      • Fixes various issues with playing elements & dsiplaying lists. [asciidisco]
    • ci:
    • lint:
      • Adds addon & setup modules to the linter. [asciidisco]
    • license:
    • rewrite:
      • Refactors the plugin. Adds CI build. [asciidisco]
    • python:
    • contentloader:
    • makefile:
      • Adds targets for cleaning files, linting and distingt unit test coverage for packages. [asciidisco]
    • readme:
      • Adds Code of Conduct & Contributing docs, use svg for Travis Badge. [asciidisco]
    • itemhelper:
      • Refactor title getter to reduce complexity. [asciidisco]
    • guidelines:
    • build:
    • codestyle:
    • test:
      • Adds dummy test files for code coverage collection. [asciidisco]
    • settings:
    • gitignore:
  • fix:

1.1.0 (2017-09-15)

  • feat:
    • restructure:
  • fix:
    • core:
      • Fixes eventlanes & stream url retrieval. [asciidisco]
    • addon:
  • misc:
    • misc:
      • Merge pull request #2 from asciidisco/fest/restructure. [asciidisco]

1.0.6 (2017-08-25)

  • chore:
  • fix:
    • inputstream:
      • Fixes issues with inputstream version detection. [asciidisco]

1.0.5 (2017-08-17)

  • fix:
    • list:
      • Fixes failure with plugin stopping when malformed list entries occur. [asciidisco]

1.0.4 (2017-08-07)

  • feat:
    • inputstream:
      • Use inputstream.adaptive to play the streams if available. [asciidisco]

1.0.3 (2017-07-25)

  • feat:
    • core:
      • Adds Basketball, Eishockey & FC Bayern.TV. [asciidisco]

1.0.2 (2017-07-25)

  • feat:
    • mainmenu:

1.0.1 (2017-07-25)

  • fix:
    • core:
      • Fixes Kodi 18 play behaviour & sorting of main menu list. [asciidisco]

1.0.0 (2017-07-24)

Lint Report

Messages

category module obj line column msg
info resources.lib.ContentLoader   413 0 Locally disabling no-member (E1101)

Report

763 statements analysed.

Statistics by type

type number old number difference %documented %badname
module 12 NC NC 100.00 0.00
class 8 NC NC 100.00 0.00
method 83 NC NC 100.00 0.00
function 10 NC NC 100.00 0.00

External dependencies

bs4 (resources.lib.ContentLoader,resources.lib.Session)
pyDes (resources.lib.Settings)
requests (resources.lib.Session)
  \-utils (resources.lib.Session)
resources 
  \-lib 
    \-Cache (addon)
    \-Constants (addon)
    \-ContentLoader (addon)
    \-Dialogs (addon)
    \-ItemHelper (addon)
    \-Session (addon)
    \-Settings (addon)
    \-Utils (addon)
setuptools (setup)
xbmc (resources.lib.Settings,resources.lib.Utils)
xbmcaddon (resources.lib.Utils)
xbmcgui (resources.lib.Dialogs,resources.lib.Cache,resources.lib.ContentLoader)
xbmcplugin (resources.lib.ContentLoader)

Raw metrics

type number % previous difference
code 993 47.15 NC NC
docstring 834 39.60 NC NC
comment 109 5.18 NC NC
empty 170 8.07 NC NC

Duplication

  now previous difference
nb duplicated lines 0 NC NC
percent duplicated lines 0.000 NC NC

Messages by category

type number previous difference
convention 0 NC NC
refactor 0 NC NC
warning 0 NC NC
error 0 NC NC

Messages

message id occurrences
locally-disabled 1

Global evaluation

Your code has been rated at 10.00/10

Coverage Report