/* * tabledef.c * * See the README file for copyright information and how to reach the author. * */ #include "tabledef.h" //*************************************************************************** // cEpgdState //*************************************************************************** const char* cEpgdState::states[] = { "init", "standby", "stopped", "busy (events)", "busy (match)", "busy (images)", "busy (scraping)", 0 }; const char* cEpgdState::toName(cEpgdState::State s) { if (!isValid(s)) return "unknown"; return states[s]; } cEpgdState::State cEpgdState::toState(const char* name) { for (int i = 0; i < esCount; i++) if (strcmp(states[i], name) == 0) return (State)i; return esUnknown; } //*************************************************************************** // Event Fields //*************************************************************************** //*************************************************************************** // Fields //*************************************************************************** cDbService::FieldDef cTableEvents::fields[] = { // name format size index type // primary key { "eventid", ffUInt, 0, fiEventId, ftPrimary }, { "channelid", ffAscii, 50, fiChannelId, ftPrimary }, { "masterid", ffUInt, 0, fiMasterId, ftAutoinc }, { "useid", ffUInt, 0, fiUseId, ftData }, // meta { "source", ffAscii, 10, fiSource, ftMeta }, { "fileref", ffAscii, 50, fiFileRef, ftMeta }, { "inssp", ffInt, 10, fiInsSp, ftMeta }, { "updsp", ffInt, 10, fiUpdSp, ftMeta }, { "updflg", ffAscii, 1, fiUpdFlg, ftMeta }, { "delflg", ffAscii, 1, fiDelFlg, ftMeta }, // vdr event data { "tableid", ffInt, 2, fiTableId, ftData }, { "version", ffInt, 3, fiVersion, ftData }, { "title", ffAscii, 200, fiTitle, ftData }, { "comptitle", ffAscii, 200, fiCompTitle, ftData }, { "shorttext", ffAscii, 300, fiShortText, ftData }, { "compshorttext", ffAscii, 300, fiCompShortText, ftData }, { "longdescription", ffText, 25000, fiLongDescription, ftData }, { "starttime", ffInt, 10, fiStartTime, ftData }, { "duration", ffInt, 5, fiDuration, ftData }, { "parentalrating", ffInt, 2, fiParentalRating, ftData }, { "vps", ffInt, 10, fiVps, ftData }, { "description", ffText, 50000, fiDescription, ftCalc }, // additional external data { "shortdescription", ffAscii, 3000, fiShortDescription, ftData }, { "actor", ffAscii, 3000, fiActor, ftData }, { "audio", ffAscii, 50, fiAudio, ftData }, { "category", ffAscii, 50, fiCategory, ftData }, { "country", ffAscii, 50, fiCountry, ftData }, { "director", ffAscii, 250, fiDirector, ftData }, { "flags", ffAscii, 100, fiFlags, ftData }, { "genre", ffAscii, 100, fiGenre, ftData }, { "info", ffText, 10000, fiInfo, ftData }, { "music", ffAscii, 250, fiMusic, ftData }, { "producer", ffText, 1000, fiProducer, ftData }, { "screenplay", ffAscii, 500, fiScreenplay, ftData }, { "shortreview", ffAscii, 500, fiShortreview, ftData }, { "tipp", ffAscii, 250, fiTipp, ftData }, { "topic", ffAscii, 500, fiTopic, ftData }, { "year", ffAscii, 10, fiYear, ftData }, { "rating", ffAscii, 250, fiRating, ftData }, { "fsk", ffAscii, 2, fiFsk, ftData }, { "movieid", ffAscii, 20, fiMovieid, ftData }, { "moderator", ffAscii, 250, fiModerator, ftData }, { "other", ffText, 2000, fiOther, ftData }, { "guest", ffText, 1000, fiGuest, ftData }, { "camera", ffText, 1000, fiCamera, ftData }, { "extepnum", ffInt, 4, fiExtEpNum, ftData }, { "imagecount", ffInt, 2, fiImageCount, ftData }, // episodes (constable) { "episode", ffAscii, 250, fiEpisode, ftData }, { "episodepart", ffAscii, 250, fiEpisodePart, ftData }, { "episodelang", ffAscii, 3, fiEpisodeLang, ftData }, // tv scraper { "scrseriesid", ffInt, 11, fiScrSeriesId, ftData }, { "scrseriesepisode", ffInt, 11, fiScrSeriesEpisode, ftData }, { "scrmovieid", ffInt, 11, fiScrMovieId, ftData }, { "scrsp", ffInt, 11, fiScrSp, ftData }, { 0 } }; cDbService::FieldDef* cTableEvents::toField(const char* name) { for (int i = 0; i < fiCount; i++) if (strcmp(fields[i].name, name) == 0) return &fields[i]; tell(0, "Request for unexpected field '%s', ignoring", name); return 0; } cDbService::IndexDef cTableEvents::indices[] = { // index fields { "comptitle", { fiCompTitle, na }, 0 }, { "source", { fiSource, na }, 0 }, { "FilerefSource", { fiFileRef, fiSource, na }, 0 }, { "channelid", { fiChannelId, na }, 0 }, { "useid", { fiUseId, na }, 0 }, { "useidchannelid", { fiUseId, fiChannelId, na }, 0 }, { "updflgupdsp", { fiUpdFlg, fiUpdSp, na }, 0 }, { "idxsourcechannelid", { fiSource, fiChannelId, na }, 0 }, { 0 } }; //*************************************************************************** // Components //*************************************************************************** cDbService::FieldDef cTableComponents::fields[] = { // name format size index type { "eventid", ffUInt, 0, fiEventId, ftPrimary }, { "channelid", ffAscii, 50, fiChannelId, ftPrimary }, { "stream", ffInt, 3, fiStream, ftPrimary }, { "type", ffInt, 3, fiType, ftPrimary }, { "lang", ffAscii, 8, fiLang, ftPrimary }, { "description", ffAscii, 100, fiDescription, ftPrimary }, { "inssp", ffInt, 0, fiInsSp, ftMeta }, { "updsp", ffInt, 0, fiUpdSp, ftMeta }, { 0 } }; //*************************************************************************** // File References //*************************************************************************** cDbService::FieldDef cTableFileRefs::fields[] = { // name format size index type { "name", ffAscii, 100, fiName, ftPrimary }, { "source", ffAscii, 10, fiSource, ftPrimary }, { "inssp", ffInt, 0, fiInsSp, ftMeta }, { "updsp", ffInt, 0, fiUpdSp, ftMeta }, { "extid", ffAscii, 10, fiExternalId, ftData }, { "fileref", ffAscii, 100, fiFileRef, ftData }, // name + '-' + tag { "tag", ffAscii, 100, fiTag, ftData }, { 0 } }; cDbService::IndexDef cTableFileRefs::indices[] = { // index fields { "SourceFileref", { fiSource, fiFileRef, na }, 0 }, { "Fileref", { fiFileRef, na }, 0 }, { 0 } }; //*************************************************************************** // Image Ref Fields //*************************************************************************** cDbService::FieldDef cTableImageRefs::fields[] = { // name format size index type { "eventid", ffUInt, 0, fiEventId, ftPrimary }, { "lfn", ffInt, 0, fiLfn, ftPrimary }, { "inssp", ffInt, 0, fiInsSp, ftMeta }, { "updsp", ffInt, 0, fiUpdSp, ftMeta }, { "source", ffAscii, 10, fiSource, ftMeta }, { "fileref", ffAscii, 100, fiFileRef, ftData }, { "imagename", ffAscii, 100, fiImgName, ftData }, { 0 } }; cDbService::IndexDef cTableImageRefs::indices[] = { // index fields { "lfn", { fiLfn, na }, 0 }, { "name", { fiImgName, na }, 0 }, { 0 } }; //*************************************************************************** // Image Fields //*************************************************************************** cDbService::FieldDef cTableImages::fields[] = { // name format size index type { "imagename", ffAscii, 100, fiImgName, ftPrimary }, { "inssp", ffInt, 0, fiInsSp, ftMeta }, { "updsp", ffInt, 0, fiUpdSp, ftMeta }, { "image", ffMlob, 200000, fiImage, ftData }, { 0 } }; //*************************************************************************** // Series Episode Fields //*************************************************************************** cDbService::FieldDef cTableEpisodes::fields[] = { // name format size index type // primary key { "compname", ffAscii, 100, fiCompName, ftPrimary }, // episode name compressed { "comppartname", ffAscii, 200, fiCompPartName, ftPrimary }, // part name compressed { "lang", ffAscii, 10, fiLang, ftPrimary }, { "inssp", ffInt, 0, fiInsSp, ftMeta }, { "updsp", ffInt, 0, fiUpdSp, ftMeta }, { "link", ffInt, 0, fiLink, ftData }, // episode data { "shortname", ffAscii, 100, fiShortName, ftData }, { "episodename", ffAscii, 100, fiEpisodeName, ftData }, // episode name // part data { "partname", ffAscii, 300, fiPartName, ftData }, // part name { "season", ffInt, 0, fiSeason, ftData }, { "part", ffInt, 0, fiPart, ftData }, { "parts", ffInt, 0, fiParts, ftData }, { "number", ffInt, 0, fiNumber, ftData }, { "extracol1", ffAscii, 250, fiExtraCol1, ftData }, { "extracol2", ffAscii, 250, fiExtraCol2, ftData }, { "extracol3", ffAscii, 250, fiExtraCol3, ftData }, { "comment", ffAscii, 250, fiComment, ftData }, { 0 } }; cDbService::IndexDef cTableEpisodes::indices[] = { // index fields { "updsp", { fiUpdSp, na }, 0 }, { 0 } }; //*************************************************************************** // Channel Map Fields //*************************************************************************** cDbService::FieldDef cTableChannelMap::fields[] = { // name format size index type { "extid", ffAscii, 10, fiExternalId, ftPrimary }, { "channelid", ffAscii, 50, fiChannelId, ftPrimary }, { "source", ffAscii, 20, fiSource, ftPrimary }, { "channelname", ffAscii, 100, fiChannelName, ftData }, { "vps", ffInt, 0, fiVps, ftData }, { "merge", ffInt, 0, fiMerge, ftData }, { "mergesp", ffInt, 0, fiMergeSp, ftData }, { "inssp", ffInt, 0, fiInsSp, ftMeta }, { "updsp", ffInt, 0, fiUpdSp, ftMeta }, { "updflg", ffAscii, 1, fiUpdFlg, ftMeta }, { 0 } }; cDbService::IndexDef cTableChannelMap::indices[] = { // index fields { "sourceExtid", { fiSource, fiExternalId, na }, 0 }, { "source", { fiSource, na }, 0 }, { "updflg", { fiUpdFlg, na }, 0 }, { "idxsourcechannelid", { fiSource, fiChannelId, na }, 0 }, { 0 } }; //*************************************************************************** // VDRs Fields //*************************************************************************** cDbService::FieldDef cTableVdrs::fields[] = { // name format size index type { "uuid", ffAscii, 40, fiUuid, ftPrimary }, { "inssp", ffInt, 0, fiInsSp, ftMeta }, { "updsp", ffInt, 0, fiUpdSp, ftMeta }, { "name", ffAscii, 100, fiName, ftData }, { "version", ffAscii, 100, fiVersion, ftData }, { "dbapi", ffUInt, 0, fiDbApi, ftData }, { "lastupd", ffInt, 0, fiLastUpdate, ftData }, { "nextupd", ffInt, 0, fiNextUpdate, ftData }, { "state", ffAscii, 20, fiState, ftData }, { "master", ffAscii, 1, fiMaster, ftData }, { "ip", ffAscii, 20, fiIp, ftData }, { 0 } }; //*************************************************************************** // Parameter Fields //*************************************************************************** cDbService::FieldDef cTableParameters::fields[] = { // name format size index type { "owner", ffAscii, 40, fiOwner, ftPrimary }, { "name", ffAscii, 40, fiName, ftPrimary }, { "inssp", ffInt, 0, fiInsSp, ftMeta }, { "updsp", ffInt, 0, fiUpdSp, ftMeta }, { "value", ffAscii, 100, fiValue, ftData }, { 0 } }; //*************************************************************************** // Analyse //*************************************************************************** cDbService::FieldDef cTableAnalyse::fields[] = { // name format size index type { "channelid", ffAscii, 50, fiChannelId, ftPrimary }, { "vdr_masterid", ffUInt, 0, fiVdrMasterId, ftData }, { "vdr_eventid", ffUInt, 0, fiVdrEventId, ftPrimary }, { "vdr_starttime", ffInt, 10, fiVdrStartTime, ftData }, { "vdr_duration", ffInt, 5, fiVdrDuration, ftData }, { "vdr_title", ffAscii, 200, fiVdrTitle, ftData }, { "vdr_shorttext", ffAscii, 300, fiVdrShortText, ftData }, { "ext_masterid", ffUInt, 0, fiExtMasterId, ftData }, { "ext_eventid", ffUInt, 0, fiExtEventId, ftData }, { "ext_starttime", ffInt, 10, fiExtStartTime, ftData }, { "ext_duration", ffInt, 5, fiExtDuration, ftData }, { "ext_title", ffAscii, 200, fiExtTitle, ftData }, { "ext_shorttext", ffAscii, 300, fiExtShortText, ftData }, { "ext_episode", ffAscii, 1, fiExtEpisode, ftData }, { "ext_merge", ffInt, 11, fiExtMerge, ftData }, { "ext_images", ffAscii, 1, fiExiImages, ftData }, { "lvmin", ffInt, 3, fiLvMin, ftData }, { "rank", ffInt, 5, fiRank, ftData }, { 0 } }; cDbService::IndexDef cTableAnalyse::indices[] = { // index fields { "vdr_masterid", { fiVdrMasterId, na }, 0 }, { 0 } }; //*************************************************************************** // Snapshot //*************************************************************************** cDbService::FieldDef cTableSnapshot::fields[] = { // name format size index type { "channelid", ffAscii, 50, fiChannelId, ftData }, { "source", ffAscii, 10, fiSource, ftData }, { "masterid", ffUInt, 0, fiVdrMasterId, ftData }, { "eventid", ffUInt, 0, fiEventId, ftData }, { "useid", ffUInt, 0, fiUseId, ftData }, { "starttime", ffInt, 10, fiStartTime, ftData }, { "duration", ffInt, 5, fiDuration, ftData }, { "title", ffAscii, 200, fiTitle, ftData }, { "comptitle", ffAscii, 200, fiCompTitle, ftData }, { "shorttext", ffAscii, 300, fiShortText, ftData }, { "compshorttext", ffAscii, 300, fiCompShortText, ftData }, { "updsp", ffInt, 10, fiUpdsp, ftData }, { "episode", ffAscii, 1, fiEpisode, ftData }, { "merge", ffInt, 0, fiMerge, ftData }, { "images", ffAscii, 1, fiImages, ftData }, { 0 } }; cDbService::IndexDef cTableSnapshot::indices[] = { // index fields { "channelid", { fiChannelId, na }, 0 }, { "starttimeSource", { fiStartTime, fiSource, na }, 0 }, { 0 } }; //*************************************************************************** // Series Fields //*************************************************************************** cDbService::FieldDef cTableSeries::fields[] = { // name format size index type // primary key { "series_id", ffUInt, 0, fiSeriesId, ftPrimary }, //Data { "series_name", ffAscii, 200, fiSeriesName, ftData }, { "series_last_scraped", ffUInt, 0, fiSeriesLastScraped, ftData }, { "series_last_updated", ffUInt, 0, fiSeriesLastUpdated, ftData }, { "series_overview", ffText, 10000, fiSeriesOverview, ftData }, { "series_firstaired", ffAscii, 50, fiSeriesFirstAired, ftData }, { "series_network", ffAscii, 100, fiSeriesNetwork, ftData }, { "series_imdb_id", ffAscii, 20, fiSeriesIMDBId, ftData }, { "series_genre", ffAscii, 100, fiSeriesGenre, ftData }, { "series_rating", ffFloat, 31, fiSeriesRating, ftData }, { "series_status", ffAscii, 50, fiSeriesStatus, ftData }, { 0 } }; cDbService::FieldDef* cTableSeries::toField(const char* name) { for (int i = 0; i < fiCount; i++) if (strcmp(fields[i].name, name) == 0) return &fields[i]; tell(0, "Request for unexpected field '%s', ignoring", name); return 0; } cDbService::IndexDef cTableSeries::indices[] = { // index fields { 0 } }; //*************************************************************************** // SeriesEpisode Fields //*************************************************************************** cDbService::FieldDef cTableSeriesEpisode::fields[] = { // name format size index type // primary key { "episode_id", ffUInt, 0, fiEpisodeId, ftPrimary }, //Data { "episode_number", ffUInt, 0, fiEpisodeNumber, ftData }, { "season_number", ffUInt, 0, fiSeasonNumber, ftData }, { "episode_name", ffAscii, 300, fiEpisodeName, ftData }, { "episode_overview", ffText, 10000, fiEpisodeOverview, ftData }, { "episode_firstaired", ffAscii, 20, fiEpisodeFirstAired, ftData }, { "episode_gueststars", ffAscii, 1000, fiEpisodeGuestStars, ftData }, { "episode_rating", ffFloat, 31, fiEpisodeRating, ftData }, { "episode_last_updated", ffUInt, 0, fiEpisodeLastUpdated, ftData }, { "series_id", ffUInt, 0, fiSeriesId, ftData }, { 0 } }; cDbService::FieldDef* cTableSeriesEpisode::toField(const char* name) { for (int i = 0; i < fiCount; i++) if (strcmp(fields[i].name, name) == 0) return &fields[i]; tell(0, "Request for unexpected field '%s', ignoring", name); return 0; } cDbService::IndexDef cTableSeriesEpisode::indices[] = { // index fields { "series_id", { fiSeriesId, na }, 0 }, { 0 } }; //*************************************************************************** // SeriesMedia Fields //*************************************************************************** cDbService::FieldDef cTableSeriesMedia::fields[] = { // name format size index type // primary key { "series_id", ffUInt, 0, fiSeriesId, ftPrimary }, { "season_number", ffUInt, 0, fiSeasonNumber, ftPrimary }, { "episode_id", ffUInt, 0, fiEpisodeId, ftPrimary }, { "actor_id", ffUInt, 0, fiActorId, ftPrimary }, { "media_type", ffUInt, 0, fiMediaType, ftPrimary }, //Data { "media_url", ffAscii, 100, fiMediaUrl, ftData }, { "media_width", ffUInt, 0, fiMediaWidth, ftData }, { "media_height", ffUInt, 0, fiMediaHeight, ftData }, { "media_rating", ffFloat, 31, fiMediaRating, ftData }, { "media_content", ffMlob, 1000000, fiMediaContent, ftData }, { 0 } }; cDbService::FieldDef* cTableSeriesMedia::toField(const char* name) { for (int i = 0; i < fiCount; i++) if (strcmp(fields[i].name, name) == 0) return &fields[i]; tell(0, "Request for unexpected field '%s', ignoring", name); return 0; } cDbService::IndexDef cTableSeriesMedia::indices[] = { // index fields { "series_id", { fiSeriesId, na }, 0 }, { "season_number", { fiSeasonNumber, na }, 0 }, { "episode_id", { fiEpisodeId, na }, 0 }, { "actor_id", { fiActorId, na }, 0 }, { 0 } }; //*************************************************************************** // SeriesActor Fields //*************************************************************************** cDbService::FieldDef cTableSeriesActor::fields[] = { // name format size index type // primary key { "actor_id", ffUInt, 0, fiActorId, ftPrimary }, //Data { "actor_name", ffAscii, 100, fiActorName, ftData }, { "actor_role", ffAscii, 500, fiActorRole, ftData }, { "actor_sortorder", ffUInt, 0, fiSortOrder, ftData }, { 0 } }; cDbService::FieldDef* cTableSeriesActor::toField(const char* name) { for (int i = 0; i < fiCount; i++) if (strcmp(fields[i].name, name) == 0) return &fields[i]; tell(0, "Request for unexpected field '%s', ignoring", name); return 0; } cDbService::IndexDef cTableSeriesActor::indices[] = { // index fields { 0 } }; //*************************************************************************** // Movie Fields //*************************************************************************** cDbService::FieldDef cTableMovies::fields[] = { // name format size index type // primary key { "movie_id", ffUInt, 0, fiMovieId, ftPrimary }, //Data { "movie_title", ffAscii, 300, fiTitle, ftData }, { "movie_original_title", ffAscii, 300, fiOriginalTitle, ftData }, { "movie_tagline", ffAscii, 1000, fiTagline, ftData }, { "movie_overview", ffText, 5000, fiOverview, ftData }, { "movie_adult", ffUInt, 0, fiIsAdult, ftData }, { "movie_collection_id", ffUInt, 0, fiCollectionId, ftData }, { "movie_collection_name", ffAscii, 300, fiCollectionName, ftData }, { "movie_budget", ffUInt, 0, fiBudget, ftData }, { "movie_revenue", ffUInt, 0, fiRevenue, ftData }, { "movie_genres", ffAscii, 500, fiGenres, ftData }, { "movie_homepage", ffAscii, 300, fiHomepage, ftData }, { "movie_release_date", ffAscii, 20, fiReleaaseDate, ftData }, { "movie_runtime", ffUInt, 0, fiRuntime, ftData }, { "movie_popularity", ffFloat, 31, fiPopularity, ftData }, { "movie_vote_average", ffFloat, 31, fiVoteAverage, ftData }, { 0 } }; cDbService::FieldDef* cTableMovies::toField(const char* name) { for (int i = 0; i < fiCount; i++) if (strcmp(fields[i].name, name) == 0) return &fields[i]; tell(0, "Request for unexpected field '%s', ignoring", name); return 0; } cDbService::IndexDef cTableMovies::indices[] = { // index fields { "movie_id", { fiMovieId, na }, 0 }, { 0 } }; //*************************************************************************** // MovieActor Fields //*************************************************************************** cDbService::FieldDef cTableMovieActor::fields[] = { // name format size index type // primary key { "actor_id", ffUInt, 0, fiActorId, ftPrimary }, //Data { "actor_name", ffAscii, 300, fiActorName, ftData }, { 0 } }; cDbService::FieldDef* cTableMovieActor::toField(const char* name) { for (int i = 0; i < fiCount; i++) if (strcmp(fields[i].name, name) == 0) return &fields[i]; tell(0, "Request for unexpected field '%s', ignoring", name); return 0; } cDbService::IndexDef cTableMovieActor::indices[] = { // index fields { "actor_id", { fiActorId, na }, 0 }, { 0 } }; //*************************************************************************** // MovieActors Fields //*************************************************************************** cDbService::FieldDef cTableMovieActors::fields[] = { // name format size index type // primary key { "movie_id", ffUInt, 0, fiMovieId, ftPrimary }, { "actor_id", ffUInt, 0, fiActorId, ftPrimary }, //Data { "actor_role", ffAscii, 300, fiRole, ftData }, { 0 } }; cDbService::FieldDef* cTableMovieActors::toField(const char* name) { for (int i = 0; i < fiCount; i++) if (strcmp(fields[i].name, name) == 0) return &fields[i]; tell(0, "Request for unexpected field '%s', ignoring", name); return 0; } cDbService::IndexDef cTableMovieActors::indices[] = { // index fields { "movie_id", { fiMovieId, na }, 0 }, { "actor_id", { fiActorId, na }, 0 }, { 0 } }; //*************************************************************************** // cTableMovieMedia Fields //*************************************************************************** cDbService::FieldDef cTableMovieMedia::fields[] = { // name format size index type // primary key { "movie_id", ffUInt, 0, fiMovieId, ftPrimary }, { "actor_id", ffUInt, 0, fiActorId, ftPrimary }, { "media_type", ffUInt, 0, fiMediaType, ftPrimary }, //Data { "media_url", ffAscii, 100, fiMediaUrl, ftData }, { "media_width", ffUInt, 0, fiMediaWidth, ftData }, { "media_height", ffUInt, 0, fiMediaHeight, ftData }, { "media_content", ffMlob, 1000000, fiMediaContent, ftData }, { 0 } }; cDbService::FieldDef* cTableMovieMedia::toField(const char* name) { for (int i = 0; i < fiCount; i++) if (strcmp(fields[i].name, name) == 0) return &fields[i]; tell(0, "Request for unexpected field '%s', ignoring", name); return 0; } cDbService::IndexDef cTableMovieMedia::indices[] = { // index fields { "movie_id", { fiMovieId, na }, 0 }, { "actor_id", { fiActorId, na }, 0 }, { 0 } }; //*************************************************************************** // cTableRecordings Fields //*************************************************************************** cDbService::FieldDef cTableRecordings::fields[] = { // name format size index type // primary key { "uuid", ffAscii, 40, fiUuid, ftPrimary }, { "rec_path", ffAscii, 200, fiRecPath, ftPrimary }, { "rec_start", ffUInt, 0, fiRecStart, ftPrimary }, //Data { "event_id", ffUInt, 0, fiEventId, ftData }, { "channel_id", ffAscii, 50, fiChannelId, ftData }, { "scrapinfo_movie_id", ffUInt, 0, fiScrapInfoMovieId, ftData }, { "scrapinfo_series_id", ffUInt, 0, fiScrapInfoSeriesId, ftData }, { "scrapinfo_episode_id", ffUInt, 0, fiScrapInfoEpisodeId, ftData }, { "scrap_new", ffUInt, 0, fiScrapNew, ftData }, { "rec_title", ffAscii, 200, fiRecTitle, ftData }, { "rec_subtitle", ffAscii, 500, fiRecSubTitle, ftData }, { "rec_duration", ffUInt, 0, fiRecDuration, ftData }, { "movie_id", ffUInt, 0, fiMovieId, ftData }, { "series_id", ffUInt, 0, fiSeriesId, ftData }, { "episode_id", ffUInt, 0, fiEpisodeId, ftData }, { 0 } }; cDbService::FieldDef* cTableRecordings::toField(const char* name) { for (int i = 0; i < fiCount; i++) if (strcmp(fields[i].name, name) == 0) return &fields[i]; tell(0, "Request for unexpected field '%s', ignoring", name); return 0; } cDbService::IndexDef cTableRecordings::indices[] = { // index fields { "uuid", { fiUuid, na }, 0 }, { "rec_path", { fiRecPath, na }, 0 }, { "rec_start", { fiRecStart, na }, 0 }, { 0 } };