You've already forked flix
Update all libraries to the new database format
This commit is contained in:
@@ -1,23 +1,35 @@
|
||||
use flix::db::entity;
|
||||
use flix::model::id::CollectionId;
|
||||
use flix::model::id::{CollectionId, ShowId};
|
||||
use flix::model::numbers::{EpisodeNumber, SeasonNumber};
|
||||
use flix::model::text;
|
||||
|
||||
use anyhow::Result;
|
||||
use sea_orm::ActiveValue::{NotSet, Set};
|
||||
use sea_orm::{ActiveModelTrait, DatabaseConnection, DbErr, TransactionError, TransactionTrait};
|
||||
|
||||
use crate::cli::AddOverrides;
|
||||
use crate::cli::flix::AddCommand;
|
||||
|
||||
pub async fn add(db: &DatabaseConnection, command: AddCommand) -> Result<()> {
|
||||
pub async fn add(
|
||||
db: &DatabaseConnection,
|
||||
command: AddCommand,
|
||||
overrides: AddOverrides,
|
||||
) -> Result<()> {
|
||||
match command {
|
||||
AddCommand::Collection { title, overview } => {
|
||||
let result: Result<CollectionId, TransactionError<DbErr>> = db
|
||||
.transaction(|txn| {
|
||||
let title = title.clone();
|
||||
let title = overrides.title.unwrap_or_else(|| title.clone());
|
||||
|
||||
let sort_title = text::make_sortable_title(&title);
|
||||
let fs_slug = text::make_fs_slug(&title);
|
||||
let web_slug = text::make_web_slug(&title);
|
||||
let sort_title = overrides
|
||||
.sort_title
|
||||
.unwrap_or_else(|| text::make_sortable_title(&title));
|
||||
let fs_slug = overrides
|
||||
.fs_slug
|
||||
.unwrap_or_else(|| text::make_fs_slug(&title));
|
||||
let web_slug = overrides
|
||||
.web_slug
|
||||
.unwrap_or_else(|| text::make_web_slug(&title));
|
||||
|
||||
Box::pin(async move {
|
||||
let flix = entity::info::collections::ActiveModel {
|
||||
@@ -43,6 +55,57 @@ pub async fn add(db: &DatabaseConnection, command: AddCommand) -> Result<()> {
|
||||
};
|
||||
println!("Created Collection: {} [{}]", title, flix_id.into_raw());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
AddCommand::Episode {
|
||||
show_slug,
|
||||
season_number,
|
||||
episode_number,
|
||||
title,
|
||||
overview,
|
||||
air_date,
|
||||
} => {
|
||||
let result: Result<(ShowId, SeasonNumber, EpisodeNumber), TransactionError<DbErr>> = db
|
||||
.transaction(|txn| {
|
||||
let title = overrides.title.unwrap_or_else(|| title.clone());
|
||||
|
||||
Box::pin(async move {
|
||||
let show = entity::info::shows::Entity::find_by_web_slug(&show_slug)
|
||||
.one(txn)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
DbErr::Custom(format!("show '{}' does not exist", show_slug))
|
||||
})?;
|
||||
|
||||
let flix = entity::info::episodes::ActiveModel {
|
||||
show_id: Set(show.id),
|
||||
season_number: Set(season_number),
|
||||
episode_number: Set(episode_number),
|
||||
title: Set(title),
|
||||
overview: Set(overview),
|
||||
date: Set(air_date),
|
||||
}
|
||||
.insert(txn)
|
||||
.await?;
|
||||
|
||||
Ok((flix.show_id, flix.season_number, flix.episode_number))
|
||||
})
|
||||
})
|
||||
.await;
|
||||
|
||||
let (flix_show, season_number, episode_number) = match result {
|
||||
Ok(id) => id,
|
||||
Err(TransactionError::Connection(err)) => Err(err)?,
|
||||
Err(TransactionError::Transaction(err)) => Err(err)?,
|
||||
};
|
||||
println!(
|
||||
"Created Episode: {} [{} S{} E{}]",
|
||||
title,
|
||||
flix_show.into_raw(),
|
||||
season_number,
|
||||
episode_number
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user