mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-07-01 12:26:26 +00:00
wip: better ui responsive
This commit is contained in:
@ -13,182 +13,193 @@
|
|||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string notr="true">OcrQueue</string>
|
<string notr="true">OcrQueue</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox_3">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<property name="title">
|
|
||||||
<string>queue.title</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
|
||||||
<item>
|
|
||||||
<widget class="QGroupBox" name="groupBox">
|
|
||||||
<property name="title">
|
|
||||||
<string>iccOptionsGroupBox</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QRadioButton" name="iccIgnoreRadioButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>icc.ignore</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QRadioButton" name="iccUsePILRadioButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>icc.usePIL</string>
|
|
||||||
</property>
|
|
||||||
<property name="checked">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QRadioButton" name="iccTryFixRadioButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>icc.tryFix</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="ocr_addImageButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>queue.addImageButton</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="ocr_removeSelectedButton">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>queue.removeSelected</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="ocr_removeAllButton">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>queue.removeAll</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="verticalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>40</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="ocr_startButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>queue.startOcrButton</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTableView" name="tableView">
|
<widget class="QGroupBox" name="groupBox_3">
|
||||||
<property name="editTriggers">
|
<property name="title">
|
||||||
<set>QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed</set>
|
<string>queue.title</string>
|
||||||
</property>
|
|
||||||
<property name="selectionMode">
|
|
||||||
<enum>QAbstractItemView::MultiSelection</enum>
|
|
||||||
</property>
|
|
||||||
<property name="selectionBehavior">
|
|
||||||
<enum>QAbstractItemView::SelectRows</enum>
|
|
||||||
</property>
|
|
||||||
<property name="verticalScrollMode">
|
|
||||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
|
||||||
</property>
|
|
||||||
<property name="horizontalScrollMode">
|
|
||||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
|
||||||
</property>
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>iccOptionsGroupBox</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="iccIgnoreRadioButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>icc.ignore</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="iccUsePILRadioButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>icc.usePIL</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="iccTryFixRadioButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>icc.tryFix</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="ocr_addImageButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>queue.addImageButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="ocr_removeSelectedButton">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>queue.removeSelected</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="ocr_removeAllButton">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>queue.removeAll</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="ocr_startButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>queue.startOcrButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QProgressBar" name="progressBar">
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
<property name="minimum">
|
<item>
|
||||||
<number>0</number>
|
<widget class="QTableView" name="tableView">
|
||||||
</property>
|
<property name="editTriggers">
|
||||||
<property name="maximum">
|
<set>QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed</set>
|
||||||
<number>0</number>
|
</property>
|
||||||
</property>
|
<property name="selectionMode">
|
||||||
<property name="value">
|
<enum>QAbstractItemView::MultiSelection</enum>
|
||||||
<number>0</number>
|
</property>
|
||||||
</property>
|
<property name="selectionBehavior">
|
||||||
<property name="alignment">
|
<enum>QAbstractItemView::SelectRows</enum>
|
||||||
<set>Qt::AlignCenter</set>
|
</property>
|
||||||
</property>
|
<property name="verticalScrollMode">
|
||||||
<property name="format">
|
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||||
<string notr="true">%v/%m - %p%</string>
|
</property>
|
||||||
|
<property name="horizontalScrollMode">
|
||||||
|
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QProgressBar" name="progressBar">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="format">
|
||||||
|
<string notr="true">%v/%m - %p%</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_5">
|
||||||
|
<property name="title">
|
||||||
|
<string>results</string>
|
||||||
</property>
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="ocr_acceptSelectedButton">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>results.acceptSelectedButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="ocr_acceptAllButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>results.acceptAllButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="ocr_ignoreValidateCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>results.ignoreValidate</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox_5">
|
<widget class="QLabel" name="statusLabel">
|
||||||
<property name="title">
|
<property name="text">
|
||||||
<string>results</string>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="ocr_acceptSelectedButton">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>results.acceptSelectedButton</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="ocr_acceptAllButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>results.acceptAllButton</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="verticalSpacer_2">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>40</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QCheckBox" name="ocr_ignoreValidateCheckBox">
|
|
||||||
<property name="text">
|
|
||||||
<string>results.ignoreValidate</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -16,9 +16,9 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
|
|||||||
QImage, QKeySequence, QLinearGradient, QPainter,
|
QImage, QKeySequence, QLinearGradient, QPainter,
|
||||||
QPalette, QPixmap, QRadialGradient, QTransform)
|
QPalette, QPixmap, QRadialGradient, QTransform)
|
||||||
from PySide6.QtWidgets import (QAbstractItemView, QApplication, QCheckBox, QGroupBox,
|
from PySide6.QtWidgets import (QAbstractItemView, QApplication, QCheckBox, QGroupBox,
|
||||||
QHBoxLayout, QHeaderView, QProgressBar, QPushButton,
|
QHBoxLayout, QHeaderView, QLabel, QProgressBar,
|
||||||
QRadioButton, QSizePolicy, QSpacerItem, QTableView,
|
QPushButton, QRadioButton, QSizePolicy, QSpacerItem,
|
||||||
QVBoxLayout, QWidget)
|
QTableView, QVBoxLayout, QWidget)
|
||||||
|
|
||||||
class Ui_OcrQueue(object):
|
class Ui_OcrQueue(object):
|
||||||
def setupUi(self, OcrQueue):
|
def setupUi(self, OcrQueue):
|
||||||
@ -26,8 +26,10 @@ class Ui_OcrQueue(object):
|
|||||||
OcrQueue.setObjectName(u"OcrQueue")
|
OcrQueue.setObjectName(u"OcrQueue")
|
||||||
OcrQueue.resize(650, 400)
|
OcrQueue.resize(650, 400)
|
||||||
OcrQueue.setWindowTitle(u"OcrQueue")
|
OcrQueue.setWindowTitle(u"OcrQueue")
|
||||||
self.horizontalLayout_2 = QHBoxLayout(OcrQueue)
|
self.verticalLayout_5 = QVBoxLayout(OcrQueue)
|
||||||
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
|
self.verticalLayout_5.setObjectName(u"verticalLayout_5")
|
||||||
|
self.horizontalLayout = QHBoxLayout()
|
||||||
|
self.horizontalLayout.setObjectName(u"horizontalLayout")
|
||||||
self.groupBox_3 = QGroupBox(OcrQueue)
|
self.groupBox_3 = QGroupBox(OcrQueue)
|
||||||
self.groupBox_3.setObjectName(u"groupBox_3")
|
self.groupBox_3.setObjectName(u"groupBox_3")
|
||||||
self.verticalLayout_2 = QVBoxLayout(self.groupBox_3)
|
self.verticalLayout_2 = QVBoxLayout(self.groupBox_3)
|
||||||
@ -82,7 +84,7 @@ class Ui_OcrQueue(object):
|
|||||||
self.verticalLayout_2.addWidget(self.ocr_startButton)
|
self.verticalLayout_2.addWidget(self.ocr_startButton)
|
||||||
|
|
||||||
|
|
||||||
self.horizontalLayout_2.addWidget(self.groupBox_3)
|
self.horizontalLayout.addWidget(self.groupBox_3)
|
||||||
|
|
||||||
self.verticalLayout_3 = QVBoxLayout()
|
self.verticalLayout_3 = QVBoxLayout()
|
||||||
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
|
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
|
||||||
@ -107,7 +109,7 @@ class Ui_OcrQueue(object):
|
|||||||
self.verticalLayout_3.addWidget(self.progressBar)
|
self.verticalLayout_3.addWidget(self.progressBar)
|
||||||
|
|
||||||
|
|
||||||
self.horizontalLayout_2.addLayout(self.verticalLayout_3)
|
self.horizontalLayout.addLayout(self.verticalLayout_3)
|
||||||
|
|
||||||
self.groupBox_5 = QGroupBox(OcrQueue)
|
self.groupBox_5 = QGroupBox(OcrQueue)
|
||||||
self.groupBox_5.setObjectName(u"groupBox_5")
|
self.groupBox_5.setObjectName(u"groupBox_5")
|
||||||
@ -134,7 +136,15 @@ class Ui_OcrQueue(object):
|
|||||||
self.verticalLayout_4.addWidget(self.ocr_ignoreValidateCheckBox)
|
self.verticalLayout_4.addWidget(self.ocr_ignoreValidateCheckBox)
|
||||||
|
|
||||||
|
|
||||||
self.horizontalLayout_2.addWidget(self.groupBox_5)
|
self.horizontalLayout.addWidget(self.groupBox_5)
|
||||||
|
|
||||||
|
|
||||||
|
self.verticalLayout_5.addLayout(self.horizontalLayout)
|
||||||
|
|
||||||
|
self.statusLabel = QLabel(OcrQueue)
|
||||||
|
self.statusLabel.setObjectName(u"statusLabel")
|
||||||
|
|
||||||
|
self.verticalLayout_5.addWidget(self.statusLabel)
|
||||||
|
|
||||||
|
|
||||||
self.retranslateUi(OcrQueue)
|
self.retranslateUi(OcrQueue)
|
||||||
@ -156,6 +166,7 @@ class Ui_OcrQueue(object):
|
|||||||
self.ocr_acceptSelectedButton.setText(QCoreApplication.translate("OcrQueue", u"results.acceptSelectedButton", None))
|
self.ocr_acceptSelectedButton.setText(QCoreApplication.translate("OcrQueue", u"results.acceptSelectedButton", None))
|
||||||
self.ocr_acceptAllButton.setText(QCoreApplication.translate("OcrQueue", u"results.acceptAllButton", None))
|
self.ocr_acceptAllButton.setText(QCoreApplication.translate("OcrQueue", u"results.acceptAllButton", None))
|
||||||
self.ocr_ignoreValidateCheckBox.setText(QCoreApplication.translate("OcrQueue", u"results.ignoreValidate", None))
|
self.ocr_ignoreValidateCheckBox.setText(QCoreApplication.translate("OcrQueue", u"results.ignoreValidate", None))
|
||||||
|
self.statusLabel.setText("")
|
||||||
pass
|
pass
|
||||||
# retranslateUi
|
# retranslateUi
|
||||||
|
|
||||||
|
@ -43,6 +43,10 @@ class OcrQueue(Ui_OcrQueue, QWidget):
|
|||||||
self.iccOptionButtonGroup.addButton(self.iccTryFixRadioButton, 2)
|
self.iccOptionButtonGroup.addButton(self.iccTryFixRadioButton, 2)
|
||||||
self.updateIccOption()
|
self.updateIccOption()
|
||||||
|
|
||||||
|
self.statusLabelClearTimer = QTimer(self)
|
||||||
|
self.statusLabelClearTimer.setSingleShot(True)
|
||||||
|
self.statusLabelClearTimer.timeout.connect(self.clearStatusMessage)
|
||||||
|
|
||||||
def model(self):
|
def model(self):
|
||||||
return self.__model
|
return self.__model
|
||||||
|
|
||||||
@ -88,6 +92,13 @@ class OcrQueue(Ui_OcrQueue, QWidget):
|
|||||||
if self.model():
|
if self.model():
|
||||||
self.model().iccOption = self.iccOptionButtonGroup.checkedId()
|
self.model().iccOption = self.iccOptionButtonGroup.checkedId()
|
||||||
|
|
||||||
|
def showStatusMessage(self, message: str):
|
||||||
|
self.statusLabel.setText(message)
|
||||||
|
self.statusLabelClearTimer.start()
|
||||||
|
|
||||||
|
def clearStatusMessage(self):
|
||||||
|
self.statusLabel.setText("")
|
||||||
|
|
||||||
def resizeTableView(self):
|
def resizeTableView(self):
|
||||||
self.tableView.resizeRowsToContents()
|
self.tableView.resizeRowsToContents()
|
||||||
self.tableView.resizeColumnsToContents()
|
self.tableView.resizeColumnsToContents()
|
||||||
|
@ -7,7 +7,7 @@ from arcaea_offline_ocr.device.v1.definition import DeviceV1
|
|||||||
from arcaea_offline_ocr.device.v2.definition import DeviceV2
|
from arcaea_offline_ocr.device.v2.definition import DeviceV2
|
||||||
from arcaea_offline_ocr.sift_db import SIFTDatabase
|
from arcaea_offline_ocr.sift_db import SIFTDatabase
|
||||||
from PySide6.QtCore import Qt, Slot
|
from PySide6.QtCore import Qt, Slot
|
||||||
from PySide6.QtWidgets import QFileDialog, QWidget
|
from PySide6.QtWidgets import QApplication, QFileDialog, QWidget
|
||||||
|
|
||||||
from ui.designer.tabs.tabOcr.tabOcr_Device_ui import Ui_TabOcr_Device
|
from ui.designer.tabs.tabOcr.tabOcr_Device_ui import Ui_TabOcr_Device
|
||||||
from ui.extends.components.ocrQueue import OcrQueueModel
|
from ui.extends.components.ocrQueue import OcrQueueModel
|
||||||
@ -101,6 +101,7 @@ class TabOcr_Device(Ui_TabOcr_Device, QWidget):
|
|||||||
)
|
)
|
||||||
for file in files:
|
for file in files:
|
||||||
self.ocrQueueModel.addItem(file)
|
self.ocrQueueModel.addItem(file)
|
||||||
|
QApplication.processEvents()
|
||||||
self.ocrQueue.resizeTableView()
|
self.ocrQueue.resizeTableView()
|
||||||
|
|
||||||
@Slot()
|
@Slot()
|
||||||
|
Reference in New Issue
Block a user