Initial commit: U10 Pro 디지털 사이니지 세팅 자동화 도구
This commit is contained in:
26
.gitignore
vendored
Normal file
26
.gitignore
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
# 임시 파일
|
||||
*.tmp
|
||||
*.log
|
||||
temp_*.txt
|
||||
spec_report.txt
|
||||
|
||||
# Python 캐시
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# OS 생성 파일
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
Desktop.ini
|
||||
.DS_Store
|
||||
|
||||
# IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
*.suo
|
||||
*.user
|
||||
|
||||
# 테스트/백업
|
||||
*.bak
|
||||
*.backup
|
||||
91
README.md
Normal file
91
README.md
Normal file
@ -0,0 +1,91 @@
|
||||
# U10 Pro 디지털 사이니지 세팅 자동화
|
||||
|
||||
T오더에서 사용하던 태블릿(U10 Pro)을 디지털 사이니지 대용으로 전환하기 위한 자동화 세팅 도구입니다.
|
||||
|
||||
## 📁 폴더 구조
|
||||
|
||||
```
|
||||
u10pro_setting/
|
||||
├── setup.bat # 메인 자동화 스크립트
|
||||
├── spec_chk.bat # 기기 사양 확인 스크립트
|
||||
├── README.md # 프로젝트 설명서
|
||||
├── sdk/ # Android SDK Platform Tools
|
||||
│ ├── adb.exe # (별도 다운로드 필요)
|
||||
│ ├── fastboot.exe # (별도 다운로드 필요)
|
||||
│ └── ...
|
||||
└── data/ # 태블릿에 삽입될 데이터
|
||||
├── macrodroid.apk
|
||||
├── macrodroid.mdr
|
||||
├── photos.apk
|
||||
└── wallpaper.jpg
|
||||
```
|
||||
|
||||
## 🚀 사용 방법
|
||||
|
||||
### 사전 준비
|
||||
|
||||
1. **SDK 다운로드**: [Android SDK Platform Tools](https://developer.android.com/studio/releases/platform-tools) 다운로드 후 `sdk/` 폴더에 압축 해제
|
||||
2. **USB 디버깅 활성화**: 태블릿에서 개발자 옵션 > USB 디버깅 활성화
|
||||
2. **USB 케이블 연결**: 컴퓨터와 태블릿을 USB 케이블로 연결
|
||||
3. **ADB 인증 허용**: 태블릿에서 "이 컴퓨터에서 USB 디버깅 허용" 팝업 승인
|
||||
|
||||
### 기기 사양 확인
|
||||
|
||||
```powershell
|
||||
.\spec_chk.bat
|
||||
```
|
||||
|
||||
태블릿의 모델명, OS 버전, 센서 탑재 여부 등을 확인합니다.
|
||||
|
||||
### 자동 세팅 실행
|
||||
|
||||
```powershell
|
||||
.\setup.bat
|
||||
```
|
||||
|
||||
실행 후 기기를 연결하면 자동으로 다음 작업이 수행됩니다:
|
||||
|
||||
1. **WiFi 설정** - 지정된 네트워크에 자동 연결
|
||||
2. **앱 정리** - T-Order, YouTube 등 불필요한 앱 제거
|
||||
3. **시스템 최적화** - 애니메이션 비활성화, 화면 꺼짐 방지
|
||||
4. **앱 설치** - MacroDroid, Synology Photos 설치
|
||||
5. **배경화면 설정** - 지정된 이미지로 배경화면 변경
|
||||
6. **권한 자동 부여** - MacroDroid 권한 자동 설정
|
||||
7. **매크로 전송** - 자동화 매크로 프로필 전송
|
||||
8. **앱 실행** - 설치된 앱 자동 실행
|
||||
|
||||
## ⚙️ 설정 변경
|
||||
|
||||
`setup.bat` 파일 상단의 설정 영역을 수정하세요:
|
||||
|
||||
```batch
|
||||
:: --- [설정 영역] ---
|
||||
set "DEBUG_MODE=ON" :: ON: 모든 로그 출력 / OFF: 간소화된 출력 모드
|
||||
set "SSID=fg" :: WiFi SSID
|
||||
set "PW=Fg9576861!" :: WiFi 비밀번호
|
||||
```
|
||||
|
||||
## 📦 data 폴더 파일 설명
|
||||
|
||||
| 파일 | 설명 |
|
||||
|------|------|
|
||||
| `macrodroid.apk` | 자동화 앱 (MacroDroid) |
|
||||
| `macrodroid.mdr` | 자동화 매크로 설정 파일 |
|
||||
| `photos.apk` | Synology Photos 앱 |
|
||||
| `wallpaper.jpg` | 배경화면 이미지 |
|
||||
|
||||
## 🔧 문제 해결
|
||||
|
||||
### ADB 기기가 인식되지 않을 때
|
||||
|
||||
1. USB 드라이버 재설치
|
||||
2. USB 케이블 교체 (데이터 전송 지원 케이블인지 확인)
|
||||
3. 다른 USB 포트 시도
|
||||
|
||||
### 권한 오류 발생 시
|
||||
|
||||
일부 권한은 기기에서 수동 허용이 필요할 수 있습니다. MacroDroid 앱 실행 후 권한 안내를 따라주세요.
|
||||
|
||||
## 📝 License
|
||||
|
||||
내부 사용 목적으로 제작되었습니다.
|
||||
BIN
data/macrodroid.apk
Normal file
BIN
data/macrodroid.apk
Normal file
Binary file not shown.
1
data/macrodroid.mdr
Normal file
1
data/macrodroid.mdr
Normal file
File diff suppressed because one or more lines are too long
BIN
data/photos.apk
Normal file
BIN
data/photos.apk
Normal file
Binary file not shown.
BIN
data/wallpaper.jpg
Normal file
BIN
data/wallpaper.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
BIN
sdk/AdbWinApi.dll
Normal file
BIN
sdk/AdbWinApi.dll
Normal file
Binary file not shown.
BIN
sdk/AdbWinUsbApi.dll
Normal file
BIN
sdk/AdbWinUsbApi.dll
Normal file
Binary file not shown.
20754
sdk/NOTICE.txt
Normal file
20754
sdk/NOTICE.txt
Normal file
File diff suppressed because it is too large
Load Diff
BIN
sdk/adb.exe
Normal file
BIN
sdk/adb.exe
Normal file
Binary file not shown.
BIN
sdk/etc1tool.exe
Normal file
BIN
sdk/etc1tool.exe
Normal file
Binary file not shown.
BIN
sdk/fastboot.exe
Normal file
BIN
sdk/fastboot.exe
Normal file
Binary file not shown.
BIN
sdk/hprof-conv.exe
Normal file
BIN
sdk/hprof-conv.exe
Normal file
Binary file not shown.
BIN
sdk/libwinpthread-1.dll
Normal file
BIN
sdk/libwinpthread-1.dll
Normal file
Binary file not shown.
BIN
sdk/make_f2fs.exe
Normal file
BIN
sdk/make_f2fs.exe
Normal file
Binary file not shown.
BIN
sdk/make_f2fs_casefold.exe
Normal file
BIN
sdk/make_f2fs_casefold.exe
Normal file
Binary file not shown.
53
sdk/mke2fs.conf
Normal file
53
sdk/mke2fs.conf
Normal file
@ -0,0 +1,53 @@
|
||||
[defaults]
|
||||
base_features = sparse_super,large_file,filetype,dir_index,ext_attr
|
||||
default_mntopts = acl,user_xattr
|
||||
enable_periodic_fsck = 0
|
||||
blocksize = 4096
|
||||
inode_size = 256
|
||||
inode_ratio = 16384
|
||||
reserved_ratio = 1.0
|
||||
|
||||
[fs_types]
|
||||
ext3 = {
|
||||
features = has_journal
|
||||
}
|
||||
ext4 = {
|
||||
features = has_journal,extent,huge_file,dir_nlink,extra_isize,uninit_bg
|
||||
inode_size = 256
|
||||
}
|
||||
ext4dev = {
|
||||
features = has_journal,extent,huge_file,flex_bg,inline_data,64bit,dir_nlink,extra_isize
|
||||
inode_size = 256
|
||||
options = test_fs=1
|
||||
}
|
||||
small = {
|
||||
blocksize = 1024
|
||||
inode_size = 128
|
||||
inode_ratio = 4096
|
||||
}
|
||||
floppy = {
|
||||
blocksize = 1024
|
||||
inode_size = 128
|
||||
inode_ratio = 8192
|
||||
}
|
||||
big = {
|
||||
inode_ratio = 32768
|
||||
}
|
||||
huge = {
|
||||
inode_ratio = 65536
|
||||
}
|
||||
news = {
|
||||
inode_ratio = 4096
|
||||
}
|
||||
largefile = {
|
||||
inode_ratio = 1048576
|
||||
blocksize = -1
|
||||
}
|
||||
largefile4 = {
|
||||
inode_ratio = 4194304
|
||||
blocksize = -1
|
||||
}
|
||||
hurd = {
|
||||
blocksize = 4096
|
||||
inode_size = 128
|
||||
}
|
||||
BIN
sdk/mke2fs.exe
Normal file
BIN
sdk/mke2fs.exe
Normal file
Binary file not shown.
2
sdk/source.properties
Normal file
2
sdk/source.properties
Normal file
@ -0,0 +1,2 @@
|
||||
Pkg.UserSrc=false
|
||||
Pkg.Revision=36.0.0
|
||||
BIN
sdk/sqlite3.exe
Normal file
BIN
sdk/sqlite3.exe
Normal file
Binary file not shown.
172
setup.bat
Normal file
172
setup.bat
Normal file
@ -0,0 +1,172 @@
|
||||
@echo off
|
||||
title T-Order Tablet Automation Tool (Multi-Device Loop)
|
||||
chcp 65001 > nul
|
||||
|
||||
:: --- [설정 영역] ---
|
||||
set "DEBUG_MODE=ON"
|
||||
set "SSID=fg"
|
||||
set "PW=Fg9576861!"
|
||||
set "PKG_MD=com.arlosoft.macrodroid"
|
||||
set "PKG_PHOTOS=com.synology.projectkailash"
|
||||
|
||||
:: 경로 설정 (스크립트 기준 상대경로)
|
||||
set "SCRIPT_DIR=%~dp0"
|
||||
set "SDK_DIR=%SCRIPT_DIR%sdk"
|
||||
set "DATA_DIR=%SCRIPT_DIR%data"
|
||||
|
||||
set "WP_FILE=%DATA_DIR%\wallpaper.jpg"
|
||||
set "MDR_FILE=%DATA_DIR%\macrodroid.mdr"
|
||||
set "PHOTOS_APK=%DATA_DIR%\photos.apk"
|
||||
set "MD_APK=%DATA_DIR%\macrodroid.apk"
|
||||
|
||||
:: ADB 경로 설정
|
||||
set "ADB=%SDK_DIR%\adb.exe"
|
||||
:: ------------------
|
||||
|
||||
if "%DEBUG_MODE%"=="ON" (set "LOG=") else (set "LOG=>nul 2>&1")
|
||||
|
||||
:: SDK 폴더 확인
|
||||
if not exist "%ADB%" (
|
||||
echo [오류] ADB를 찾을 수 없습니다: %ADB%
|
||||
echo sdk 폴더에 platform-tools가 있는지 확인하세요.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
:LOOP_START
|
||||
cls
|
||||
echo ===========================================================
|
||||
echo T-Order 태블릿 세팅 자동화 시스템
|
||||
echo (디버그 모드: %DEBUG_MODE% / 연속 세팅 활성)
|
||||
echo ===========================================================
|
||||
echo * 새로운 기기를 연결하면 자동으로 작업이 시작됩니다.
|
||||
echo * 모든 작업을 종료하려면 이 창에서 [Ctrl + C]를 눌러주세요.
|
||||
echo ===========================================================
|
||||
|
||||
:CHECK_DEVICE
|
||||
echo [%TIME%] [준비] 기기 연결 대기 중...
|
||||
:: 무한 대기 방지 위해 짧은 대기 후 재시도 루프
|
||||
"%ADB%" wait-for-device
|
||||
echo [확인] 기기가 연결되었습니다! 작업을 시작합니다.
|
||||
timeout /t 2 > nul
|
||||
|
||||
echo.
|
||||
echo STEP 1. 네트워크 설정 (WiFi)
|
||||
echo -----------------------------------------------------------
|
||||
"%ADB%" shell svc wifi enable %LOG%
|
||||
"%ADB%" shell "cmd wifi add-network '%SSID%' wpa2 '%PW%'" %LOG%
|
||||
"%ADB%" shell "cmd wifi connect-network '%SSID%'" %LOG%
|
||||
echo ^> 무선네트워크 연결 완료
|
||||
|
||||
echo.
|
||||
echo STEP 2. T-Order 앱 및 YouTube 일괄 제거
|
||||
echo -----------------------------------------------------------
|
||||
echo ^> 관련 앱(T-Order, YouTube 등) 패키지 스캔 후 순차적 제거 중...
|
||||
"%ADB%" shell "for p in $(pm list packages | grep -E 'torder|orderhae' | cut -d: -f2); do echo [발견] $p; echo - 데이터 초기화 후 제거...; am force-stop $p; pm clear $p; pm uninstall --user 0 $p; done"
|
||||
|
||||
echo.
|
||||
echo ^> YouTube 등 불필요한 시스템 앱 제거 중...
|
||||
for %%a in (com.google.android.youtube com.google.android.projection.gearhead com.google.android.keep com.teamviewer.host.market com.teamviewer.quicksupport.market) do (
|
||||
"%ADB%" shell pm list packages %%a | findstr "%%a" >nul
|
||||
if not errorlevel 1 (
|
||||
echo [제거] %%a - 데이터 초기화 후 제거 진행.
|
||||
"%ADB%" shell "am force-stop %%a; pm clear %%a; pm uninstall --user 0 %%a; pm disable-user --user 0 %%a" %LOG%
|
||||
) else (
|
||||
if "%DEBUG_MODE%"=="ON" echo [스킵] %%a - 이미 없음.
|
||||
)
|
||||
)
|
||||
echo ^> STEP 2 완료
|
||||
|
||||
echo.
|
||||
echo STEP 3. 시스템 최적화
|
||||
echo -----------------------------------------------------------
|
||||
"%ADB%" shell settings put global window_animation_scale 0 %LOG%
|
||||
"%ADB%" shell settings put global transition_animation_scale 0 %LOG%
|
||||
"%ADB%" shell settings put global animator_duration_scale 0 %LOG%
|
||||
"%ADB%" shell settings put system screen_off_timeout 2147483647 %LOG%
|
||||
"%ADB%" shell settings put global stay_on_while_plugged_in 3 %LOG%
|
||||
"%ADB%" shell "service call activity 51 i32 2" %LOG%
|
||||
echo ^> 리소스 최적화 완료
|
||||
|
||||
echo.
|
||||
echo STEP 4. 필수 앱 설치 및 배경화면
|
||||
echo -----------------------------------------------------------
|
||||
"%ADB%" shell pm list packages %PKG_PHOTOS% | findstr /c:"%PKG_PHOTOS%" >nul
|
||||
if errorlevel 1 (
|
||||
if exist "%PHOTOS_APK%" (
|
||||
echo ^> Photos 설치 중...
|
||||
"%ADB%" install -r "%PHOTOS_APK%"
|
||||
)
|
||||
)
|
||||
"%ADB%" shell pm list packages %PKG_MD% | findstr /c:"%PKG_MD%" >nul
|
||||
if errorlevel 1 (
|
||||
if exist "%MD_APK%" (
|
||||
echo ^> MacroDroid 설치 중...
|
||||
"%ADB%" install -r "%MD_APK%"
|
||||
)
|
||||
)
|
||||
|
||||
if exist "%WP_FILE%" (
|
||||
"%ADB%" push "%WP_FILE%" /data/local/tmp/wallpaper.jpg %LOG%
|
||||
"%ADB%" shell am start -a android.service.wallpaper.CROP_AND_SET_WALLPAPER ^
|
||||
-d file:///data/local/tmp/wallpaper.jpg -t image/jpeg ^
|
||||
-n com.android.wallpaper/.picker.StandalonePreviewActivity ^
|
||||
--el set_wallpaper 1 --ez finish_on_done true -f 0x10808000 %LOG%
|
||||
|
||||
echo ^> [대기] 배경화면 설정 완료 대기 중...
|
||||
:WAIT_WP
|
||||
timeout /t 1 > nul
|
||||
"%ADB%" shell dumpsys window | findstr "mCurrentFocus" | findstr /i "resolver chooser wallpaper StandalonePreviewActivity" >nul
|
||||
if not errorlevel 1 goto WAIT_WP
|
||||
echo ^> 배경화면 설정 완료
|
||||
)
|
||||
|
||||
echo.
|
||||
echo STEP 5. MacroDroid 권한 설정
|
||||
echo -----------------------------------------------------------
|
||||
"%ADB%" shell appops set %PKG_MD% WRITE_SETTINGS allow %LOG%
|
||||
"%ADB%" shell appops set %PKG_MD% SYSTEM_ALERT_WINDOW allow %LOG%
|
||||
"%ADB%" shell appops set %PKG_MD% GET_USAGE_STATS allow %LOG%
|
||||
"%ADB%" shell cmd notification allow_dnd %PKG_MD% %LOG%
|
||||
"%ADB%" shell cmd notification allow_listener %PKG_MD%/com.arlosoft.macrodroid.triggers.services.NotificationService %LOG%
|
||||
"%ADB%" shell pm grant %PKG_MD% android.permission.WRITE_SECURE_SETTINGS %LOG%
|
||||
"%ADB%" shell settings put secure enabled_accessibility_services %PKG_MD%/com.arlosoft.macrodroid.accessibility.MacroDroidAccessibilityService %LOG%
|
||||
"%ADB%" shell settings put secure accessibility_enabled 1 %LOG%
|
||||
echo ^> 권한 자동 설정 완료
|
||||
|
||||
echo.
|
||||
echo STEP 6. MacroDroid 매크로 프로필 전송
|
||||
echo -----------------------------------------------------------
|
||||
if exist "%MDR_FILE%" (
|
||||
"%ADB%" push "%MDR_FILE%" /sdcard/Download/ %LOG%
|
||||
echo ^> 매크로 프로필 전송 완료
|
||||
) else (
|
||||
echo ^> [경고] 매크로 파일이 없습니다: %MDR_FILE%
|
||||
)
|
||||
|
||||
echo.
|
||||
echo STEP 7. 앱 직접 실행
|
||||
echo -----------------------------------------------------------
|
||||
echo [1/2] 시놀로지 포토 로그인 실행...
|
||||
"%ADB%" shell am start -n %PKG_PHOTOS%/com.synology.projectkailash.ui.splash.SplashActivity %LOG%
|
||||
|
||||
echo [2/2] 매크로드로이드 실행...
|
||||
"%ADB%" shell monkey -p %PKG_MD% -c android.intent.category.LAUNCHER 1 %LOG%
|
||||
|
||||
echo.
|
||||
echo ===========================================================
|
||||
echo [%TIME%] 현재 기기 세팅 완료!
|
||||
echo 기기 연결을 해제하면 새로운 기기 대기 상태로 전환됩니다.
|
||||
echo ===========================================================
|
||||
|
||||
:: 기기 연결 해제 대기 (기기를 뽑을 때까지 대기)
|
||||
:WAIT_DISCONNECT
|
||||
"%ADB%" devices | findstr /v "List" | findstr "device" > nul
|
||||
if not errorlevel 1 (
|
||||
timeout /t 2 > nul
|
||||
goto WAIT_DISCONNECT
|
||||
)
|
||||
|
||||
echo [알림] 기기 연결 해제됨. 3초 후 새로운 기기 대기 상태로 돌아갑니다.
|
||||
timeout /t 3
|
||||
goto LOOP_START
|
||||
76
spec_chk.bat
Normal file
76
spec_chk.bat
Normal file
@ -0,0 +1,76 @@
|
||||
@echo off
|
||||
title Device Spec and Sensor Checker
|
||||
chcp 65001 > nul
|
||||
|
||||
:: 경로 설정
|
||||
set "SCRIPT_DIR=%~dp0"
|
||||
set "SDK_DIR=%SCRIPT_DIR%sdk"
|
||||
set "ADB=%SDK_DIR%\adb.exe"
|
||||
|
||||
:: SDK 폴더 확인
|
||||
if not exist "%ADB%" (
|
||||
echo [오류] ADB를 찾을 수 없습니다: %ADB%
|
||||
echo sdk 폴더에 platform-tools가 있는지 확인하세요.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [기기 사양 및 센서 정보 조회 중...]
|
||||
|
||||
:: 1. 하드웨어 사양 조회
|
||||
for /f "tokens=*" %%a in ('"%ADB%" shell getprop ro.product.model') do set "MODEL=%%a"
|
||||
for /f "tokens=*" %%a in ('"%ADB%" shell getprop ro.build.version.release') do set "OS_VER=%%a"
|
||||
for /f "tokens=*" %%a in ('"%ADB%" shell getprop ro.product.cpu.abi') do set "CPU=%%a"
|
||||
for /f "tokens=3" %%a in ('"%ADB%" shell wm size') do set "RESOLUTION=%%a"
|
||||
for /f "tokens=3" %%a in ('"%ADB%" shell wm density') do set "DENSITY=%%a"
|
||||
|
||||
:: 메모리 조회
|
||||
set "RAM_VAL=N/A"
|
||||
for /f "tokens=3" %%a in ('"%ADB%" shell "dumpsys meminfo | grep 'Total RAM:'" 2^>nul') do set "RAM_VAL=%%a"
|
||||
if "%RAM_VAL%"=="N/A" (
|
||||
for /f "tokens=3" %%a in ('"%ADB%" shell dumpsys meminfo ^| findstr /C:"Total RAM:"') do set "RAM_VAL=%%a"
|
||||
)
|
||||
|
||||
:: 2. 센서 정보를 조회
|
||||
set "PROXIMITY=X [미탑재]"
|
||||
set "LIGHT=X [미탑재]"
|
||||
set "ACCEL=X [미탑재]"
|
||||
set "GYRO=X [미탑재]"
|
||||
set "MAG=X [미탑재]"
|
||||
|
||||
:: 센서 정보 정보를 임시 파일로 저장 (속도 최적화)
|
||||
"%ADB%" shell dumpsys sensorservice > temp_sensors.txt
|
||||
|
||||
findstr /i "Proximity" temp_sensors.txt > nul && set "PROXIMITY=O [탑재 확인]"
|
||||
findstr /i "Light" temp_sensors.txt > nul && set "LIGHT=O [탑재 확인]"
|
||||
findstr /i "Accelerometer" temp_sensors.txt > nul && set "ACCEL=O [탑재 확인]"
|
||||
findstr /i "Gyroscope" temp_sensors.txt > nul && set "GYRO=O [탑재 확인]"
|
||||
findstr /i "Magnetic" temp_sensors.txt > nul && set "MAG=O [탑재 확인]"
|
||||
|
||||
if exist temp_sensors.txt del temp_sensors.txt
|
||||
|
||||
:: 3. 화면 출력 (사양 정보 출력 + 레포트 추가)
|
||||
echo.
|
||||
echo ============================================================
|
||||
echo DEVICE FULL REPORT (%DATE% %TIME%)
|
||||
echo ============================================================
|
||||
echo [기본 장치 정보]
|
||||
echo 모델명 : %MODEL%
|
||||
echo 안드로이드 : %OS_VER%
|
||||
echo CPU 아키텍처 : %CPU%
|
||||
echo 화면 해상도 : %RESOLUTION%
|
||||
echo 화면 밀도 : %DENSITY%
|
||||
echo 메모리(RAM) : %RAM_VAL%
|
||||
echo ------------------------------------------------------------
|
||||
echo [하드웨어 센서 현황]
|
||||
echo 근접 센서 (Proximity) : %PROXIMITY%
|
||||
echo 조도 센서 (Light) : %LIGHT%
|
||||
echo 가속도 센서 (Accel) : %ACCEL%
|
||||
echo 자이로 센서 (Gyro) : %GYRO%
|
||||
echo 지자기 센서 (Magnetic) : %MAG%
|
||||
echo ============================================================
|
||||
echo.
|
||||
|
||||
echo 작업이 완료되었습니다. 창을 닫으려면 아무 키나 눌러주세요.
|
||||
pause > nul
|
||||
exit
|
||||
Reference in New Issue
Block a user