mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2025-10-09 02:12:04 +00:00
Updates migration to fetch version type dynamically from the database rather than using hardcoded values, ensuring accurate mapping during database upgrades. Refines video version insertion query to utilize the correct item type from the version type table. Helps prevent mismatches and enhances database integrity.
185 lines
5.4 KiB
Python
185 lines
5.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import division, absolute_import, print_function, unicode_literals
|
|
|
|
##################################################################################################
|
|
|
|
from ...helper import LazyLogger
|
|
|
|
from .kodi import Kodi
|
|
from . import queries as QU
|
|
|
|
##################################################################################################
|
|
|
|
LOG = LazyLogger(__name__)
|
|
|
|
##################################################################################################
|
|
|
|
|
|
class Movies(Kodi):
|
|
|
|
def __init__(self, cursor):
|
|
|
|
self.cursor = cursor
|
|
Kodi.__init__(self)
|
|
|
|
def create_entry_unique_id(self):
|
|
self.cursor.execute(QU.create_unique_id)
|
|
|
|
return self.cursor.fetchone()[0] + 1
|
|
|
|
def create_entry_rating(self):
|
|
self.cursor.execute(QU.create_rating)
|
|
|
|
return self.cursor.fetchone()[0] + 1
|
|
|
|
def create_entry(self):
|
|
self.cursor.execute(QU.create_movie)
|
|
|
|
return self.cursor.fetchone()[0] + 1
|
|
|
|
def get(self, *args):
|
|
|
|
try:
|
|
self.cursor.execute(QU.get_movie, args)
|
|
return self.cursor.fetchone()[0]
|
|
except TypeError:
|
|
return
|
|
|
|
def add(self, *args):
|
|
self.cursor.execute(QU.add_movie, args)
|
|
|
|
def add_videoversion(self, *args):
|
|
self.cursor.execute(QU.check_video_version)
|
|
if self.cursor.fetchone()[0] == 1:
|
|
self.cursor.execute(QU.add_video_version, args)
|
|
|
|
def update(self, *args):
|
|
self.cursor.execute(QU.update_movie, args)
|
|
|
|
def delete(self, kodi_id, file_id):
|
|
|
|
self.cursor.execute(QU.delete_movie, (kodi_id,))
|
|
self.cursor.execute(QU.delete_file, (file_id,))
|
|
self.cursor.execute(QU.check_video_version)
|
|
if self.cursor.fetchone()[0] == 1:
|
|
self.cursor.execute(QU.delete_video_version, (file_id,))
|
|
|
|
def get_rating_id(self, *args):
|
|
|
|
try:
|
|
self.cursor.execute(QU.get_rating, args)
|
|
|
|
return self.cursor.fetchone()[0]
|
|
except TypeError:
|
|
return None
|
|
|
|
def add_ratings(self, *args):
|
|
"""Add ratings, rating type and votes."""
|
|
self.cursor.execute(QU.add_rating, args)
|
|
|
|
def update_ratings(self, *args):
|
|
"""Update rating by rating_id."""
|
|
self.cursor.execute(QU.update_rating, args)
|
|
|
|
def get_unique_id(self, *args):
|
|
|
|
try:
|
|
self.cursor.execute(QU.get_unique_id, args)
|
|
|
|
return self.cursor.fetchone()[0]
|
|
except TypeError:
|
|
return
|
|
|
|
def add_unique_id(self, *args):
|
|
"""Add the provider id, imdb, tvdb."""
|
|
self.cursor.execute(QU.add_unique_id, args)
|
|
|
|
def update_unique_id(self, *args):
|
|
"""Update the provider id, imdb, tvdb."""
|
|
self.cursor.execute(QU.update_unique_id, args)
|
|
|
|
def add_countries(self, countries, *args):
|
|
|
|
for country in countries:
|
|
self.cursor.execute(QU.update_country, (self.get_country(country),) + args)
|
|
|
|
def add_country(self, *args):
|
|
self.cursor.execute(QU.add_country, args)
|
|
return self.cursor.lastrowid
|
|
|
|
def get_country(self, *args):
|
|
|
|
try:
|
|
self.cursor.execute(QU.get_country, args)
|
|
|
|
return self.cursor.fetchone()[0]
|
|
except TypeError:
|
|
return self.add_country(*args)
|
|
|
|
def add_boxset(self, *args):
|
|
self.cursor.execute(QU.add_set, args)
|
|
return self.cursor.lastrowid
|
|
|
|
def update_boxset(self, *args):
|
|
self.cursor.execute(QU.update_set, args)
|
|
|
|
def set_boxset(self, *args):
|
|
self.cursor.execute(QU.update_movie_set, args)
|
|
|
|
def remove_from_boxset(self, *args):
|
|
self.cursor.execute(QU.delete_movie_set, args)
|
|
|
|
def delete_boxset(self, *args):
|
|
self.cursor.execute(QU.delete_set, args)
|
|
|
|
def migrations(self):
|
|
"""
|
|
Used to trigger required database migrations for new versions
|
|
"""
|
|
self.cursor.execute(QU.get_version)
|
|
version_id = self.cursor.fetchone()[0]
|
|
changes = False
|
|
|
|
# Will run every time Kodi starts, but will be fast enough on
|
|
# subsequent runs to not be a meaningful delay
|
|
if 131 <= version_id < 134:
|
|
changes = self.omega_migration()
|
|
|
|
if version_id >= 134:
|
|
changes = self.piers_migration()
|
|
|
|
return changes
|
|
|
|
def omega_migration(self):
|
|
"""
|
|
Adds a video version for all existing movies
|
|
"""
|
|
LOG.info("Starting migration for Omega database changes")
|
|
# Tracks if this migration made any changes
|
|
changes = False
|
|
self.cursor.execute(QU.get_missing_versions)
|
|
|
|
# Sets all existing movies without a version to standard version
|
|
for entry in self.cursor.fetchall():
|
|
self.add_videoversion(entry[0], entry[1], "movie", "0", 40400)
|
|
changes = True
|
|
|
|
LOG.info("Omega database migration is complete")
|
|
return changes
|
|
|
|
def piers_migration(self):
|
|
"""
|
|
Adds a video version for all existing movies
|
|
"""
|
|
LOG.info("Starting migration for Piers database changes")
|
|
# Tracks if this migration made any changes
|
|
changes = False
|
|
self.cursor.execute(QU.get_missing_versions)
|
|
|
|
# Sets all existing movies without a version to standard version
|
|
for entry in self.cursor.fetchall():
|
|
self.add_videoversion(entry[0], entry[1], "movie", 40400, 40400)
|
|
changes = True
|
|
|
|
LOG.info("Piers database migration is complete")
|
|
return changes
|