Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37556552
en ru br
ALT Linux repos
S:2.0.0-alt4

Group :: System/Configuration/Other
RPM: telegramqml

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: 0004-Add-SharedPointer-Qml-component-to-use-TelegramShare.patch
Download


From 93e6b14ed45baa79f1e5b5ffdbe504ec33711f83 Mon Sep 17 00:00:00 2001
From: Bardia Daneshvar <realbardiax@gmail.com>
Date: Wed, 27 Jul 2016 16:50:33 +0430
Subject: [PATCH 4/4] Add SharedPointer Qml component to use
 TelegramSharedPointer features from Qml...
(cherry picked from commit 4bc16efe61afab19a77e3b4e2f9dfe0e7a8d53ff)
---
 documents/sharedpointer.md   | 30 ++++++++++++++++++++++++
 documents/start.md           |  1 +
 plugins.qmltypes             | 54 ++++++++++++++++++++++++++++++++------------
 telegrampeerdetails.cpp      |  2 +-
 telegramqml.pri              |  6 +++--
 telegramqmlinitializer.cpp   |  2 ++
 telegramqmlsharedpointer.cpp | 40 ++++++++++++++++++++++++++++++++
 telegramqmlsharedpointer.h   | 32 ++++++++++++++++++++++++++
 8 files changed, 149 insertions(+), 18 deletions(-)
 create mode 100644 documents/sharedpointer.md
 create mode 100644 telegramqmlsharedpointer.cpp
 create mode 100644 telegramqmlsharedpointer.h
