Show special text when room has no events yet
e.g. if invited to a room but there's no history provided by another account. Also add a signal for the ListModel.count property.
This commit is contained in:
parent
d47bf34522
commit
4607f53b7a
1
TODO.md
1
TODO.md
|
@ -1,5 +1,4 @@
|
||||||
- Current focus
|
- Current focus
|
||||||
- When clicking on invited room but no multiaccount broadcasting events
|
|
||||||
- Merge login page
|
- Merge login page
|
||||||
|
|
||||||
- Refactoring
|
- Refactoring
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
import mistune
|
import mistune
|
||||||
from lxml.html import HtmlElement, etree
|
from lxml.html import HtmlElement, etree # nosec
|
||||||
from PyQt5.QtCore import QObject, pyqtProperty, pyqtSlot
|
from PyQt5.QtCore import QObject, pyqtProperty, pyqtSlot
|
||||||
|
|
||||||
import html_sanitizer.sanitizer as sanitizer
|
import html_sanitizer.sanitizer as sanitizer
|
||||||
|
|
|
@ -15,7 +15,8 @@ NewItem = Union[ListItem, Mapping[str, Any], Sequence]
|
||||||
|
|
||||||
|
|
||||||
class ListModel(QAbstractListModel):
|
class ListModel(QAbstractListModel):
|
||||||
changed = pyqtSignal()
|
changed = pyqtSignal()
|
||||||
|
countChanged = pyqtSignal(int)
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
initial_data: Optional[List[NewItem]] = None,
|
initial_data: Optional[List[NewItem]] = None,
|
||||||
|
@ -45,14 +46,14 @@ class ListModel(QAbstractListModel):
|
||||||
|
|
||||||
|
|
||||||
def __len__(self) -> int:
|
def __len__(self) -> int:
|
||||||
return self.rowCount()
|
return len(self._data)
|
||||||
|
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return iter(self._data)
|
return iter(self._data)
|
||||||
|
|
||||||
|
|
||||||
@pyqtProperty(list)
|
@pyqtProperty(list, constant=True)
|
||||||
def roles(self) -> Tuple[str, ...]:
|
def roles(self) -> Tuple[str, ...]:
|
||||||
return self._data[0].roles if self._data else () # type: ignore
|
return self._data[0].roles if self._data else () # type: ignore
|
||||||
|
|
||||||
|
@ -72,7 +73,7 @@ class ListModel(QAbstractListModel):
|
||||||
|
|
||||||
|
|
||||||
def rowCount(self, _: QModelIndex = QModelIndex()) -> int:
|
def rowCount(self, _: QModelIndex = QModelIndex()) -> int:
|
||||||
return len(self._data)
|
return len(self)
|
||||||
|
|
||||||
|
|
||||||
def _convert_new_value(self, value: NewItem) -> ListItem:
|
def _convert_new_value(self, value: NewItem) -> ListItem:
|
||||||
|
@ -104,9 +105,9 @@ class ListModel(QAbstractListModel):
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
@pyqtProperty(int, constant=True)
|
@pyqtProperty(int, notify=countChanged)
|
||||||
def count(self) -> int:
|
def count(self) -> int:
|
||||||
return self.rowCount()
|
return len(self)
|
||||||
|
|
||||||
|
|
||||||
@pyqtSlot(int, result="QVariant")
|
@pyqtSlot(int, result="QVariant")
|
||||||
|
@ -135,12 +136,14 @@ class ListModel(QAbstractListModel):
|
||||||
self.beginInsertRows(QModelIndex(), index, index)
|
self.beginInsertRows(QModelIndex(), index, index)
|
||||||
self._data.insert(index, value)
|
self._data.insert(index, value)
|
||||||
self.endInsertRows()
|
self.endInsertRows()
|
||||||
|
|
||||||
|
self.countChanged.emit(len(self))
|
||||||
self.changed.emit()
|
self.changed.emit()
|
||||||
|
|
||||||
|
|
||||||
@pyqtSlot("QVariantMap")
|
@pyqtSlot("QVariantMap")
|
||||||
def append(self, value: NewItem) -> None:
|
def append(self, value: NewItem) -> None:
|
||||||
self.insert(self.rowCount(), value)
|
self.insert(len(self), value)
|
||||||
|
|
||||||
|
|
||||||
@pyqtSlot(list)
|
@pyqtSlot(list)
|
||||||
|
@ -172,7 +175,7 @@ class ListModel(QAbstractListModel):
|
||||||
index = self.indexWhere(prop, is_value)
|
index = self.indexWhere(prop, is_value)
|
||||||
self.update(index, update_with)
|
self.update(index, update_with)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
index = self.rowCount()
|
index = len(self)
|
||||||
self.append(update_with)
|
self.append(update_with)
|
||||||
|
|
||||||
|
|
||||||
|
@ -201,12 +204,12 @@ class ListModel(QAbstractListModel):
|
||||||
qlast = from_ + n - 1
|
qlast = from_ + n - 1
|
||||||
|
|
||||||
if (n <= 0) or (from_ == to) or (qlast == to) or \
|
if (n <= 0) or (from_ == to) or (qlast == to) or \
|
||||||
not (self.rowCount() > qlast >= 0) or \
|
not (len(self) > qlast >= 0) or \
|
||||||
not self.rowCount() >= to >= 0:
|
not len(self) >= to >= 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
qidx = QModelIndex()
|
qidx = QModelIndex()
|
||||||
qto = min(self.rowCount(), to + n if to > from_ else to)
|
qto = min(len(self), to + n if to > from_ else to)
|
||||||
# print(f"self.beginMoveRows(qidx, {from_}, {qlast}, qidx, {qto})")
|
# print(f"self.beginMoveRows(qidx, {from_}, {qlast}, qidx, {qto})")
|
||||||
valid = self.beginMoveRows(qidx, from_, qlast, qidx, qto)
|
valid = self.beginMoveRows(qidx, from_, qlast, qidx, qto)
|
||||||
|
|
||||||
|
@ -228,13 +231,17 @@ class ListModel(QAbstractListModel):
|
||||||
self.beginRemoveRows(QModelIndex(), index, index)
|
self.beginRemoveRows(QModelIndex(), index, index)
|
||||||
del self._data[index]
|
del self._data[index]
|
||||||
self.endRemoveRows()
|
self.endRemoveRows()
|
||||||
|
|
||||||
|
self.countChanged.emit(len(self))
|
||||||
self.changed.emit()
|
self.changed.emit()
|
||||||
|
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def clear(self) -> None:
|
def clear(self) -> None:
|
||||||
# Reimplemented for performance reasons (begin/endRemoveRows)
|
# Reimplemented for performance reasons (begin/endRemoveRows)
|
||||||
self.beginRemoveRows(QModelIndex(), 0, self.rowCount())
|
self.beginRemoveRows(QModelIndex(), 0, len(self))
|
||||||
self._data.clear()
|
self._data.clear()
|
||||||
self.endRemoveRows()
|
self.endRemoveRows()
|
||||||
|
|
||||||
|
self.countChanged.emit(len(self))
|
||||||
self.changed.emit()
|
self.changed.emit()
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import QtQuick 2.7
|
import QtQuick 2.7
|
||||||
import QtQuick.Controls 2.2
|
import QtQuick.Controls 2.2
|
||||||
import QtQuick.Layouts 1.4
|
import QtQuick.Layouts 1.4
|
||||||
|
import "../base" as Base
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
property int space: 8
|
property int space: 8
|
||||||
|
@ -34,4 +35,17 @@ Rectangle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Base.HLabel {
|
||||||
|
visible: messageListView.model.count < 1
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: qsTr("Nothing to see here yet…")
|
||||||
|
padding: 10
|
||||||
|
topPadding: padding / 3
|
||||||
|
bottomPadding: topPadding
|
||||||
|
background: Rectangle {
|
||||||
|
color: "lightgray"
|
||||||
|
radius: 5
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user