Files
modrinth/packages/app-lib/src/state/instances/model/content_set.rs
T
734720e11e feat: instances v2 (#6431)
* feat: base of instances v2

* feat: use old profiles with compat layer

* prototype: instances v2

* fix: install_from using profile

* fix: skins migration fix

* fix: frontend still using profile path

* fix: add update proj multiselect guard

* fix: cargo fmt

* fix: content missing fields

* feat: break up app-lib/api/instance.rs

* fix: check_content_updates mismatch

* fix: updater modal cleanup w/new structure

* feat: better update all handling

* fix: remove preview_update_all

* fix: feedback on bulk update + lint

* fix: rem transitions

* fix: change to jsonb

* feat: app db backup after update

* fix: lint

* fix: sqlx prepare + use sqlx macros

* fix: lint

* fix: bugs

* feat: defuck the installing process up

* fix: bug of hell

* fix: shear

* fix: fmt

* fix: install progress spacing + change mc/content/overrides to bytes

* fix: lint

* fix: prepr

* fix: navtabs anim not working in app

* fix: worlds.vue improvements + browse page fixes

* feat: optimise queries + adapter fns

* fix: lint

* fix: lint

* feat: shared modrinth-content-management crate (#6469)

* feat: disable warnings setting

* feat: add instances shortcuts (#6329)

* Add modrinth://launch deep link to start a profile

Support external profile launching via modrinth://launch/{profile_path} for integrations such as Stream Deck.

* Change route to /launch/profile/{id} for future extensibility

* fix: ensure profile path is url decoded

* fix: URL-decode profile path from deep link

* fix: use urlencoding crate for URL decoding

* feat: implement app instance shortcuts

* feat: change windows shortcut creation to use windows api instead

* feat: implement creating a shortcut launching world/server

* format

* fmt

* fix multiline inline tables

* pnpm prepr

* feat: move create shortcut to last item

* refactor: split up shortcuts.rs for individual platforms

* refactor: turn profile launch url into url type

* use string literal and add safety comment

* pt2

* refactor: rename anything that's profile into instance

* update mac shortcut

---------

Co-authored-by: DJCheesusReal <134006619+DJCheesusReal@users.noreply.github.com>

---------

Co-authored-by: Truman Gao <106889354+tdgao@users.noreply.github.com>
Co-authored-by: DJCheesusReal <134006619+DJCheesusReal@users.noreply.github.com>
2026-06-25 21:19:29 +00:00

88 lines
2.6 KiB
Rust

use crate::state::ModLoader;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use super::unknown_value;
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ContentSourceKind {
Local,
ModrinthModpack,
ServerProject,
ModrinthHosting,
ImportedModpack,
SharedInstance,
}
impl ContentSourceKind {
pub fn as_str(self) -> &'static str {
match self {
Self::Local => "local",
Self::ModrinthModpack => "modrinth_modpack",
Self::ServerProject => "server_project",
Self::ModrinthHosting => "modrinth_hosting",
Self::ImportedModpack => "imported_modpack",
Self::SharedInstance => "shared_instance",
}
}
pub fn from_str(value: &str) -> crate::Result<Self> {
match value {
"local" => Ok(Self::Local),
"modrinth_modpack" => Ok(Self::ModrinthModpack),
"server_project" => Ok(Self::ServerProject),
"modrinth_hosting" => Ok(Self::ModrinthHosting),
"imported_modpack" => Ok(Self::ImportedModpack),
"shared_instance" => Ok(Self::SharedInstance),
other => Err(unknown_value("content source kind", other)),
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ContentSetStatus {
Available,
Installing,
Stale,
MissingFiles,
}
impl ContentSetStatus {
pub fn as_str(self) -> &'static str {
match self {
Self::Available => "available",
Self::Installing => "installing",
Self::Stale => "stale",
Self::MissingFiles => "missing_files",
}
}
pub fn from_str(value: &str) -> crate::Result<Self> {
match value {
"available" => Ok(Self::Available),
"installing" => Ok(Self::Installing),
"stale" => Ok(Self::Stale),
"missing_files" => Ok(Self::MissingFiles),
other => Err(unknown_value("content set status", other)),
}
}
}
/// Represents a playable setup slot for an instance.
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ContentSet {
pub id: String,
pub instance_id: String,
pub name: String,
pub source_kind: ContentSourceKind,
pub status: ContentSetStatus,
pub game_version: String,
pub protocol_version: Option<u32>,
pub loader: ModLoader,
pub loader_version: Option<String>,
pub created: DateTime<Utc>,
pub modified: DateTime<Utc>,
}