mirror of
https://github.com/storytold/gridcraft.git
synced 2026-11-12 17:02:08 -06:00
Compare commits
8
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
476448d7d9 | ||
|
|
5cf52c5fbb | ||
|
|
0c5b1e85e6 | ||
|
|
26f9783d11 | ||
|
|
7f6a79fd98 | ||
|
|
6dbfbc4058 | ||
|
|
e258db5f19 | ||
|
|
763816d27c |
@@ -27,6 +27,10 @@ jobs:
|
|||||||
name: Windows installation policy (no app build)
|
name: Windows installation policy (no app build)
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
|
- name: Harden runner
|
||||||
|
uses: step-security/harden-runner@1d88384fd173af6ecb012dfd0264a306b711241a # v2.22.4
|
||||||
|
with:
|
||||||
|
egress-policy: audit
|
||||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|||||||
Generated
+27
-25
@@ -910,12 +910,12 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "craft-fonts-build"
|
name = "craft-fonts-build"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
|
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "craft-i18n"
|
name = "craft-i18n"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
|
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fixed_decimal",
|
"fixed_decimal",
|
||||||
"icu_decimal",
|
"icu_decimal",
|
||||||
@@ -938,7 +938,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "craft-print"
|
name = "craft-print"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
|
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"craft-winprint-gdi",
|
"craft-winprint-gdi",
|
||||||
"log",
|
"log",
|
||||||
@@ -952,7 +952,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "craft-ui"
|
name = "craft-ui"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
|
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"craft-fonts-build",
|
"craft-fonts-build",
|
||||||
"craft-i18n",
|
"craft-i18n",
|
||||||
@@ -972,7 +972,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "craft-update"
|
name = "craft-update"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
|
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"dunce",
|
"dunce",
|
||||||
@@ -982,6 +982,7 @@ dependencies = [
|
|||||||
"image",
|
"image",
|
||||||
"log",
|
"log",
|
||||||
"plist",
|
"plist",
|
||||||
|
"rustix 1.1.5",
|
||||||
"semver",
|
"semver",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -1018,7 +1019,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "craft-window"
|
name = "craft-window"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
|
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"egui",
|
"egui",
|
||||||
"objc2 0.6.5",
|
"objc2 0.6.5",
|
||||||
@@ -2022,7 +2023,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft"
|
name = "gridcraft"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arboard",
|
"arboard",
|
||||||
"chrono",
|
"chrono",
|
||||||
@@ -2050,7 +2051,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-calc"
|
name = "gridcraft-calc"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gridcraft-core",
|
"gridcraft-core",
|
||||||
"gridcraft-formula",
|
"gridcraft-formula",
|
||||||
@@ -2062,7 +2063,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-chart"
|
name = "gridcraft-chart"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gridcraft-calc",
|
"gridcraft-calc",
|
||||||
"gridcraft-core",
|
"gridcraft-core",
|
||||||
@@ -2073,7 +2074,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-cli"
|
name = "gridcraft-cli"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gridcraft-engine",
|
"gridcraft-engine",
|
||||||
"gridcraft-mcp",
|
"gridcraft-mcp",
|
||||||
@@ -2086,7 +2087,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-core"
|
name = "gridcraft-core"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
@@ -2097,7 +2098,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-engine"
|
name = "gridcraft-engine"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gridcraft-calc",
|
"gridcraft-calc",
|
||||||
"gridcraft-chart",
|
"gridcraft-chart",
|
||||||
@@ -2120,7 +2121,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-formula"
|
name = "gridcraft-formula"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gridcraft-core",
|
"gridcraft-core",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -2129,7 +2130,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-functions"
|
name = "gridcraft-functions"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gridcraft-core",
|
"gridcraft-core",
|
||||||
"regex",
|
"regex",
|
||||||
@@ -2137,7 +2138,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-math"
|
name = "gridcraft-math"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ratex-font",
|
"ratex-font",
|
||||||
"ratex-layout",
|
"ratex-layout",
|
||||||
@@ -2147,7 +2148,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-mcp"
|
name = "gridcraft-mcp"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gridcraft-engine",
|
"gridcraft-engine",
|
||||||
"log",
|
"log",
|
||||||
@@ -2156,7 +2157,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-model"
|
name = "gridcraft-model"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gridcraft-core",
|
"gridcraft-core",
|
||||||
"gridcraft-formula",
|
"gridcraft-formula",
|
||||||
@@ -2169,18 +2170,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-numfmt"
|
name = "gridcraft-numfmt"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gridcraft-core",
|
"gridcraft-core",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-pdf"
|
name = "gridcraft-pdf"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-sandbox"
|
name = "gridcraft-sandbox"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"landlock",
|
"landlock",
|
||||||
"libc",
|
"libc",
|
||||||
@@ -2191,7 +2192,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-ui-egui"
|
name = "gridcraft-ui-egui"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"craft-ui",
|
"craft-ui",
|
||||||
"craft-update",
|
"craft-update",
|
||||||
@@ -2218,7 +2219,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-web"
|
name = "gridcraft-web"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"craft-web-api",
|
"craft-web-api",
|
||||||
"craft-web-host",
|
"craft-web-host",
|
||||||
@@ -2237,7 +2238,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gridcraft-xlsx"
|
name = "gridcraft-xlsx"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aes",
|
"aes",
|
||||||
"gridcraft-core",
|
"gridcraft-core",
|
||||||
@@ -6519,7 +6520,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "winprint"
|
name = "winprint"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
source = "git+https://github.com/storytold/winprint.rs?rev=51934db382f225454cf152a8657eb03789be63c4#51934db382f225454cf152a8657eb03789be63c4"
|
source = "git+https://github.com/storytold/winprint.rs?rev=bc06a7c48b768eb27a828c7986f6d2868b245ee0#bc06a7c48b768eb27a828c7986f6d2868b245ee0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"flate2",
|
"flate2",
|
||||||
"fmt-derive",
|
"fmt-derive",
|
||||||
@@ -6534,6 +6535,7 @@ dependencies = [
|
|||||||
"windows",
|
"windows",
|
||||||
"windows-core",
|
"windows-core",
|
||||||
"windows-implement",
|
"windows-implement",
|
||||||
|
"windows-numerics",
|
||||||
"xml",
|
"xml",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -6708,7 +6710,7 @@ checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "xtask"
|
name = "xtask"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gridcraft-engine",
|
"gridcraft-engine",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
|||||||
+3
-3
@@ -4,7 +4,7 @@ members = ["crates/*", "apps/*", "xtask"]
|
|||||||
default-members = ["crates/*", "apps/gridcraft", "apps/gridcraft-cli", "xtask"]
|
default-members = ["crates/*", "apps/gridcraft", "apps/gridcraft-cli", "xtask"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
rust-version = "1.95"
|
rust-version = "1.95"
|
||||||
@@ -29,7 +29,7 @@ gridcraft-math = { path = "crates/math" }
|
|||||||
# Every craft-libs crate (craft-update and craft-window here, craft-ui in ui-egui, craft-print in
|
# Every craft-libs crate (craft-update and craft-window here, craft-ui in ui-egui, craft-print in
|
||||||
# the app) comes from one craft-libs revision.
|
# the app) comes from one craft-libs revision.
|
||||||
# craft-update: app-specific pretend versions apply to startup and manual checks.
|
# craft-update: app-specific pretend versions apply to startup and manual checks.
|
||||||
craft-update = { git = "https://github.com/storytold/craft-libs", rev = "1b34eba41e62138fc2438d2734523b302840b45d", version = "=0.1.0", features = ["egui"] }
|
craft-update = { git = "https://github.com/storytold/craft-libs", rev = "6e03f65bf45181db77ba6229716e6624db9eb25b", version = "=0.1.0", features = ["egui"] }
|
||||||
|
|
||||||
# foundation
|
# foundation
|
||||||
thiserror = "2"
|
thiserror = "2"
|
||||||
@@ -72,7 +72,7 @@ skrifa = { version = "0.44", default-features = false, features = ["std"] }
|
|||||||
epaint_default_fonts = "0.37"
|
epaint_default_fonts = "0.37"
|
||||||
# One native window per workbook: the window list, Window menu titles and the immediate-viewport
|
# One native window per workbook: the window list, Window menu titles and the immediate-viewport
|
||||||
# driver. Same craft-libs revision as craft-update above.
|
# driver. Same craft-libs revision as craft-update above.
|
||||||
craft-window = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "1b34eba41e62138fc2438d2734523b302840b45d", default-features = false, features = ["egui"] }
|
craft-window = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "6e03f65bf45181db77ba6229716e6624db9eb25b", default-features = false, features = ["egui"] }
|
||||||
|
|
||||||
[workspace.lints.rust]
|
[workspace.lints.rust]
|
||||||
unsafe_code = "forbid"
|
unsafe_code = "forbid"
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ winit = { version = "0.30", default-features = false, features = ["x11", "waylan
|
|||||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
||||||
# Same craft-libs revision as the workspace's craft-update and craft-window (see the root
|
# Same craft-libs revision as the workspace's craft-update and craft-window (see the root
|
||||||
# Cargo.toml).
|
# Cargo.toml).
|
||||||
craft-print = { git = "https://github.com/storytold/craft-libs", rev = "1b34eba41e62138fc2438d2734523b302840b45d" }
|
craft-print = { git = "https://github.com/storytold/craft-libs", rev = "6e03f65bf45181db77ba6229716e6624db9eb25b" }
|
||||||
craft-update = { workspace = true }
|
craft-update = { workspace = true }
|
||||||
rfd = { workspace = true }
|
rfd = { workspace = true }
|
||||||
arboard = { workspace = true, features = ["image-data"] }
|
arboard = { workspace = true, features = ["image-data"] }
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ workspace = true
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
# The shared capture slot (`craft_ui::capture`) comes from the one craft-libs revision every
|
# The shared capture slot (`craft_ui::capture`) comes from the one craft-libs revision every
|
||||||
# craft-libs dependency uses (see the root Cargo.toml).
|
# craft-libs dependency uses (see the root Cargo.toml).
|
||||||
craft-ui = { git = "https://github.com/storytold/craft-libs", rev = "1b34eba41e62138fc2438d2734523b302840b45d" }
|
craft-ui = { git = "https://github.com/storytold/craft-libs", rev = "6e03f65bf45181db77ba6229716e6624db9eb25b" }
|
||||||
gridcraft-engine = { workspace = true }
|
gridcraft-engine = { workspace = true }
|
||||||
gridcraft-chart = { workspace = true }
|
gridcraft-chart = { workspace = true }
|
||||||
# `monochrome_emoji_fonts` restores the Noto Emoji and emoji-icon faces that 0.37 moved behind
|
# `monochrome_emoji_fonts` restores the Noto Emoji and emoji-icon faces that 0.37 moved behind
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
//! Release and source Flatpaks must allow release checks and host update helpers.
|
||||||
|
fn finish_args(manifest: &str) -> Vec<&str> {
|
||||||
|
manifest
|
||||||
|
.split("finish-args:")
|
||||||
|
.nth(1)
|
||||||
|
.unwrap_or_default()
|
||||||
|
.lines()
|
||||||
|
.take_while(|line| line.is_empty() || line.starts_with(' ') || line.starts_with('#'))
|
||||||
|
.filter_map(|line| line.trim().strip_prefix("- "))
|
||||||
|
.map(|arg| arg.trim_matches(['\'', '"']))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn flatpak_update_permissions() {
|
||||||
|
let manifests = [
|
||||||
|
include_str!("../../../packaging/linux/flatpak/ai.storyteller.gridcraft.bundle.yml"),
|
||||||
|
include_str!("../../../packaging/linux/flatpak/ai.storyteller.gridcraft.yml"),
|
||||||
|
];
|
||||||
|
let args = manifests.map(finish_args);
|
||||||
|
assert_eq!(args[0], args[1], "source and release permissions must agree");
|
||||||
|
for permissions in args {
|
||||||
|
for required in ["--share=network", "--talk-name=org.freedesktop.Flatpak"] {
|
||||||
|
assert!(permissions.contains(&required), "missing update permission: {required}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,6 +17,8 @@ runtime-version: '25.08'
|
|||||||
sdk: org.freedesktop.Sdk
|
sdk: org.freedesktop.Sdk
|
||||||
command: gridcraft
|
command: gridcraft
|
||||||
finish-args:
|
finish-args:
|
||||||
|
# The shared updater inspects and updates this installation via flatpak-spawn --host.
|
||||||
|
- --talk-name=org.freedesktop.Flatpak
|
||||||
- --filesystem=xdg-data/ArtCraft/versions:ro
|
- --filesystem=xdg-data/ArtCraft/versions:ro
|
||||||
# Display: Wayland first; X11 only when no Wayland compositor is running.
|
# Display: Wayland first; X11 only when no Wayland compositor is running.
|
||||||
- --socket=wayland
|
- --socket=wayland
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ sdk-extensions:
|
|||||||
- org.freedesktop.Sdk.Extension.rust-stable
|
- org.freedesktop.Sdk.Extension.rust-stable
|
||||||
command: gridcraft
|
command: gridcraft
|
||||||
finish-args:
|
finish-args:
|
||||||
|
# The shared updater inspects and updates this installation via flatpak-spawn --host.
|
||||||
|
- --talk-name=org.freedesktop.Flatpak
|
||||||
- --filesystem=xdg-data/ArtCraft/versions:ro
|
- --filesystem=xdg-data/ArtCraft/versions:ro
|
||||||
# Display: Wayland first; X11 only when no Wayland compositor is running.
|
# Display: Wayland first; X11 only when no Wayland compositor is running.
|
||||||
- --socket=wayland
|
- --socket=wayland
|
||||||
|
|||||||
@@ -1,2 +1,6 @@
|
|||||||
sonar.projectKey=storytold_gridcraft
|
sonar.projectKey=storytold_gridcraft
|
||||||
sonar.organization=storytold
|
sonar.organization=storytold
|
||||||
|
|
||||||
|
# The region table is one record per locale with the same field names and many shared values
|
||||||
|
# (month names, formats); that repetition is data, not copy-pasted logic.
|
||||||
|
sonar.cpd.exclusions=crates/core/src/region.rs
|
||||||
|
|||||||
Reference in New Issue
Block a user