diff --git a/documents/sharedpointer.md b/documents/sharedpointer.md
new file mode 100644
index 0000000..5f7a0c8
--- /dev/null
+++ b/documents/sharedpointer.md
@@ -0,0 +1,30 @@
+# SharedPointer
+
+ * [Component details](#component-details)
+ * [Required Properties](#required-properties)
+ * [Methods](#methods)
+
+
+### Component details:
+
+|Detail|Value|
+|------|-----|
+|Import|TelegramQml 2.0|
+|Component|<font color='#074885'>SharedPointer</font>|
+|C++ class|<font color='#074885'>TelegramQmlSharedPointer</font>|
+|Inherits|<font color='#074885'>object</font>|
+|Model|<font color='#074885'>No</font>|
+
+
+### Required Properties
+
+* <font color='#074885'><b>object</b></font>: object
+
+
+
+### Methods
+
+ * void <font color='#074885'><b>clean</b></font>()
+
+
+
diff --git a/documents/start.md b/documents/start.md
index abc4313..c65a85e 100644
--- a/documents/start.md
+++ b/documents/start.md
@@ -62,4 +62,5 @@ Here are all components of the TelegramQml:
  * [TqObject](tqobject.md)
  * [AbstractListModel](abstractlistmodel.md)
  * [AbstractEngineListModel](abstractenginelistmodel.md)
+ * [SharedPointer](sharedpointer.md)
  * [Enums](enums.md)
diff --git a/plugins.qmltypes b/plugins.qmltypes
index b33753b..1476705 100644
--- a/plugins.qmltypes
+++ b/plugins.qmltypes
@@ -3186,21 +3186,32 @@ Module {
                 "RoleTopMessageItem": 259,
                 "RolePeerItem": 260,
                 "RolePeerHex": 261,
-                "RoleName": 262,
-                "RoleMessageDate": 263,
-                "RoleMessageUnread": 264,
-                "RoleMessage": 265,
-                "RoleMessageOut": 266,
-                "RoleMessageType": 267,
-                "RoleMessageUser": 268,
-                "RoleLastOnline": 269,
-                "RoleIsOnline": 270,
-                "RoleStatus": 271,
-                "RoleStatusText": 272,
-                "RoleTyping": 273,
-                "RoleUnreadCount": 274,
-                "RoleMute": 275,
-                "RoleCategory": 276
+                "RoleIsSecretChat": 262,
+                "RoleSecretChatState": 263,
+                "RoleName": 264,
+                "RoleMessageDate": 265,
+                "RoleMessageUnread": 266,
+                "RoleMessage": 267,
+                "RoleMessageOut": 268,
+                "RoleMessageType": 269,
+                "RoleMessageUser": 270,
+                "RoleLastOnline": 271,
+                "RoleIsOnline": 272,
+                "RoleStatus": 273,
+                "RoleStatusText": 274,
+                "RoleTyping": 275,
+                "RoleUnreadCount": 276,
+                "RoleMute": 277,
+                "RoleCategory": 278
+            }
+        }
+        Enum {
+            name: "SecretChatState"
+            values: {
+                "SecretChatStateInit": 0,
+                "SecretChatStateRequested": 1,
+                "SecretChatStateAccepted": 2,
+                "SecretChatStateCancelled": 3
             }
         }
         Property { name: "visibility"; type: "int" }
@@ -3726,6 +3737,14 @@ Module {
         }
     }
     Component {
+        name: "TelegramQmlSharedPointer"
+        prototype: "QObject"
+        exports: ["TelegramQml/SharedPointer 2.0"]
+        exportMetaObjectRevisions: [0]
+        Property { name: "object"; type: "QObject"; isPointer: true }
+        Method { name: "clean" }
+    }
+    Component {
         name: "TelegramStatus"
         defaultProperty: "items"
         prototype: "TqObject"
@@ -3779,6 +3798,11 @@ Module {
         Property { name: "stickerSet"; type: "InputStickerSetObject"; isPointer: true }
         Property { name: "documents"; type: "QVariantList" }
         Signal { name: "engineChanged" }
+        Method { name: "showRecents" }
+        Method {
+            name: "addToRecents"
+            Parameter { name: "doc"; type: "DocumentObject"; isPointer: true }
+        }
     }
     Component {
         name: "TelegramTestTools"
diff --git a/telegrampeerdetails.cpp b/telegrampeerdetails.cpp
index e805dd5..dca302c 100644
--- a/telegrampeerdetails.cpp
+++ b/telegrampeerdetails.cpp
@@ -472,6 +472,7 @@ void TelegramPeerDetails::refresh()
     connectUserSignals(p->user, true);
     connectChatSignals(p->chat, true);
 
+    p->peerRoot = TelegramTools::objectRoot(p->peer);
     if(!p->engine || !p->peer || !p->engine->telegram() || !p->engine->sharedData())
     {
         if(!p->username.isEmpty())
@@ -505,7 +506,6 @@ void TelegramPeerDetails::refresh()
     const Peer &peer = TelegramTools::inputPeerPeer(p->peer->core());
     const QByteArray &key = TelegramTools::identifier(peer);
 
-    p->peerRoot = TelegramTools::objectRoot(p->peer);
     p->dialog = tsdm->getDialog(key);
     p->user = tsdm->getUser(key);
     p->chat = tsdm->getChat(key);
diff --git a/telegramqml.pri b/telegramqml.pri
index b85c365..b3deebb 100644
--- a/telegramqml.pri
+++ b/telegramqml.pri
@@ -64,7 +64,8 @@ SOURCES += \
     $$PWD/telegramcache.cpp \
     $$PWD/telegrammemberslistmodel.cpp \
     $$PWD/telegrammedialistmodel.cpp \
-    $$PWD/telegramauthstore.cpp
+    $$PWD/telegramauthstore.cpp \
+    $$PWD/telegramqmlsharedpointer.cpp
 
 HEADERS += \
     $$PWD/telegramqml_macros.h \
@@ -106,7 +107,8 @@ HEADERS += \
     $$PWD/telegramcache.h \
     $$PWD/telegrammemberslistmodel.h \
     $$PWD/telegrammedialistmodel.h \
-    $$PWD/telegramauthstore.h
+    $$PWD/telegramauthstore.h \
+    $$PWD/telegramqmlsharedpointer.h
 
 RESOURCES += \
     $$PWD/tqmlresource.qrc
diff --git a/telegramqmlinitializer.cpp b/telegramqmlinitializer.cpp
index c8ce4a5..e2235f4 100644
--- a/telegramqmlinitializer.cpp
+++ b/telegramqmlinitializer.cpp
@@ -23,6 +23,7 @@
 #include "telegramcache.h"
 #include "telegrammedialistmodel.h"
 #include "telegramauthstore.h"
+#include "telegramqmlsharedpointer.h"
 #include "private/telegramdownloadhandler.h"
 
 #include <telegram/objects/qmltools.h>
@@ -88,6 +89,7 @@ void TelegramQmlInitializer::init(const char *uri, bool exportMode)
         exportItem<TelegramAbstractEngineListModel>("TelegramQml", 2, 0, "AbstractEngineListModel");
     }
 
+    registerType<TelegramQmlSharedPointer>("TelegramQml", 2, 0, "SharedPointer", exportMode);
     registerUncreatableType<TelegramEnums>(uri, 2, 0, "Enums", "It's just enums", exportMode);
 
     qmlRegisterType<TqmlDocumentExporter>(uri, 2, 0, "DocumentExporter");
diff --git a/telegramqmlsharedpointer.cpp b/telegramqmlsharedpointer.cpp
new file mode 100644
index 0000000..72413db
--- /dev/null
+++ b/telegramqmlsharedpointer.cpp
@@ -0,0 +1,40 @@
+#include "telegramqmlsharedpointer.h"
+#include "tqbaseobject.h"
+
+TelegramQmlSharedPointer::TelegramQmlSharedPointer(QObject *parent) :
+    QObject(parent)
+{
+
+}
+
+void TelegramQmlSharedPointer::setObject(QObject *object)
+{
+    if(object == mObject)
+        return;
+
+    if(mObject) disconnect(mObject.data(), &QObject::destroyed, this, &TelegramQmlSharedPointer::clean);
+    mObject = object;
+    if(mObject) connect(mObject.data(), &QObject::destroyed, this, &TelegramQmlSharedPointer::clean);
+
+    Q_EMIT objectChanged();
+}
+
+QObject *TelegramQmlSharedPointer::object() const
+{
+    return mObject;
+}
+
+QStringList TelegramQmlSharedPointer::requiredProperties()
+{
+    return QStringList() << FUNCTION_NAME(object);
+}
+
+void TelegramQmlSharedPointer::clean()
+{
+    mObject = 0;
+}
+
+TelegramQmlSharedPointer::~TelegramQmlSharedPointer()
+{
+
+}
diff --git a/telegramqmlsharedpointer.h b/telegramqmlsharedpointer.h
new file mode 100644
index 0000000..02e72e2
--- /dev/null
+++ b/telegramqmlsharedpointer.h
@@ -0,0 +1,32 @@
+#ifndef TELEGRAMQMLSHAREDPOINTER_H
+#define TELEGRAMQMLSHAREDPOINTER_H
+
+#include <QObject>
+
+#include "telegramsharedpointer.h"
+
+class TelegramQmlSharedPointer : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(QObject* object READ object WRITE setObject NOTIFY objectChanged)
+
+public:
+    TelegramQmlSharedPointer(QObject *parent = 0);
+    ~TelegramQmlSharedPointer();
+
+    void setObject(QObject *object);
+    QObject *object() const;
+
+    static QStringList requiredProperties();
+
+public Q_SLOTS:
+    void clean();
+
+Q_SIGNALS:
+    void objectChanged();
+
+private:
+    TelegramSharedPointer<QObject> mObject;
+};
+
+#endif // TELEGRAMQMLSHAREDPOINTER_H
-- 
2.9.2
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin