Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

YouTube Music-IDs für Folgen hinzugefügt #79

Merged
merged 4 commits into from
Oct 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
41 changes: 22 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Folgende Projekte greifen bereits auf diesen Datensatz zurück:
<summary><b>SQL Schema</b></summary>

``` sql
CREATE TABLE IF NOT EXISTS "hörspiel"(
CREATE TABLE "hörspiel"(
"hörspielID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"titel" TEXT NOT NULL,
"kurzbeschreibung" TEXT,
Expand All @@ -54,99 +54,100 @@ CREATE TABLE IF NOT EXISTS "hörspiel"(
"idSpotify" TEXT,
"idBookbeat" TEXT,
"idAmazonMusic" TEXT,
"idAmazon" TEXT
"idAmazon" TEXT,
"idYouTubeMusic" TEXT
);
CREATE TABLE IF NOT EXISTS "hörspielTeil"(
CREATE TABLE "hörspielTeil"(
"teil" INTEGER PRIMARY KEY NOT NULL REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE,
"hörspiel" INTEGER NOT NULL REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE,
"position" INTEGER NOT NULL CHECK("position" > 0),
"buchstabe" TEXT CHECK(LENGTH("buchstabe") = 1),
UNIQUE("hörspiel", "position"),
UNIQUE("hörspiel", "buchstabe")
);
CREATE TABLE IF NOT EXISTS "serie"(
CREATE TABLE "serie"(
"nummer" INTEGER PRIMARY KEY NOT NULL,
"hörspielID" INTEGER NOT NULL UNIQUE REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS "spezial"(
CREATE TABLE "spezial"(
"hörspielID" INTEGER PRIMARY KEY NOT NULL REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE,
"position" INTEGER NOT NULL UNIQUE CHECK("position" > 0)
);
CREATE TABLE IF NOT EXISTS "kurzgeschichten"(
CREATE TABLE "kurzgeschichten"(
"hörspielID" INTEGER PRIMARY KEY NOT NULL REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS "dieDr3i"(
CREATE TABLE "dieDr3i"(
"nummer" INTEGER,
"hörspielID" INTEGER PRIMARY KEY NOT NULL REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS "kids"(
CREATE TABLE "kids"(
"nummer" INTEGER,
"hörspielID" INTEGER PRIMARY KEY NOT NULL REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS "medium"(
CREATE TABLE "medium"(
"mediumID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"hörspielID" INTEGER NOT NULL REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE,
"position" INTEGER NOT NULL CHECK("position" > 0),
"ripLog" BOOLEAN NOT NULL,
"musicBrainzID" TEXT,
UNIQUE("hörspielID", "position")
);
CREATE TABLE IF NOT EXISTS "track"(
CREATE TABLE "track"(
"trackID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"mediumID" INTEGER NOT NULL REFERENCES "medium"("mediumID") ON DELETE CASCADE ON UPDATE CASCADE,
"position" INTEGER NOT NULL CHECK("position" > 0),
"titel" TEXT NOT NULL,
"dauer" INTEGER NOT NULL CHECK("dauer" > 0),
UNIQUE("mediumID", "position")
);
CREATE TABLE IF NOT EXISTS "kapitel"(
CREATE TABLE "kapitel"(
"trackID" INTEGER PRIMARY KEY NOT NULL REFERENCES "track"("trackID") ON DELETE CASCADE ON UPDATE CASCADE,
"hörspielID" INTEGER NOT NULL REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE,
"position" INTEGER NOT NULL CHECK("position" > 0),
"abweichenderTitel" TEXT,
UNIQUE("hörspielID", "position")
);
CREATE TABLE IF NOT EXISTS "person"(
CREATE TABLE "person"(
"personID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"name" TEXT NOT NULL UNIQUE
);
CREATE TABLE IF NOT EXISTS "pseudonym"(
CREATE TABLE "pseudonym"(
"pseudonymID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"name" TEXT NOT NULL UNIQUE
);
CREATE TABLE IF NOT EXISTS "rolle"(
CREATE TABLE "rolle"(
"rolleID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"name" TEXT NOT NULL UNIQUE
);
CREATE TABLE IF NOT EXISTS "sprechrolle"(
CREATE TABLE "sprechrolle"(
"sprechrolleID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"hörspielID" INTEGER NOT NULL REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE,
"rolleID" INTEGER NOT NULL REFERENCES "rolle"("rolleID") ON DELETE CASCADE ON UPDATE CASCADE,
"position" INTEGER NOT NULL CHECK("position" > 0),
UNIQUE("hörspielID", "rolleID"),
UNIQUE("hörspielID", "position")
);
CREATE TABLE IF NOT EXISTS "sprechrolleTeil"(
CREATE TABLE "sprechrolleTeil"(
"sprechrolleID" INTEGER NOT NULL REFERENCES "sprechrolle"("sprechrolleID") ON DELETE CASCADE ON UPDATE CASCADE,
"hörspielID" INTEGER NOT NULL REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE,
"position" INTEGER NOT NULL CHECK("position" > 0),
PRIMARY KEY("sprechrolleID", "hörspielID"),
UNIQUE("hörspielID", "position")
);
CREATE TABLE IF NOT EXISTS "spricht"(
CREATE TABLE "spricht"(
"sprechrolleID" INTEGER NOT NULL REFERENCES "sprechrolle"("sprechrolleID") ON DELETE CASCADE ON UPDATE CASCADE,
"personID" INTEGER NOT NULL REFERENCES "person"("personID") ON DELETE CASCADE ON UPDATE CASCADE,
"pseudonymID" INTEGER REFERENCES "pseudonym"("pseudonymID") ON DELETE SET NULL ON UPDATE CASCADE,
"position" INTEGER NOT NULL CHECK("position" > 0),
PRIMARY KEY("sprechrolleID", "personID"),
UNIQUE("sprechrolleID", "position")
);
CREATE TABLE IF NOT EXISTS "hörspielBuchautor"(
CREATE TABLE "hörspielBuchautor"(
"hörspielID" INTEGER NOT NULL REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE,
"personID" INTEGER NOT NULL REFERENCES "person"("personID") ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY("hörspielID", "personID")
);
CREATE TABLE IF NOT EXISTS "hörspielSkriptautor"(
CREATE TABLE "hörspielSkriptautor"(
"hörspielID" INTEGER NOT NULL REFERENCES "hörspiel"("hörspielID") ON DELETE CASCADE ON UPDATE CASCADE,
"personID" INTEGER NOT NULL REFERENCES "person"("personID") ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY("hörspielID", "personID")
Expand Down Expand Up @@ -230,6 +231,7 @@ struct Links {
var bookbeat: String?
var amazonMusic: String?
var amazon: String?
var youTubeMusic: String?
}

struct IDs {
Expand All @@ -239,6 +241,7 @@ struct IDs {
var bookbeat: String?
var amazonMusic: String?
var amazon: String?
var youTubeMusic: String?
}

struct Medium {
Expand Down
1 change: 1 addition & 0 deletions code/dreimetadaten/Export/WebDataExporter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,7 @@ struct WebDataExporter {
try index(named: "bookbeat", \.ids?.bookbeat)
try index(named: "amazon-music", \.ids?.amazonMusic)
try index(named: "amazon", \.ids?.amazon)
try index(named: "youtube-music", \.ids?.youTubeMusic)
}


Expand Down
9 changes: 7 additions & 2 deletions code/dreimetadaten/MetadataModel/MetadataObjectModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ extension MetadataObjectModel {
var bookbeat: String?
var amazonMusic: String?
var amazon: String?
var youTubeMusic: String?
}

struct IDs: Codable {
Expand All @@ -126,6 +127,7 @@ extension MetadataObjectModel {
var bookbeat: String?
var amazonMusic: String?
var amazon: String?
var youTubeMusic: String?
}

struct Medium: Codable {
Expand Down Expand Up @@ -220,6 +222,7 @@ extension MetadataObjectModel {
"bookbeat",
"amazonMusic",
"amazon",
"youTubeMusic",
]
static func prefixedKeyString(keyString: String) -> String {
let number = Self.ordering.firstIndex(of: keyString) ?? 99
Expand Down Expand Up @@ -499,15 +502,17 @@ extension MetadataObjectModel {
spotify: hörspiel.idSpotify.map { "https://open.spotify.com/intl-de/album/\($0)" },
bookbeat: hörspiel.idBookbeat.map { "https://www.bookbeat.com/de/book/\($0)" },
amazonMusic: hörspiel.idAmazonMusic.map { "https://music.amazon.de/albums/\($0)" },
amazon: hörspiel.idAmazon.map { "https://www.amazon.de/gp/product/\($0)" }
amazon: hörspiel.idAmazon.map { "https://www.amazon.de/gp/product/\($0)" },
youTubeMusic: hörspiel.idYouTubeMusic.map { "https://music.youtube.com/browse/\($0)" }
)
hörspielObject.ids = IDs(
dreimetadaten: hörspiel.hörspielID,
appleMusic: hörspiel.idAppleMusic,
spotify: hörspiel.idSpotify,
bookbeat: hörspiel.idBookbeat,
amazonMusic: hörspiel.idAmazonMusic,
amazon: hörspiel.idAmazon
amazon: hörspiel.idAmazon,
youTubeMusic: hörspiel.idYouTubeMusic
)
hörspielObject.unvollständig = hörspiel.unvollständig ? true : nil

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ extension MetadataRelationalModel {
var idBookbeat: String?
var idAmazonMusic: String?
var idAmazon: String?
var idYouTubeMusic: String?
}

struct HörspielTeil: Codable {
Expand Down
Loading