Source code for plaso.parsers.sqlite_plugins.kodi

# -*- coding: utf-8 -*-
"""SQLite parser plugin for Kodi videos database files."""

from plaso.containers import events
from plaso.parsers import sqlite
from plaso.parsers.sqlite_plugins import interface


[docs] class KodiVideoEventData(events.EventData): """Kodi video event data. Attributes: filename (str): video filename. last_played_time (dfdatetime.DateTimeValues): date and time of the last occurrence the video was played. play_count (int): number of times the video has been played. query (str): SQL query that was used to obtain the event data. """ DATA_TYPE = 'kodi:videos:viewing'
[docs] def __init__(self): """Initializes event data.""" super(KodiVideoEventData, self).__init__(data_type=self.DATA_TYPE) self.filename = None self.last_played_time = None self.play_count = None self.query = None
[docs] class KodiMyVideosPlugin(interface.SQLitePlugin): """SQLite parser plugin for Kodi videos database files. The Kodi videos database file is typically stored in: MyVideos.db """ NAME = 'kodi' DATA_FORMAT = 'Kodi videos SQLite database (MyVideos.db) file' REQUIRED_STRUCTURE = { 'files': frozenset([ 'idFile', 'strFilename', 'playCount', 'lastPlayed'])} QUERIES = [ ('SELECT idFile, strFilename, playCount, lastPlayed FROM files', 'ParseVideoRow')] SCHEMAS = [{ 'actor': ( 'CREATE TABLE actor ( actor_id INTEGER PRIMARY KEY, name TEXT, ' 'art_urls TEXT )'), 'actor_link': ( 'CREATE TABLE actor_link(actor_id INTEGER, media_id INTEGER, ' 'media_type TEXT, role TEXT, cast_order INTEGER)'), 'art': ( 'CREATE TABLE art(art_id INTEGER PRIMARY KEY, media_id INTEGER, ' 'media_type TEXT, type TEXT, url TEXT)'), 'bookmark': ( 'CREATE TABLE bookmark ( idBookmark integer primary key, idFile ' 'integer, timeInSeconds double, totalTimeInSeconds double, ' 'thumbNailImage text, player text, playerState text, type integer)'), 'country': ( 'CREATE TABLE country ( country_id integer primary key, name TEXT)'), 'country_link': ( 'CREATE TABLE country_link (country_id integer, media_id integer, ' 'media_type TEXT)'), 'director_link': ( 'CREATE TABLE director_link(actor_id INTEGER, media_id INTEGER, ' 'media_type TEXT)'), 'episode': ( 'CREATE TABLE episode ( idEpisode integer primary key, idFile ' 'integer,c00 text,c01 text,c02 text,c03 text,c04 text,c05 text,c06 ' 'text,c07 text,c08 text,c09 text,c10 text,c11 text,c12 ' 'varchar(24),c13 varchar(24),c14 text,c15 text,c16 text,c17 ' 'varchar(24),c18 text,c19 text,c20 text,c21 text,c22 text,c23 text, ' 'idShow integer, userrating integer, idSeason integer)'), 'files': ( 'CREATE TABLE files ( idFile integer primary key, idPath integer, ' 'strFilename text, playCount integer, lastPlayed text, dateAdded ' 'text)'), 'genre': ( 'CREATE TABLE genre ( genre_id integer primary key, name TEXT)'), 'genre_link': ( 'CREATE TABLE genre_link (genre_id integer, media_id integer, ' 'media_type TEXT)'), 'movie': ( 'CREATE TABLE movie ( idMovie integer primary key, idFile ' 'integer,c00 text,c01 text,c02 text,c03 text,c04 text,c05 text,c06 ' 'text,c07 text,c08 text,c09 text,c10 text,c11 text,c12 text,c13 ' 'text,c14 text,c15 text,c16 text,c17 text,c18 text,c19 text,c20 ' 'text,c21 text,c22 text,c23 text, idSet integer, userrating ' 'integer, premiered text)'), 'movielinktvshow': ( 'CREATE TABLE movielinktvshow ( idMovie integer, IdShow integer)'), 'musicvideo': ( 'CREATE TABLE musicvideo ( idMVideo integer primary key, idFile ' 'integer,c00 text,c01 text,c02 text,c03 text,c04 text,c05 text,c06 ' 'text,c07 text,c08 text,c09 text,c10 text,c11 text,c12 text,c13 ' 'text,c14 text,c15 text,c16 text,c17 text,c18 text,c19 text,c20 ' 'text,c21 text,c22 text,c23 text, userrating integer, premiered ' 'text)'), 'path': ( 'CREATE TABLE path ( idPath integer primary key, strPath text, ' 'strContent text, strScraper text, strHash text, scanRecursive ' 'integer, useFolderNames bool, strSettings text, noUpdate bool, ' 'exclude bool, dateAdded text, idParentPath integer)'), 'rating': ( 'CREATE TABLE rating (rating_id INTEGER PRIMARY KEY, media_id ' 'INTEGER, media_type TEXT, rating_type TEXT, rating FLOAT, votes ' 'INTEGER)'), 'seasons': ( 'CREATE TABLE seasons ( idSeason integer primary key, idShow ' 'integer, season integer, name text, userrating integer)'), 'sets': ( 'CREATE TABLE sets ( idSet integer primary key, strSet text, ' 'strOverview text)'), 'settings': ( 'CREATE TABLE settings ( idFile integer, Deinterlace bool,ViewMode ' 'integer,ZoomAmount float, PixelRatio float, VerticalShift float, ' 'AudioStream integer, SubtitleStream integer,SubtitleDelay float, ' 'SubtitlesOn bool, Brightness float, Contrast float, Gamma ' 'float,VolumeAmplification float, AudioDelay float, ' 'OutputToAllSpeakers bool, ResumeTime integer,Sharpness float, ' 'NoiseReduction float, NonLinStretch bool, PostProcess ' 'bool,ScalingMethod integer, DeinterlaceMode integer, StereoMode ' 'integer, StereoInvert bool, VideoStream integer)'), 'stacktimes': ( 'CREATE TABLE stacktimes (idFile integer, times text)'), 'streamdetails': ( 'CREATE TABLE streamdetails (idFile integer, iStreamType integer, ' 'strVideoCodec text, fVideoAspect float, iVideoWidth integer, ' 'iVideoHeight integer, strAudioCodec text, iAudioChannels integer, ' 'strAudioLanguage text, strSubtitleLanguage text, iVideoDuration ' 'integer, strStereoMode text, strVideoLanguage text)'), 'studio': ( 'CREATE TABLE studio ( studio_id integer primary key, name TEXT)'), 'studio_link': ( 'CREATE TABLE studio_link (studio_id integer, media_id integer, ' 'media_type TEXT)'), 'tag': ( 'CREATE TABLE tag (tag_id integer primary key, name TEXT)'), 'tag_link': ( 'CREATE TABLE tag_link (tag_id integer, media_id integer, ' 'media_type TEXT)'), 'tvshow': ( 'CREATE TABLE tvshow ( idShow integer primary key,c00 text,c01 ' 'text,c02 text,c03 text,c04 text,c05 text,c06 text,c07 text,c08 ' 'text,c09 text,c10 text,c11 text,c12 text,c13 text,c14 text,c15 ' 'text,c16 text,c17 text,c18 text,c19 text,c20 text,c21 text,c22 ' 'text,c23 text, userrating integer, duration INTEGER)'), 'tvshowlinkpath': ( 'CREATE TABLE tvshowlinkpath (idShow integer, idPath integer)'), 'uniqueid': ( 'CREATE TABLE uniqueid (uniqueid_id INTEGER PRIMARY KEY, media_id ' 'INTEGER, media_type TEXT, value TEXT, type TEXT)'), 'version': ( 'CREATE TABLE version (idVersion integer, iCompressCount integer)'), 'writer_link': ( 'CREATE TABLE writer_link(actor_id INTEGER, media_id INTEGER, ' 'media_type TEXT)')}]
[docs] def ParseVideoRow(self, parser_mediator, query, row, **unused_kwargs): """Parses a Video row. Args: parser_mediator (ParserMediator): mediates interactions between parsers and other components, such as storage and dfVFS. query (str): query that created the row. row (sqlite3.Row): row. """ query_hash = hash(query) event_data = KodiVideoEventData() event_data.filename = self._GetRowValue(query_hash, row, 'strFilename') event_data.last_played_time = self._GetDateTimeStringRowValue( query_hash, row, 'lastPlayed') event_data.play_count = self._GetRowValue(query_hash, row, 'playCount') event_data.query = query parser_mediator.ProduceEventData(event_data)
sqlite.SQLiteParser.RegisterPlugin(KodiMyVideosPlugin)