This repository has been archived on 2026-04-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
chrom-tool/src-tauri/src/models.rs
2026-04-17 16:27:57 -04:00

307 lines
7.9 KiB
Rust

use std::collections::{BTreeMap, BTreeSet};
use serde::{Deserialize, Serialize};
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ScanResponse {
pub browsers: Vec<BrowserView>,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BrowserView {
pub browser_id: String,
pub browser_family_id: Option<String>,
pub browser_name: String,
pub icon_key: Option<String>,
pub data_root: String,
pub profiles: Vec<ProfileSummary>,
pub extensions: Vec<ExtensionSummary>,
pub bookmarks: Vec<BookmarkSummary>,
pub password_sites: Vec<PasswordSiteSummary>,
pub stats: BrowserStats,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BrowserStats {
pub profile_count: usize,
pub extension_count: usize,
pub bookmark_count: usize,
pub password_site_count: usize,
pub history_cleanup_profile_count: usize,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ProfileSummary {
pub id: String,
pub name: String,
pub email: Option<String>,
pub avatar_data_url: Option<String>,
pub avatar_icon: Option<String>,
pub default_avatar_fill_color: Option<i64>,
pub default_avatar_stroke_color: Option<i64>,
pub avatar_label: String,
pub path: String,
pub history_cleanup: HistoryCleanupSummary,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ExtensionSummary {
pub id: String,
pub name: String,
pub version: Option<String>,
pub icon_data_url: Option<String>,
pub profile_ids: Vec<String>,
pub profiles: Vec<ExtensionAssociatedProfileSummary>,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BookmarkSummary {
pub url: String,
pub title: String,
pub profile_ids: Vec<String>,
pub profiles: Vec<BookmarkAssociatedProfileSummary>,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PasswordSiteSummary {
pub url: String,
pub domain: String,
pub profile_ids: Vec<String>,
pub profiles: Vec<AssociatedProfileSummary>,
}
#[derive(Serialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct HistoryCleanupSummary {
pub history: CleanupFileStatus,
pub top_sites: CleanupFileStatus,
pub visited_links: CleanupFileStatus,
pub sessions: CleanupFileStatus,
}
#[derive(Serialize, Deserialize, Clone, Copy, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub enum CleanupFileStatus {
Found,
Missing,
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CleanupHistoryInput {
pub browser_id: String,
pub profile_ids: Vec<String>,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CleanupHistoryResponse {
pub results: Vec<CleanupHistoryResult>,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CleanupHistoryResult {
pub profile_id: String,
pub deleted_files: Vec<String>,
pub skipped_files: Vec<String>,
pub error: Option<String>,
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RemoveExtensionsInput {
pub browser_id: String,
pub removals: Vec<ExtensionRemovalRequest>,
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RemoveBookmarksInput {
pub browser_id: String,
pub removals: Vec<BookmarkRemovalRequest>,
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ExtensionRemovalRequest {
pub extension_id: String,
pub profile_ids: Vec<String>,
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BookmarkRemovalRequest {
pub url: String,
pub profile_ids: Vec<String>,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RemoveExtensionsResponse {
pub results: Vec<RemoveExtensionResult>,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RemoveBookmarksResponse {
pub results: Vec<RemoveBookmarkResult>,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RemoveExtensionResult {
pub extension_id: String,
pub profile_id: String,
pub removed_files: Vec<String>,
pub skipped_files: Vec<String>,
pub error: Option<String>,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RemoveBookmarkResult {
pub url: String,
pub profile_id: String,
pub removed_count: usize,
pub removed_files: Vec<String>,
pub skipped_files: Vec<String>,
pub error: Option<String>,
}
#[derive(Serialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct AssociatedProfileSummary {
pub id: String,
pub name: String,
pub avatar_data_url: Option<String>,
pub avatar_icon: Option<String>,
pub default_avatar_fill_color: Option<i64>,
pub default_avatar_stroke_color: Option<i64>,
pub avatar_label: String,
}
#[derive(Serialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ExtensionAssociatedProfileSummary {
pub id: String,
pub name: String,
pub avatar_data_url: Option<String>,
pub avatar_icon: Option<String>,
pub default_avatar_fill_color: Option<i64>,
pub default_avatar_stroke_color: Option<i64>,
pub avatar_label: String,
pub install_source: ExtensionInstallSourceSummary,
}
#[derive(Serialize, Deserialize, Clone, Copy, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub enum ExtensionInstallSourceSummary {
Store,
External,
}
#[derive(Serialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct BookmarkAssociatedProfileSummary {
pub id: String,
pub name: String,
pub avatar_data_url: Option<String>,
pub avatar_icon: Option<String>,
pub default_avatar_fill_color: Option<i64>,
pub default_avatar_stroke_color: Option<i64>,
pub avatar_label: String,
pub bookmark_path: String,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BrowserConfigListResponse {
pub configs: Vec<BrowserConfigEntry>,
}
#[derive(Serialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct BrowserConfigEntry {
pub id: String,
pub source: BrowserConfigSource,
pub browser_family_id: Option<String>,
pub icon_key: Option<String>,
pub name: String,
pub executable_path: String,
pub user_data_path: String,
pub deletable: bool,
}
#[derive(Serialize, Clone)]
#[serde(rename_all = "camelCase")]
pub enum BrowserConfigSource {
Default,
Custom,
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateCustomBrowserConfigInput {
pub name: String,
pub icon_key: Option<String>,
pub executable_path: String,
pub user_data_path: String,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct StoredBrowserConfigs {
pub custom_configs: Vec<CustomBrowserConfigRecord>,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct CustomBrowserConfigRecord {
pub id: String,
pub name: String,
#[serde(default)]
pub icon_key: Option<String>,
#[serde(default)]
pub browser_family_id: Option<String>,
pub executable_path: String,
pub user_data_path: String,
}
pub struct BrowserDefinition {
pub id: &'static str,
pub name: &'static str,
pub local_app_data_segments: &'static [&'static str],
pub executable_candidates: &'static [crate::browsers::ExecutableCandidate],
}
pub struct TempExtension {
pub id: String,
pub name: String,
pub version: Option<String>,
pub icon_data_url: Option<String>,
pub profile_ids: BTreeSet<String>,
pub profiles: BTreeMap<String, ExtensionAssociatedProfileSummary>,
}
pub struct TempBookmark {
pub url: String,
pub title: String,
pub profile_ids: BTreeSet<String>,
pub profiles: BTreeMap<String, BookmarkAssociatedProfileSummary>,
}
pub struct TempPasswordSite {
pub url: String,
pub domain: String,
pub profile_ids: BTreeSet<String>,
pub profiles: BTreeMap<String, AssociatedProfileSummary>,
}