mirror of
https://github.com/aleksilassila/reiverr.git
synced 2026-04-21 16:25:11 +02:00
Added & configured typeorm for storing settings
This commit is contained in:
@@ -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
35
src/lib/db.ts
Normal 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;
|
||||
78
src/lib/entities/Settings.ts
Normal file
78
src/lib/entities/Settings.ts
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user