mirror of
https://github.com/HenkKalkwater/harbour-sailfin.git
synced 2025-09-05 10:12:46 +00:00
Update UserData based when notified over websocket
This commit is contained in:
parent
40d8a58a5a
commit
af99b39722
5 changed files with 48 additions and 40 deletions
|
@ -51,6 +51,7 @@ void Item::setApiClient(ApiClient *apiClient) {
|
|||
|
||||
void Item::updateUserData(const QString &itemId, const DTO::UserItemDataDto &userData) {
|
||||
if (itemId == this->jellyfinId()) {
|
||||
this->m_userData = QSharedPointer<DTO::UserItemDataDto>::create(userData);
|
||||
emit userDataChanged(userData);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,7 +58,9 @@ NextUpLoader::NextUpLoader(QObject *parent)
|
|||
: NextUpLoaderBase(new Jellyfin::Loader::HTTP::GetNextUpLoader(), parent) {}
|
||||
|
||||
ItemModel::ItemModel(QObject *parent)
|
||||
: ApiModel<Model::Item>(parent) { }
|
||||
: ApiModel<Model::Item>(parent) {
|
||||
connect(this, &QAbstractItemModel::rowsInserted, this, &ItemModel::onInsertItems);
|
||||
}
|
||||
|
||||
QVariant ItemModel::data(const QModelIndex &index, int role) const {
|
||||
if (role <= Qt::UserRole || !index.isValid()) return QVariant();
|
||||
|
@ -123,6 +125,26 @@ QSharedPointer<Model::Item> ItemModel::itemAt(int index) {
|
|||
return m_array[index];
|
||||
}
|
||||
|
||||
|
||||
void ItemModel::onInsertItems(const QModelIndex &parent, int start, int end) {
|
||||
if (parent.isValid()) return;
|
||||
qDebug() << "Connecting " << (end - start + 1) << "items!";
|
||||
for (int i = start; i <= end; i++) {
|
||||
connect(itemAt(i).data(), &Model::Item::userDataChanged, this, &ItemModel::onUserDataUpdated);
|
||||
}
|
||||
}
|
||||
|
||||
void ItemModel::onUserDataUpdated(const DTO::UserItemDataDto &newUserData) {
|
||||
const QString &itemId = newUserData.itemId();
|
||||
qDebug() << "ApiModel: item updated: " << itemId;
|
||||
for (int i = 0; i < rowCount(QModelIndex()); i++) {
|
||||
if (itemAt(i)->jellyfinId() == itemId) {
|
||||
QModelIndex index = this->index(i);
|
||||
emit this->dataChanged(index, index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // NS ViewModel
|
||||
|
||||
} // NS Jellyfin
|
||||
|
|
|
@ -95,7 +95,7 @@ void WebSocket::textMessageReceived(const QString &message) {
|
|||
setupKeepAlive(data.toInt());
|
||||
} else if (messageType == QStringLiteral("GeneralCommand")) {
|
||||
try {
|
||||
DTO::GeneralCommand command = DTO::GeneralCommand::fromJson(messageRoot["Data"].toObject());
|
||||
DTO::GeneralCommand command = DTO::GeneralCommand::fromJson(data.toObject());
|
||||
|
||||
// TODO: move command handling out of here
|
||||
switch(command.name()) {
|
||||
|
@ -108,7 +108,7 @@ void WebSocket::textMessageReceived(const QString &message) {
|
|||
}
|
||||
break;
|
||||
default:
|
||||
qCDebug(jellyfinWebSocket) << "Unhandled command: " << messageRoot["Data"];
|
||||
qCDebug(jellyfinWebSocket) << "Unhandled command: " << data;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -117,49 +117,28 @@ void WebSocket::textMessageReceived(const QString &message) {
|
|||
}
|
||||
} else if (messageType == QStringLiteral("Playstate")) {
|
||||
try {
|
||||
DTO::PlaystateRequest request = PlaystateRequest::fromJson(messageRoot["Data"].toObject());
|
||||
DTO::PlaystateRequest request = PlaystateRequest::fromJson(data.toObject());
|
||||
emit m_apiClient->eventbus()->playstateCommandReceived(request);
|
||||
} catch (QException &e) {
|
||||
qCWarning(jellyfinWebSocket()) << "Error while deserialzing PlaystateRequest " << e.what();
|
||||
qCWarning(jellyfinWebSocket) << "Error while deserialzing PlaystateRequest " << e.what();
|
||||
}
|
||||
} else if(messageType == QStringLiteral("UserDataChanged")) {
|
||||
QString userId = data.toObject()["UserId"].toString();
|
||||
if (userId != m_apiClient->userId()) {
|
||||
qCDebug(jellyfinWebSocket) << "Received UserDataCHanged for other user";
|
||||
} else {
|
||||
try {
|
||||
QList<DTO::UserItemDataDto> userDataList = Support::fromJsonValue<QList<DTO::UserItemDataDto>>(data.toObject()["UserDataList"]);
|
||||
for (auto it = userDataList.cbegin(); it != userDataList.cend(); it++) {
|
||||
emit m_apiClient->eventbus()->itemUserDataUpdated(it->itemId(), *it);
|
||||
}
|
||||
} catch (QException *e) {
|
||||
qCWarning(jellyfinWebSocket) << "Unparseable UserData list received: " << e->what();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
qCDebug(jellyfinWebSocket) << messageType;
|
||||
}
|
||||
bool ok;
|
||||
/*MessageType messageType = static_cast<MessageType>(QMetaEnum::fromType<WebSocket::MessageType>().keyToValue(messageTypeStr.toLatin1(), &ok));
|
||||
if (!ok) {
|
||||
qWarning() << "Unknown message arrived: " << messageTypeStr;
|
||||
if (messageRoot.contains("Data")) {
|
||||
qDebug() << "with data: " << QJsonDocument(messageRoot["Data"].toObject()).toJson();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
qDebug() << "Received message: " << messageTypeStr;
|
||||
|
||||
switch (messageType) {
|
||||
case ForceKeepAlive:
|
||||
setupKeepAlive(data.toInt(-1));
|
||||
break;
|
||||
case KeepAlive:
|
||||
//TODO: do something?
|
||||
break;
|
||||
case UserDataChanged: {
|
||||
QJsonObject data2 = data.toObject();
|
||||
if (data2["UserId"] != m_apiClient->userId()) {
|
||||
qDebug() << "Received UserDataCHanged for other user";
|
||||
break;
|
||||
}
|
||||
QJsonArray userDataList = data2["UserDataList"].toArray();
|
||||
for (QJsonValue val: userDataList) {
|
||||
UserItemDataDto userData = UserItemDataDto::fromJson(val.toObject());
|
||||
//m_apiClient->onUserDataChanged(userData->itemId(), userData);
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
}*/
|
||||
|
||||
}
|
||||
|
||||
void WebSocket::sendKeepAlive() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue