Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
5699ad7708 | |||
c27282041f | |||
1c9769b9be | |||
c5587fabad | |||
f435e63746 | |||
217158105b | |||
84a2674764 | |||
1276112120 | |||
3ef2949b91 | |||
8b3eff8f06 | |||
0921249ce5 |
49
.classpath
49
.classpath
@ -1,49 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="src" path="src">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="optional" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-15">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="module" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="test" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry combineaccessrules="false" kind="src" path="/atriasoft-png-encoder">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="module" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry combineaccessrules="false" kind="src" path="/atriasoft-png-decoder">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="module" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/scenarium-logger">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="module" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/atriasoft-etk">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="module" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/atriasoft-egami">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="module" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry combineaccessrules="false" kind="src" path="/atriasoft-esvg">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="module" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry kind="output" path="out/eclipse/classes"/>
|
|
||||||
</classpath>
|
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,5 @@
|
|||||||
|
|
||||||
|
/__pycache__/
|
||||||
/bin/
|
/bin/
|
||||||
/Operator/
|
/Operator/
|
||||||
/DrawerProperties/
|
/DrawerProperties/
|
||||||
|
24
.project
24
.project
@ -1,24 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>atriasoft-io-gami</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
<project>atriasoft-io-gami</project>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
57
lutin_org-atriasoft-iogami.py
Normal file
57
lutin_org-atriasoft-iogami.py
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
import realog.debug as debug
|
||||||
|
import lutin.tools as tools
|
||||||
|
import realog.debug as debug
|
||||||
|
import lutin.image as image
|
||||||
|
import os
|
||||||
|
import lutin.multiprocess as lutinMultiprocess
|
||||||
|
|
||||||
|
|
||||||
|
def get_type():
|
||||||
|
return "LIBRARY_DYNAMIC"
|
||||||
|
|
||||||
|
def get_desc():
|
||||||
|
return "Ewol Tool Kit"
|
||||||
|
|
||||||
|
def get_licence():
|
||||||
|
return "MPL-2"
|
||||||
|
|
||||||
|
def get_compagny_type():
|
||||||
|
return "org"
|
||||||
|
|
||||||
|
def get_compagny_name():
|
||||||
|
return "atria-soft"
|
||||||
|
|
||||||
|
#def get_maintainer():
|
||||||
|
# return "authors.txt"
|
||||||
|
|
||||||
|
#def get_version():
|
||||||
|
# return "version.txt"
|
||||||
|
|
||||||
|
def configure(target, my_module):
|
||||||
|
|
||||||
|
my_module.add_src_file([
|
||||||
|
'src/module-info.java',
|
||||||
|
'src/org/atriasoft/iogami/IOgami.java',
|
||||||
|
'src/org/atriasoft/iogami/internal/LOGGER.java',
|
||||||
|
|
||||||
|
])
|
||||||
|
my_module.add_path('src/', type='java')
|
||||||
|
|
||||||
|
my_module.add_depend([
|
||||||
|
'org-atriasoft-pngdecoder',
|
||||||
|
'org-atriasoft-pngencoder',
|
||||||
|
'org-atriasoft-esvg',
|
||||||
|
'org-atriasoft-egami',
|
||||||
|
])
|
||||||
|
|
||||||
|
#my_module.add_path([
|
||||||
|
# 'lib/spotbugs-annotations-4.2.2.jar'
|
||||||
|
# ],
|
||||||
|
# type='java',
|
||||||
|
# export=True
|
||||||
|
#);
|
||||||
|
my_module.add_flag('java', "RELEASE_15_PREVIEW");
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
138
pom.xml
Normal file
138
pom.xml
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.atriasoft</groupId>
|
||||||
|
<artifactId>io-gami</artifactId>
|
||||||
|
<version>0.1.0</version>
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.version>3.13.0</maven.compiler.version>
|
||||||
|
<maven.compiler.source>21</maven.compiler.source>
|
||||||
|
<maven.compiler.target>21</maven.compiler.target>
|
||||||
|
<maven.dependency.version>3.1.1</maven.dependency.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>gitea</id>
|
||||||
|
<url>https://gitea.atria-soft.org/api/packages/org.atriasoft/maven</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
<distributionManagement>
|
||||||
|
<repository>
|
||||||
|
<id>gitea</id>
|
||||||
|
<url>https://gitea.atria-soft.org/api/packages/org.atriasoft/maven</url>
|
||||||
|
</repository>
|
||||||
|
<snapshotRepository>
|
||||||
|
<id>gitea</id>
|
||||||
|
<url>https://gitea.atria-soft.org/api/packages/org.atriasoft/maven</url>
|
||||||
|
</snapshotRepository>
|
||||||
|
</distributionManagement>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.atriasoft</groupId>
|
||||||
|
<artifactId>png-decoder</artifactId>
|
||||||
|
<version>0.1.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.atriasoft</groupId>
|
||||||
|
<artifactId>png-encoder</artifactId>
|
||||||
|
<version>0.1.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.atriasoft</groupId>
|
||||||
|
<artifactId>esvg</artifactId>
|
||||||
|
<version>0.1.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.atriasoft</groupId>
|
||||||
|
<artifactId>egami</artifactId>
|
||||||
|
<version>0.1.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-api</artifactId>
|
||||||
|
<version>5.11.0-M2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-simple</artifactId>
|
||||||
|
<version>2.1.0-alpha1</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<sourceDirectory>src</sourceDirectory>
|
||||||
|
<testSourceDirectory>test/src</testSourceDirectory>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>${maven.compiler.version}</version>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
<!--<encoding>${project.build.sourceEncoding}</encoding>-->
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<!-- Create the source bundle -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-source-plugin</artifactId>
|
||||||
|
<version>3.3.1</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>attach-sources</id>
|
||||||
|
<goals>
|
||||||
|
<goal>jar</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<!-- junit results -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>3.0.0-M5</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<archive>
|
||||||
|
<manifest>
|
||||||
|
<mainClass>fully.qualified.MainClass</mainClass>
|
||||||
|
</manifest>
|
||||||
|
</archive>
|
||||||
|
<descriptorRefs>
|
||||||
|
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||||
|
</descriptorRefs>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<!-- Java-doc generation for stand-alone site -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
<version>3.2.0</version>
|
||||||
|
<configuration>
|
||||||
|
<show>private</show>
|
||||||
|
<nohelp>true</nohelp>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<!-- Generate Java-docs As Part Of Project Reports -->
|
||||||
|
<reporting>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
<version>3.2.0</version>
|
||||||
|
<configuration>
|
||||||
|
<show>public</show>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</reporting>
|
||||||
|
|
||||||
|
</project>
|
@ -7,7 +7,6 @@ open module org.atriasoft.iogami {
|
|||||||
|
|
||||||
requires transitive org.atriasoft.etk;
|
requires transitive org.atriasoft.etk;
|
||||||
requires org.atriasoft.esvg;
|
requires org.atriasoft.esvg;
|
||||||
requires transitive io.scenarium.logger;
|
|
||||||
requires org.atriasoft.pngdecoder;
|
requires org.atriasoft.pngdecoder;
|
||||||
requires org.atriasoft.pngencoder;
|
requires org.atriasoft.pngencoder;
|
||||||
requires transitive org.atriasoft.egami;
|
requires transitive org.atriasoft.egami;
|
||||||
|
@ -1,29 +1,28 @@
|
|||||||
package org.atriasoft.iogami;
|
package org.atriasoft.iogami;
|
||||||
|
|
||||||
import org.atriasoft.etk.Uri;
|
|
||||||
import org.atriasoft.etk.math.Vector2i;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
|
import org.atriasoft.egami.Image;
|
||||||
|
import org.atriasoft.egami.ImageByte;
|
||||||
import org.atriasoft.egami.ImageByteRGB;
|
import org.atriasoft.egami.ImageByteRGB;
|
||||||
import org.atriasoft.egami.ImageByteRGBA;
|
import org.atriasoft.egami.ImageByteRGBA;
|
||||||
import org.atriasoft.egami.ToolImage;
|
import org.atriasoft.egami.ToolImage;
|
||||||
import org.atriasoft.esvg.EsvgDocument;
|
import org.atriasoft.esvg.EsvgDocument;
|
||||||
import org.atriasoft.egami.Image;
|
import org.atriasoft.etk.Uri;
|
||||||
import org.atriasoft.egami.ImageByte;
|
import org.atriasoft.etk.math.Vector2i;
|
||||||
import org.atriasoft.iogami.internal.Log;
|
|
||||||
|
|
||||||
import org.atriasoft.pngencoder.PngEncoder;
|
|
||||||
|
|
||||||
import org.atriasoft.pngdecoder.PNGDecoder;
|
import org.atriasoft.pngdecoder.PNGDecoder;
|
||||||
import org.atriasoft.pngdecoder.PNGDecoder.Format;
|
import org.atriasoft.pngdecoder.PNGDecoder.Format;
|
||||||
|
import org.atriasoft.pngencoder.PngEncoder;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class IOgami {
|
public class IOgami {
|
||||||
|
static final Logger LOGGER = LoggerFactory.getLogger(IOgami.class);
|
||||||
|
|
||||||
public static ImageByte load(final Uri uri, final Vector2i size) {
|
public static ImageByte load(final Uri uri, final Vector2i size) {
|
||||||
Log.todo("Load image : " + uri + " size=" + size);
|
LOGGER.info("TODO: Load image : " + uri + " size=" + size);
|
||||||
if (uri.get().endsWith(".png")) {
|
if (uri.get().endsWith(".png")) {
|
||||||
return IOgami.loadPNG(uri);
|
return IOgami.loadPNG(uri);
|
||||||
}
|
}
|
||||||
@ -62,10 +61,10 @@ public class IOgami {
|
|||||||
System.err.println("try to load texture " + filename + ", didn't work");
|
System.err.println("try to load texture " + filename + ", didn't work");
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
byte[] elemData = new byte[buf.remaining()];
|
final byte[] elemData = new byte[buf.remaining()];
|
||||||
buf.get(elemData);
|
buf.get(elemData);
|
||||||
if (hasAlpha) {
|
if (hasAlpha) {
|
||||||
ImageByteRGBA img = new ImageByteRGBA(tWidth, tHeight);
|
final ImageByteRGBA img = new ImageByteRGBA(tWidth, tHeight);
|
||||||
for (int yyy = 0; yyy < tHeight; yyy++) {
|
for (int yyy = 0; yyy < tHeight; yyy++) {
|
||||||
for (int xxx = 0; xxx < tWidth; xxx++) {
|
for (int xxx = 0; xxx < tWidth; xxx++) {
|
||||||
img.setRByte(xxx, yyy, elemData[(yyy * tWidth + xxx) * 4 + 0]);
|
img.setRByte(xxx, yyy, elemData[(yyy * tWidth + xxx) * 4 + 0]);
|
||||||
@ -76,7 +75,7 @@ public class IOgami {
|
|||||||
}
|
}
|
||||||
return img;
|
return img;
|
||||||
}
|
}
|
||||||
ImageByteRGB img = new ImageByteRGB(tWidth, tHeight);
|
final ImageByteRGB img = new ImageByteRGB(tWidth, tHeight);
|
||||||
for (int yyy = 0; yyy < tHeight; yyy++) {
|
for (int yyy = 0; yyy < tHeight; yyy++) {
|
||||||
for (int xxx = 0; xxx < tWidth; xxx++) {
|
for (int xxx = 0; xxx < tWidth; xxx++) {
|
||||||
img.setAFloat(xxx, yyy, 0xFF);
|
img.setAFloat(xxx, yyy, 0xFF);
|
||||||
@ -89,15 +88,15 @@ public class IOgami {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static ImageByte loadSVG(final Uri filename, final Vector2i size) {
|
private static ImageByte loadSVG(final Uri filename, final Vector2i size) {
|
||||||
EsvgDocument doc = new EsvgDocument();
|
final EsvgDocument doc = new EsvgDocument();
|
||||||
doc.load(filename);
|
doc.load(filename);
|
||||||
return ToolImage.convertImageByte(doc.renderImageFloatRGBA(size));
|
return ToolImage.convertImageByte(doc.renderImageFloatRGBA(size));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void storePNG(final Uri uri, final Image data) {
|
public static void storePNG(final Uri uri, final Image data) {
|
||||||
Log.info("Store image : " + uri + " size=" + data.getSize());
|
LOGGER.info("Store image : " + uri + " size=" + data.getSize());
|
||||||
Log.warning("Save file in " + uri.getPath());
|
LOGGER.warn("Save file in " + uri.getPath());
|
||||||
new PngEncoder().withBufferedImage(data).withCompressionLevel(9).toFile(uri.getPath());
|
new PngEncoder().withBufferedImage(data).withCompressionLevel(9).toFile(uri.getPath());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,68 +0,0 @@
|
|||||||
package org.atriasoft.iogami.internal;
|
|
||||||
|
|
||||||
import io.scenarium.logger.LogLevel;
|
|
||||||
import io.scenarium.logger.Logger;
|
|
||||||
|
|
||||||
public class Log {
|
|
||||||
private static final String LIB_NAME = "iogami";
|
|
||||||
private static final String LIB_NAME_DRAW = Logger.getDrawableName(Log.LIB_NAME);
|
|
||||||
private static final boolean PRINT_CRITICAL = Logger.getNeedPrint(Log.LIB_NAME, LogLevel.CRITICAL);
|
|
||||||
private static final boolean PRINT_DEBUG = Logger.getNeedPrint(Log.LIB_NAME, LogLevel.DEBUG);
|
|
||||||
private static final boolean PRINT_ERROR = Logger.getNeedPrint(Log.LIB_NAME, LogLevel.ERROR);
|
|
||||||
private static final boolean PRINT_INFO = Logger.getNeedPrint(Log.LIB_NAME, LogLevel.INFO);
|
|
||||||
private static final boolean PRINT_PRINT = Logger.getNeedPrint(Log.LIB_NAME, LogLevel.PRINT);
|
|
||||||
private static final boolean PRINT_TODO = Logger.getNeedPrint(Log.LIB_NAME, LogLevel.TODO);
|
|
||||||
private static final boolean PRINT_VERBOSE = Logger.getNeedPrint(Log.LIB_NAME, LogLevel.VERBOSE);
|
|
||||||
private static final boolean PRINT_WARNING = Logger.getNeedPrint(Log.LIB_NAME, LogLevel.WARNING);
|
|
||||||
|
|
||||||
public static void critical(final String data) {
|
|
||||||
if (Log.PRINT_CRITICAL) {
|
|
||||||
Logger.critical(Log.LIB_NAME_DRAW, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void debug(final String data) {
|
|
||||||
if (Log.PRINT_DEBUG) {
|
|
||||||
Logger.debug(Log.LIB_NAME_DRAW, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void error(final String data) {
|
|
||||||
if (Log.PRINT_ERROR) {
|
|
||||||
Logger.error(Log.LIB_NAME_DRAW, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void info(final String data) {
|
|
||||||
if (Log.PRINT_INFO) {
|
|
||||||
Logger.info(Log.LIB_NAME_DRAW, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void print(final String data) {
|
|
||||||
if (Log.PRINT_PRINT) {
|
|
||||||
Logger.print(Log.LIB_NAME_DRAW, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void todo(final String data) {
|
|
||||||
if (Log.PRINT_TODO) {
|
|
||||||
Logger.todo(Log.LIB_NAME_DRAW, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void verbose(final String data) {
|
|
||||||
if (Log.PRINT_VERBOSE) {
|
|
||||||
Logger.verbose(Log.LIB_NAME_DRAW, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void warning(final String data) {
|
|
||||||
if (Log.PRINT_WARNING) {
|
|
||||||
Logger.warning(Log.LIB_NAME_DRAW, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Log() {}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user