Added & configured typeorm for storing settings

This commit is contained in:
Aleksi Lassila
2023-08-17 02:57:10 +03:00
parent 4d84337f7d
commit dfa8228d9d
15 changed files with 1563 additions and 102 deletions

View File

@@ -52,13 +52,15 @@
trailerVisible = false;
UIVisible = true;
timeout = setTimeout(() => {
trailerMounted = true;
if ($settings.autoplayTrailers) {
timeout = setTimeout(() => {
trailerVisible = true;
}, TRAILER_LOAD_TIME);
}, TRAILER_TIMEOUT - TRAILER_LOAD_TIME);
trailerMounted = true; // Mount the trailer
timeout = setTimeout(() => {
trailerVisible = true;
}, TRAILER_LOAD_TIME);
}, TRAILER_TIMEOUT - TRAILER_LOAD_TIME);
}
}
onMount(() => {

35
src/lib/db.ts Normal file
View File

@@ -0,0 +1,35 @@
import 'reflect-metadata';
import { DataSource } from 'typeorm';
import { Settings } from './entities/Settings';
class TypeOrm {
private static instance: Promise<DataSource | null> | null = null;
private constructor() {
// Private constructor to prevent external instantiation
}
public static getDb(): Promise<DataSource | null> {
if (!TypeOrm.instance) {
TypeOrm.instance = new DataSource({
type: 'sqlite',
database: 'config/reiverr.sqlite',
synchronize: true,
entities: [Settings],
logging: true
})
.initialize()
.then((fulfilled) => {
console.info('Data Source has been initialized!');
return fulfilled;
})
.catch((err) => {
console.error('Error during Data Source initialization', err);
return null;
});
}
return TypeOrm.instance;
}
}
export default TypeOrm;

View File

@@ -0,0 +1,78 @@
import { BaseEntity, Column, Entity, PrimaryColumn } from 'typeorm';
@Entity({ name: 'settings' })
export class Settings extends BaseEntity {
@PrimaryColumn('text')
name: string;
@Column('boolean', { default: false })
isSetupDone: boolean;
// General
@Column('boolean', { default: true })
autoplayTrailers: boolean;
@Column('boolean', { default: true })
excludeLibraryItemsFromDiscovery: boolean;
@Column('text', { default: 'en' })
language: string;
@Column('text', { default: 'US' })
region: string;
@Column('integer', { default: 150 })
animationDuration: number;
// Discover
// @Column()
// discoverIncludedLanguages: string[];
@Column('boolean', { default: true })
discoverFilterBasedOnLanguage: boolean;
// Sonarr
@Column('integer', { default: 0 })
sonarrQualityProfileId: number;
@Column('integer', { default: 0 })
sonarrLanguageProfileId: number;
@Column('text', { default: '/tv' })
sonarrRootFolderPath: string;
// Radarr
@Column('integer', { default: 0 })
radarrQualityProfileId: number;
@Column('integer', { default: 0 })
radarrProfileId: number;
@Column('text', { default: '/movies' })
radarrRootFolderPath: string;
// Jellyfin
@Column('text', { default: '' })
jellyfinUserId: string;
// Playback
@Column('text', { default: 'reiverr' })
preferredPlaybackSource: 'reiverr' | 'jellyfin';
public static async get(name = 'default'): Promise<Settings> {
const settings = await this.findOne({ where: { name } });
if (!settings) {
const defaultSettings = new Settings();
defaultSettings.name = 'default';
await defaultSettings.save();
return defaultSettings;
}
return settings;
}
}

View File

@@ -1,15 +1,15 @@
import { get, writable } from 'svelte/store';
interface Settings {
export interface SettingsValues {
autoplayTrailers: boolean;
excludeLibraryItemsFromDiscovery: boolean;
language: string;
region: string;
animationDuration: number;
discover: {
includedLanguages: string[];
filterBasedOnLanguage: boolean;
};
animationDuration: number;
sonarr: {
qualityProfileId: number;
rootFolderPath: string;
@@ -28,16 +28,16 @@ interface Settings {
};
}
const defaultSettings: Settings = {
export const defaultSettings: SettingsValues = {
autoplayTrailers: true,
excludeLibraryItemsFromDiscovery: true,
language: 'en',
region: 'US',
animationDuration: 150,
discover: {
filterBasedOnLanguage: true,
includedLanguages: ['en']
},
animationDuration: 150,
sonarr: {
qualityProfileId: 4,
rootFolderPath: '/tv',
@@ -56,7 +56,7 @@ const defaultSettings: Settings = {
}
};
export const settings = writable<Settings>(defaultSettings);
export const settings = writable<SettingsValues>();
export const getIncludedLanguagesQuery = () => {
const settingsValue = get(settings);