mirror of
https://github.com/XENOKING123/XenoSend.git
synced 2026-10-24 19:02:30 +02:00
55 lines
1.1 KiB
Python
55 lines
1.1 KiB
Python
from dataclasses import dataclass, replace
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
PKG_ALLOWED_EXTENSIONS = (".pkg",)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class PkgSource:
|
|
key: str
|
|
name: str
|
|
version: str
|
|
url: str
|
|
name_override: str = ""
|
|
|
|
@property
|
|
def display_name(self) -> str:
|
|
return self.name_override.strip() or self.name.strip()
|
|
|
|
@property
|
|
def label(self) -> str:
|
|
parts = [self.display_name, self.version.strip()]
|
|
return " ".join(part for part in parts if part)
|
|
|
|
def with_resolution(self, *, name: str, version: str, url: str) -> "PkgSource":
|
|
return replace(
|
|
self,
|
|
name=name.strip(),
|
|
version=version.strip(),
|
|
url=url.strip(),
|
|
)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class PkgMenuEntry:
|
|
key: str
|
|
label: str
|
|
kind: str
|
|
source_key: str = ""
|
|
local_path: Optional[Path] = None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class PkgProgress:
|
|
message: str
|
|
percent: Optional[int] = None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class PkgInstallResult:
|
|
label: str
|
|
local_path: Path
|
|
content_id: str = ""
|
|
installer_via: str = ""
|