From 567d01389216df8c782c871b23f5a7ca9e6ca4c6 Mon Sep 17 00:00:00 2001
From: Armin Felder <armin.felder@osalliance.com>
Date: Sat, 1 Dec 2018 17:12:53 +0100
Subject: [PATCH] use make shared -> Qsharedpointer::create

---
 CustomModels/messagemodel.cpp         |  14 +--
 api/messagelistener.h                 |   2 +-
 repos/emojirepo.cpp                   |  17 ++--
 repos/emojirepo.h                     |   5 +-
 repos/entities/emoji.cpp              |   5 +-
 repos/messagerepository.cpp           |   5 +-
 repos/messagerepository.h             |   5 +-
 repos/userrepository.cpp              |   2 +-
 repos/userrepository.h                |   4 +-
 rocketchat.cpp                        |  24 ++++-
 rocketchatserver.cpp                  | 133 +++++++++++++++++---------
 services/emojiservice.cpp             |  14 ++-
 services/fileservice.cpp              |  18 ++--
 services/messageservice.cpp           |  51 ++++++----
 services/rocketchatchannelservice.cpp |  72 +++++++++-----
 utils.cpp                             |   2 +-
 16 files changed, 236 insertions(+), 137 deletions(-)

diff --git a/CustomModels/messagemodel.cpp b/CustomModels/messagemodel.cpp
index dc15ebb..d3fd76d 100644
--- a/CustomModels/messagemodel.cpp
+++ b/CustomModels/messagemodel.cpp
@@ -33,7 +33,7 @@ QVariant MessagesModel::data( const QModelIndex &index, int role ) const
 {
     int row = index.row();
 
-    QSharedPointer<RocketChatMessage> messageAtIndex =  messagesOfCurrentChannel.at( row );
+    auto messageAtIndex =  messagesOfCurrentChannel.at( row );
 
     auto roleType  = static_cast<MessageRoles>( role );
 
@@ -102,22 +102,22 @@ QVariant MessagesModel::data( const QModelIndex &index, int role ) const
             return messageAtIndex->getId();
 
         case   MessageRoles::replyMessage: {
-                QList<QSharedPointer<RocketChatAttachment> > attachments = messageAtIndex->getAttachments();
+                auto attachments = messageAtIndex->getAttachments();
 
                 if ( attachments.size() ) {
-                    QSharedPointer<RocketChatAttachment> first = attachments.first();
-                    QSharedPointer<RocketChatReplyMessage> msg =  qSharedPointerCast<RocketChatReplyMessage>( first );
+                    auto first = attachments.first();
+                    auto msg =  qSharedPointerCast<RocketChatReplyMessage>( first );
                     return msg->getMessageString();
                 }
             }
             break;
 
         case MessageRoles::replyAutor: {
-                QList<QSharedPointer<RocketChatAttachment> > attachments = messageAtIndex->getAttachments();
+                auto attachments = messageAtIndex->getAttachments();
 
                 if ( attachments.size() ) {
-                    QSharedPointer<RocketChatAttachment> first = attachments.first();
-                    QSharedPointer<RocketChatReplyMessage> msg =  qSharedPointerCast<RocketChatReplyMessage>( first );
+                    auto first = attachments.first();
+                    auto msg =  qSharedPointerCast<RocketChatReplyMessage>( first );
                     return msg->getAuthor();
                 }
             }
diff --git a/api/messagelistener.h b/api/messagelistener.h
index 31c37ee..34e9b1c 100644
--- a/api/messagelistener.h
+++ b/api/messagelistener.h
@@ -10,8 +10,8 @@ class MessageListener: public QObject
 {
         Q_OBJECT
     public:
+        MessageListener( QObject *parent = nullptr ): QObject( parent ) {}
         virtual bool handlesMessage( const QJsonObject &object ) = 0;
 };
 
 #endif // MESSAGELISTENER_H
-
diff --git a/repos/emojirepo.cpp b/repos/emojirepo.cpp
index f327a47..570f06f 100644
--- a/repos/emojirepo.cpp
+++ b/repos/emojirepo.cpp
@@ -35,20 +35,19 @@ bool EmojiRepo::add( const QSharedPointer<Emoji> &pEmoji )
 bool EmojiRepo::add( const QString &pId, const QSharedPointer<Emoji> &pEmoji )
 {
     if ( !pEmoji.isNull() ) {
-        if ( !mEmojisOrdered.isEmpty() ) {
-            if ( !pEmoji->getOrder() ) {
-                pEmoji->setOrder( mEmojisOrdered.last()->getOrder() + 1 );
+        if ( !pEmoji->getOrder() ) {
+            mHighestOrder++;
+            pEmoji->setOrder( mHighestOrder );
+        } else {
+            auto emojiOrder = pEmoji->getOrder();
+
+            if ( emojiOrder > mHighestOrder ) {
+                mHighestOrder = emojiOrder;
             }
         }
 
-        mEmojisOrdered.insert( pEmoji->getOrder(), pEmoji );
         return AbstractBaseRepository::add( pId, pEmoji );
     } else {
         return false;
     }
 }
-
-const QMap<int, QSharedPointer<Emoji> > &EmojiRepo::emojisOrdered() const
-{
-    return mEmojisOrdered;
-}
diff --git a/repos/emojirepo.h b/repos/emojirepo.h
index 7e06c20..4bf5bda 100644
--- a/repos/emojirepo.h
+++ b/repos/emojirepo.h
@@ -36,11 +36,8 @@ class EmojiRepo : public QObject, public AbstractBaseRepository<Emoji>
         EmojiRepo( QObject *parent = nullptr );
         bool add( const QSharedPointer<Emoji> &pEmoji );
         bool add( const QString &pId, const QSharedPointer<Emoji> &pEmoji );
-
-        const QMap<int, QSharedPointer<Emoji> > &emojisOrdered() const;
-
     private:
-        QMap<int, QSharedPointer<Emoji> > mEmojisOrdered;
+        int mHighestOrder = 0;
 };
 
 #endif // EMOJIREPO_H
diff --git a/repos/entities/emoji.cpp b/repos/entities/emoji.cpp
index 9d4e183..301a14b 100644
--- a/repos/entities/emoji.cpp
+++ b/repos/entities/emoji.cpp
@@ -21,6 +21,7 @@
 
 #include "emoji.h"
 
+//TODO data form db already contain :.*: thats confusing an inconsitent
 Emoji::Emoji( QString name, QString extension, QString category ): mCategory( std::move( category ) )
 {
     mName = std::move( name );
@@ -32,7 +33,7 @@ Emoji::Emoji( QString name, QString extension, QString category ): mCategory( st
 Emoji::Emoji( QString name, QString category, QString filePath, QString html ): mCategory( std::move( category ) )
 {
     mName = std::move( name );
-    this->mIdentifier = ':' + mName + ':';
+    this->mIdentifier = mName;
     mFilePath = std::move( filePath );
     QFileInfo fileInfo( mFilePath );
     mhtml = std::move( html );
@@ -52,7 +53,7 @@ Emoji::Emoji( QString name, QString category, QString filePath, QString html, QS
 Emoji::Emoji( QString name, QString category, QString filePath, QString html, QString unicode, int order ): mCategory( std::move( category ) ), mUnicodeChar( std::move( unicode ) ), mOrder( order )
 {
     mName = std::move( name );
-    this->mIdentifier = ':' + mName + ':';
+    this->mIdentifier =  mName ;
     mFilePath = std::move( filePath );
     QFileInfo fileInfo( mFilePath );
     mhtml = html;
diff --git a/repos/messagerepository.cpp b/repos/messagerepository.cpp
index 10b4ad2..5ade0fb 100755
--- a/repos/messagerepository.cpp
+++ b/repos/messagerepository.cpp
@@ -21,7 +21,7 @@
 
 #include "messagerepository.h"
 
-MessageRepository::MessageRepository()
+MessageRepository::MessageRepository( QObject *parent ): QObject( parent )
 {
     mElements.reserve( 100 );
 }
@@ -76,7 +76,8 @@ QVector<QSharedPointer<RocketChatMessage> > MessageRepository::messagesAsObjects
 
     for ( const auto &message : mTimestampIndex.values() ) {
         if ( !message.isNull() ) {
-            QSharedPointer<RocketChatMessage> sortable( new RocketChatMessage( *message.data() ) );
+            //QSharedPointer<RocketChatMessage> sortable( new RocketChatMessage( *message.data() ) );
+            auto sortable = QSharedPointer<RocketChatMessage>::create( *message.data() );
             list.append( sortable );
         }
     }
diff --git a/repos/messagerepository.h b/repos/messagerepository.h
index 80b672b..042f601 100755
--- a/repos/messagerepository.h
+++ b/repos/messagerepository.h
@@ -32,10 +32,11 @@
 
 class RocketChatMessage;
 typedef QSharedPointer<RocketChatMessage> ChatMessage;
-class MessageRepository : public AbstractBaseRepository<RocketChatMessage>
+class MessageRepository : public QObject, public AbstractBaseRepository<RocketChatMessage>
 {
+        Q_OBJECT
     public:
-        MessageRepository();
+        MessageRepository( QObject *parent = nullptr );
         ChatMessage youngest();
         const ChatMessage &youngest() const;
         ChatMessage oldest();
diff --git a/repos/userrepository.cpp b/repos/userrepository.cpp
index edb3a70..3a6f2cc 100755
--- a/repos/userrepository.cpp
+++ b/repos/userrepository.cpp
@@ -22,7 +22,7 @@
 
 #include "userrepository.h"
 
-UserRepository::UserRepository()
+UserRepository::UserRepository( QObject *parent ): QObject( parent )
 {
     mElements.reserve( 50 );
 }
diff --git a/repos/userrepository.h b/repos/userrepository.h
index 5888cf4..933b075 100755
--- a/repos/userrepository.h
+++ b/repos/userrepository.h
@@ -24,10 +24,10 @@
 #define USERREPOSITORY_H
 #include "abstractbaserepository.h"
 #include "repos/entities/rocketchatuser.h"
-class UserRepository : public AbstractBaseRepository<RocketChatUser>
+class UserRepository : public QObject, public AbstractBaseRepository<RocketChatUser>
 {
     public:
-        UserRepository();
+        UserRepository( QObject *parent = nullptr );
 };
 
 #endif // USERREPOSITORY_H
diff --git a/rocketchat.cpp b/rocketchat.cpp
index 08c9945..359ad36 100755
--- a/rocketchat.cpp
+++ b/rocketchat.cpp
@@ -47,10 +47,6 @@ void customOutput( QtMsgType type, const QMessageLogContext &context, const QStr
 {
     QByteArray localMsg = msg.toLocal8Bit();
 
-    if ( msg.contains( "QObject::connect: Cannot queue arguments of type 'QQmlChangeSet'" ) ) {
-        qDebug() << "break";
-    }
-
     switch ( type ) {
         case QtDebugMsg:
             fprintf( stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function );
@@ -96,8 +92,26 @@ RocketChat::RocketChat( QGuiApplication *app )
 
 RocketChat::~RocketChat()
 {
-    mServerThread.quit();
+    static auto destructCounter = mServerMap.size();
+
+    if ( !destructCounter ) {
+        mServerThread.quit();
+    } else {
+        for ( auto element : mServerMap ) {
+            connect( element, &RocketChatServerData::destroyed, [ = ]() {
+                destructCounter--;
+
+                if ( !destructCounter ) {
+                    mServerThread.quit();
+                }
+            } );
+
+            element->deleteLater();
+        }
+    }
+
     mServerThread.wait();
+
 }
 
 
diff --git a/rocketchatserver.cpp b/rocketchatserver.cpp
index bebccf9..ad33994 100755
--- a/rocketchatserver.cpp
+++ b/rocketchatserver.cpp
@@ -265,7 +265,8 @@ void RocketChatServerData::switchChannelByName( const QString &pName, const QStr
                     switchChannel( QStringLiteral( "default" ), id, pName, pType );
                 }
             };
-            QSharedPointer<RocketChatGetRoomByNameAndType> request( new RocketChatGetRoomByNameAndType( pName, pType ) );
+            auto request = QSharedPointer<RocketChatGetRoomByNameAndType>::create( pName, pType );
+            // QSharedPointer<RocketChatGetRoomByNameAndType> request(  pName, pType  );
             request->setSuccess( success );
             sendDdprequest( request );
             //searchForRoomIdByName( pName );
@@ -328,7 +329,8 @@ void RocketChatServerData::setUserPresenceDefaultStatus( int pStatus )
 {
     if ( pStatus >= 0 && pStatus < 5 && isWebsocketValid() && diffToLastDDPPing() < 29 ) {
 
-        QSharedPointer<DDPMethodRequest> request( new RocketChatChangeUserPresenceDefaultStatus( static_cast<RocketChatUser::status>( pStatus ) ) );
+        //QSharedPointer<DDPMethodRequest> request( new RocketChatChangeUserPresenceDefaultStatus( static_cast<RocketChatUser::status>( pStatus ) ) );
+        auto request = QSharedPointer<RocketChatChangeUserPresenceDefaultStatus>::create( static_cast<RocketChatUser::status>( pStatus ) );
         sendDdprequest( request, true );
     }
 }
@@ -337,7 +339,8 @@ void RocketChatServerData::setUserPresenceStatus( int pStatus )
 {
     if ( pStatus >= 0 && pStatus < 5 && isWebsocketValid() && diffToLastDDPPing() < 29 ) {
 
-        QSharedPointer<DDPMethodRequest> request( new RocketChatChangeUserPresenceStatus( static_cast<RocketChatUser::status>( pStatus ) ) );
+        // QSharedPointer<DDPMethodRequest> request( new RocketChatChangeUserPresenceStatus( static_cast<RocketChatUser::status>( pStatus ) ) );
+        auto request = QSharedPointer<RocketChatChangeUserPresenceStatus>::create( static_cast<RocketChatUser::status>( pStatus ) );
         sendDdprequest( request, true );
     }
 }
@@ -358,7 +361,8 @@ void RocketChatServerData::createVideoCall( const QString &pRid )
 {
     if ( !pRid.isEmpty() ) {
 
-        QSharedPointer<DDPMethodRequest> request( new RocketChatUpdateJitsiTimeout( pRid ) );
+        //  QSharedPointer<DDPMethodRequest> request( new RocketChatUpdateJitsiTimeout( pRid ) );
+        auto request = QSharedPointer<RocketChatUpdateJitsiTimeout>::create( pRid );
         sendDdprequest( request );
         joinJitsiCall( pRid );
     }
@@ -367,7 +371,8 @@ void RocketChatServerData::createVideoCall( const QString &pRid )
 //TODO: rename, as method is not really for searching only
 void RocketChatServerData::searchForRoomIdByName( const QString &pName )
 {
-    QSharedPointer<RestSpotlightRequest> request( new RestSpotlightRequest( pName ) );
+    // QSharedPointer<RestSpotlightRequest> request( new RestSpotlightRequest( pName ) );
+    auto request = QSharedPointer<RestSpotlightRequest>::create( pName );
     std::function<void ( QNetworkReply *, QJsonObject data, RestApi * )> success = [ = ]( QNetworkReply *, QJsonObject data, RestApi * ) {
 
         if ( data.contains( QStringLiteral( "result" ) ) ) {
@@ -423,14 +428,18 @@ void RocketChatServerData::blockUser( const QString &pChannelId )
         QString possibleRoom1 = userId + mUserId;
         QString possibleRoom2 = mUserId + userId;
 
-        QSharedPointer<RocketChatBlockUserRequest> blockRequest1( new RocketChatBlockUserRequest( possibleRoom1, userId ) );
-        QSharedPointer<RocketChatBlockUserRequest> blockRequest2( new RocketChatBlockUserRequest( possibleRoom2, userId ) );
+        // QSharedPointer<RocketChatBlockUserRequest> blockRequest1( new RocketChatBlockUserRequest( possibleRoom1, userId ) );
+        // QSharedPointer<RocketChatBlockUserRequest> blockRequest2( new RocketChatBlockUserRequest( possibleRoom2, userId ) );
+        auto blockRequest1 = QSharedPointer<RocketChatBlockUserRequest>::create( possibleRoom1, userId );
+        auto blockRequest2 = QSharedPointer<RocketChatBlockUserRequest>::create( possibleRoom2, userId );
+
         sendDdprequest( blockRequest1 );
         sendDdprequest( blockRequest2 );
 
 
     } else {
-        QSharedPointer<RocketChatBlockUserRequest> blockRequest( new RocketChatBlockUserRequest( pChannelId, userId ) );
+        //  QSharedPointer<RocketChatBlockUserRequest> blockRequest( new RocketChatBlockUserRequest( pChannelId, userId ) );
+        auto blockRequest = QSharedPointer<RocketChatBlockUserRequest>::create( pChannelId, userId );
         sendDdprequest( blockRequest );
     }
 }
@@ -443,12 +452,15 @@ void RocketChatServerData::unBlockUser( const QString &pChannelId )
     if ( userId == pChannelId ) {
         QString possibleRoom1 = userId + mUserId;
         QString possibleRoom2 = mUserId + userId;
-        QSharedPointer<RocketChatUnblockUserRequest> unBlockRequest1( new RocketChatUnblockUserRequest( possibleRoom1, userId ) );
-        QSharedPointer<RocketChatUnblockUserRequest> unBlockRequest2( new RocketChatUnblockUserRequest( possibleRoom2, userId ) );
+        //QSharedPointer<RocketChatUnblockUserRequest> unBlockRequest1( new RocketChatUnblockUserRequest( possibleRoom1, userId ) );
+        //QSharedPointer<RocketChatUnblockUserRequest> unBlockRequest2( new RocketChatUnblockUserRequest( possibleRoom2, userId ) );
+        auto unBlockRequest1 = QSharedPointer<RocketChatUnblockUserRequest>::create( possibleRoom1, userId );
+        auto unBlockRequest2 = QSharedPointer<RocketChatUnblockUserRequest>::create( possibleRoom2, userId );
         sendDdprequest( unBlockRequest1 );
         sendDdprequest( unBlockRequest2 );
     } else {
-        QSharedPointer<RocketChatUnblockUserRequest> unBlockRequest( new RocketChatUnblockUserRequest( pChannelId, userId ) );
+        // QSharedPointer<RocketChatUnblockUserRequest> unBlockRequest( new RocketChatUnblockUserRequest( pChannelId, userId ) );
+        auto unBlockRequest = QSharedPointer<RocketChatUnblockUserRequest>::create( pChannelId, userId );
         sendDdprequest( unBlockRequest );
     }
 }
@@ -464,7 +476,7 @@ void RocketChatServerData::setUserId( const QString &userId )
     auto user = users->getUserById( userId );
 
     if ( user.isNull() && !userId.isEmpty() ) {
-        user = QSharedPointer<RocketChatUser>( new RocketChatUser( userId ) );
+        user = QSharedPointer<RocketChatUser>::create( userId ) ; //QSharedPointer<RocketChatUser>( new RocketChatUser( userId ) );
         QMetaObject::invokeMethod( userModel, "addUser", Q_ARG( User, user ) );
     }
 
@@ -494,7 +506,9 @@ void RocketChatServerData::loadHistories()
         }
     }
 
-    QSharedPointer<LoadHistoryServiceRequest> request( new LoadHistoryServiceRequest( channelIds, 1 ) );
+    //QSharedPointer<LoadHistoryServiceRequest> request( new LoadHistoryServiceRequest( channelIds, 1 ) );
+    auto request = QSharedPointer<LoadHistoryServiceRequest>::create( channelIds, 1 );
+
     request->setLimit( 1 );
     request->setSuccess( historyLoaded );
     request->setNoLastThreeDays( true );
@@ -507,7 +521,8 @@ void RocketChatServerData::loadHistoryTill( const QString &pChannelId, qint64 pT
     std::function<void ( QMultiMap<QString, QSharedPointer<RocketChatMessage>> *messages )> success = [ = ]( QMultiMap<QString, QSharedPointer<RocketChatMessage>> *messages ) {
         historyLoaded( messages );
     };
-    QSharedPointer<LoadHistoryServiceRequest> request( new LoadHistoryServiceRequest( pChannelId ) );
+    //QSharedPointer<LoadHistoryServiceRequest> request( new LoadHistoryServiceRequest( pChannelId ) );
+    auto request = QSharedPointer<LoadHistoryServiceRequest>::create( pChannelId );
     request->setEnd( pTs );
     request->setLimit( 0 );
     request->setSuccess( success );
@@ -567,8 +582,8 @@ void RocketChatServerData::setEmojiRepo( EmojiRepo *emojiRepo )
 
 void RocketChatServerData::createAccount( const QString &username, const QString &email, const QString &password )
 {
-    QSharedPointer<RocketChatCreateAccount> request( new RocketChatCreateAccount( username, email, password ) );
-
+    // QSharedPointer<RocketChatCreateAccount> request( new RocketChatCreateAccount( username, email, password ) );
+    auto request = QSharedPointer<RocketChatCreateAccount>::create( username, email, password );
     sendDdprequest( request );
 }
 
@@ -640,7 +655,9 @@ void RocketChatServerData::loginWithHash( const QString &pUsername, const QStrin
 
     auto self = this;
 
-    QSharedPointer<DDPLoginRequest> request( new DDPLoginRequest( pUsername, pPswHash ) );
+    // QSharedPointer<DDPLoginRequest> request( new DDPLoginRequest( pUsername, pPswHash ) );
+    auto request = QSharedPointer<DDPLoginRequest>::create( pUsername, pPswHash );
+
     DdpCallback success = [ self, pUsername, pPswHash, request ]( QJsonObject pResponse, MeteorDDP * ) {
         qDebug() << "authenticated";
 
@@ -701,7 +718,8 @@ void RocketChatServerData::loginWithToken( const QString &pUsername, const QStri
 
         };
 
-        QSharedPointer<DDPLoginRequest> request( new DDPLoginRequest( pToken ) );
+        //  QSharedPointer<DDPLoginRequest> request( new DDPLoginRequest( pToken ) );
+        auto request = QSharedPointer<DDPLoginRequest>::create( pToken );
         DdpCallback success = [ = ]( QJsonObject pResponse, MeteorDDP * ) {
             qDebug() << "authenticated";
             mConnectionState = ConnectionState::ONLINE;
@@ -780,7 +798,8 @@ void RocketChatServerData::loginWtihSamlToken( const QString &pToken )
             
         };
         
-        QSharedPointer<ddpSamlLoginRequest> request( new ddpSamlLoginRequest( pToken ) );
+        // QSharedPointer<ddpSamlLoginRequest> request( new ddpSamlLoginRequest( pToken ) );
+        auto request = QSharedPointer<ddpSamlLoginRequest>::create( pToken );
         DdpCallback success = [ = ]( QJsonObject pResponse, MeteorDDP * ) {
             qDebug() << "authenticated";
             mConnectionState = ConnectionState::ONLINE;
@@ -850,7 +869,8 @@ void RocketChatServerData::loginWithOpenIDToken( const QString &pToken, const QS
 
         };
 
-        QSharedPointer<DDPOpenIDLoginRequest> request( new DDPOpenIDLoginRequest( pToken, pSecret ) );
+        //  QSharedPointer<DDPOpenIDLoginRequest> request( new DDPOpenIDLoginRequest( pToken, pSecret ) );
+        auto request = QSharedPointer<DDPOpenIDLoginRequest>::create( pToken, pSecret );
         DdpCallback success = [ = ]( QJsonObject pResponse, MeteorDDP * ) {
             qDebug() << "authenticated";
             self->mConnectionState = ConnectionState::ONLINE;
@@ -927,7 +947,8 @@ void RocketChatServerData::loginWithMethod( const QString &method, const QString
 
 void RocketChatServerData::onDDPConnected()
 {
-    QSharedPointer<PingRequest> request( new PingRequest() );
+    //QSharedPointer<PingRequest> request( new PingRequest() );
+    auto request = QSharedPointer<PingRequest>::create();
     mDdpApi->sendRequest( request );
 
     if ( mResumeOperation ) {
@@ -987,7 +1008,7 @@ void RocketChatServerData::handleChannelMessage( const QJsonObject &pMessage )
                     QString rid = newChannel[QStringLiteral( "rid" )].toString();
 
                     if ( !mChannels->contains( QStringLiteral( "id" ) ) ) {
-                        QSharedPointer<RocketChatChannel> channel  = mChannelService->createChannelObject( rid, name, newChannel["t"].toString() );
+                        auto channel  = mChannelService->createChannelObject( rid, name, newChannel["t"].toString() );
 
                         if ( !channel.isNull() ) {
                             channel->setJoined( true );
@@ -1050,7 +1071,7 @@ void RocketChatServerData::handleChannelMessage( const QJsonObject &pMessage )
                         channel->setUsername( username );
 
                     } else {
-                        QSharedPointer<RocketChatChannel> channel  = mChannelService->createChannelObject( rid, name, data["t"].toString(), username );
+                        auto channel  = mChannelService->createChannelObject( rid, name, data["t"].toString(), username );
                         channel->setBlocked( blocked );
                         channel->setUnreadMessages( unread );
                         mChannels->add( rid, channel );
@@ -1083,7 +1104,8 @@ void RocketChatServerData::getFileRessource( const QString &pUrl, const QString
     auto then = [ = ]( QSharedPointer<TempFile> tempfile, bool showInline ) {
         emit( fileRessourceProcessed( pUrl, tempfile->getFilePath(), showInline ) );
     };
-    QSharedPointer< FileRequest > request( new FileRequest( pUrl, pType, then, showInline ) );
+    // QSharedPointer< FileRequest > request( new FileRequest( pUrl, pType, then, showInline ) );
+    auto request = QSharedPointer<FileRequest>::create( pUrl, pType, then, showInline );
     mFileService->getFileRessource( request );
 
 }
@@ -1092,7 +1114,8 @@ void RocketChatServerData::sendPushToken( const QString &pToken )
 {
     if ( !mUserId.isEmpty() && !pToken.isEmpty() ) {
         qDebug() << "send push token " + pToken;
-        QSharedPointer<DDPRequest> sendToken = QSharedPointer<DDPRequest>( new RocketChatUpdatePushTokenRequest( pToken, mUserId ) );
+        //QSharedPointer<DDPRequest> sendToken = QSharedPointer<DDPRequest>( new RocketChatUpdatePushTokenRequest( pToken, mUserId ) );
+        auto sendToken = QSharedPointer<RocketChatUpdatePushTokenRequest>::create( pToken, mUserId );
         sendDdprequest( sendToken );
 
     }
@@ -1223,7 +1246,8 @@ void RocketChatServerData::onDDPMessageReceived( const QJsonObject &pMessage )
                     user->setStatus( RocketChatUser::status::OFFLINE );
                 }
             } else {
-                auto newUser = QSharedPointer<RocketChatUser>( new RocketChatUser( userId ) );
+                // auto newUser = QSharedPointer<RocketChatUser>( new RocketChatUser( userId ) );
+                auto newUser = QSharedPointer<RocketChatUser>::create( userId );
 
                 if ( pMessage.contains( "fields" ) ) {
                     QJsonObject fields = pMessage["fields"].toObject();
@@ -1344,7 +1368,7 @@ void RocketChatServerData::handleUserJoinMessage( const QJsonObject &pMessage )
                 QString username = userData[QStringLiteral( "username" )].toString();
 
                 if ( Q_LIKELY( mChannels->contains( roomId ) ) ) {
-                    QSharedPointer<RocketChatChannel> channel = mChannels->get( roomId );
+                    auto channel = mChannels->get( roomId );
 
                     if ( !channel.isNull() ) {
                         /*   QSharedPointer<RocketChatUser> ptr( new RocketChatUser( username ) );
@@ -1471,7 +1495,9 @@ void RocketChatServerData::setUsername( const QString &pUsername )
 void RocketChatServerData::getServerSettings()
 {
     QJsonArray params = {};
-    QSharedPointer<DDPMethodRequest> request( new DDPMethodRequest( QStringLiteral( "public-settings/get" ), params ) );
+    //QSharedPointer<DDPMethodRequest> request( new DDPMethodRequest( QStringLiteral( "public-settings/get" ), params ) );
+    auto request = QSharedPointer<DDPMethodRequest>::create( QStringLiteral( "public-settings/get" ), params );
+
     DdpCallback sucess = [ = ]( QJsonObject data, MeteorDDP * ddpApi ) {
         Q_UNUSED( ddpApi );
         QJsonArray configs = data[QStringLiteral( "result" )].toArray();
@@ -1521,7 +1547,8 @@ void RocketChatServerData::onLoggedIn()
 void RocketChatServerData::markChannelAsRead( const QString &pChannelId )
 {
     if ( Q_LIKELY( mChannels->contains( pChannelId ) ) ) {
-        QSharedPointer<DDPRequest> markAsRead( new RocketChatMarkChannelAsReadRequest( pChannelId ) );
+        //QSharedPointer<DDPRequest> markAsRead( new RocketChatMarkChannelAsReadRequest( pChannelId ) );
+        auto markAsRead = QSharedPointer<RocketChatMarkChannelAsReadRequest>::create( pChannelId );
         sendDdprequest( markAsRead );
     }
 }
@@ -1535,7 +1562,8 @@ void RocketChatServerData::joinChannel( const QString &pChannelId, bool pForce )
         setUnreadMessages( pChannelId, 0 );
         markChannelAsRead( pChannelId );
         setCurrentChannel( pChannelId );
-        QSharedPointer<LoadHistoryServiceRequest> serviceRequest( new LoadHistoryServiceRequest( pChannelId ) );
+        // QSharedPointer<LoadHistoryServiceRequest> serviceRequest( new LoadHistoryServiceRequest( pChannelId ) );
+        auto serviceRequest = QSharedPointer<LoadHistoryServiceRequest>::create( pChannelId );
         serviceRequest->setSuccess( historyLoaded );
         serviceRequest->setLimit( 300 );
         mMessageService->loadHistory( serviceRequest );
@@ -1590,7 +1618,8 @@ void RocketChatServerData::joinChannelByNameAndType( const QString &pChannelName
     if ( pType == "d" ) {
         mChannelService->openPrivateChannelWith( pChannelName );
     } else {
-        QSharedPointer<RocketChatGetRoomByNameAndType> request( new RocketChatGetRoomByNameAndType( pChannelName, pType ) );
+        //QSharedPointer<RocketChatGetRoomByNameAndType> request( new RocketChatGetRoomByNameAndType( pChannelName, pType ) );
+        auto request = QSharedPointer<RocketChatGetRoomByNameAndType>::create( pChannelName, pType );
         request->setSuccess( success );
         sendDdprequest( request );
     }
@@ -1630,7 +1659,8 @@ void RocketChatServerData::loadRecentHistory( const QString &pChannelId )
         }
 
         double start = end - ( 86400 * 3 * 1000 );
-        QSharedPointer<LoadHistoryServiceRequest> request( new LoadHistoryServiceRequest( pChannelId ) );
+        //QSharedPointer<LoadHistoryServiceRequest> request( new LoadHistoryServiceRequest( pChannelId ) );
+        auto request = QSharedPointer<LoadHistoryServiceRequest>::create( pChannelId );
         request->setNoLastThreeDays( true );
         request->setStart( start );
         request->setEnd( end );
@@ -1654,7 +1684,8 @@ void RocketChatServerData::loadRecentHistory( const QString &pChannelId )
 
 void RocketChatServerData::sendMessage( const QString &pMessage, const QString &pChannelId )
 {
-    ChatMessage message( new RocketChatMessage( pChannelId, pMessage ) );
+    //ChatMessage message( new RocketChatMessage( pChannelId, pMessage ) );
+    auto message = QSharedPointer< RocketChatMessage>::create( pChannelId, pMessage );
     mMessageService->sendMessage( message );
 }
 
@@ -1695,12 +1726,18 @@ void RocketChatServerData::getCustomEmojis()
             mCustomEmojisReady = true;
         }
     };
-    QSharedPointer<RocketChatSubscribeRoomsChanged> notifyRoomsChanged( new RocketChatSubscribeRoomsChanged( this->mUserId ) );
-    QSharedPointer<RocketChatSubscribeUserNotify> notifySubSubscription( new RocketChatSubscribeUserNotify( this->mUserId ) );
-    QSharedPointer<RocketChatNotifyNoticesRequest> notifyNoticeSubSubscription( new RocketChatNotifyNoticesRequest( this->mUserId ) );
-    QSharedPointer<RocketChatSubScriptionChangedRequest> noitfySubscriptionsSubscription( new RocketChatSubScriptionChangedRequest( this->mUserId ) );
-    QSharedPointer<RocketChatSubscribeActiveUsers> activeUsersSubscription( new RocketChatSubscribeActiveUsers() );
-    QSharedPointer<RocketChatSubscribeUserData> userData( new RocketChatSubscribeUserData() );
+    //QSharedPointer<RocketChatSubscribeRoomsChanged> notifyRoomsChanged( new RocketChatSubscribeRoomsChanged( this->mUserId ) );
+    auto notifyRoomsChanged = QSharedPointer<RocketChatSubscribeRoomsChanged>::create( this->mUserId );
+    // QSharedPointer<RocketChatSubscribeUserNotify> notifySubSubscription( new RocketChatSubscribeUserNotify( this->mUserId ) );
+    auto notifySubSubscription = QSharedPointer<RocketChatSubscribeUserNotify>::create( this->mUserId );
+    // QSharedPointer<RocketChatNotifyNoticesRequest> notifyNoticeSubSubscription( new RocketChatNotifyNoticesRequest( this->mUserId ) );
+    auto notifyNoticeSubSubscription = QSharedPointer<RocketChatNotifyNoticesRequest>::create( this->mUserId );
+    // QSharedPointer<RocketChatSubScriptionChangedRequest> noitfySubscriptionsSubscription( new RocketChatSubScriptionChangedRequest( this->mUserId ) );
+    auto noitfySubscriptionsSubscription = QSharedPointer<RocketChatSubScriptionChangedRequest>::create( this->mUserId );
+    //QSharedPointer<RocketChatSubscribeActiveUsers> activeUsersSubscription( new RocketChatSubscribeActiveUsers() );
+    auto activeUsersSubscription = QSharedPointer<RocketChatSubscribeActiveUsers>::create();
+    //  QSharedPointer<RocketChatSubscribeUserData> userData( new RocketChatSubscribeUserData() );
+    auto userData = QSharedPointer<RocketChatSubscribeUserData>::create();
     sendDdprequest( notifySubSubscription, true );
     sendDdprequest( notifyNoticeSubSubscription, true );
     sendDdprequest( noitfySubscriptionsSubscription, true );
@@ -1798,7 +1835,8 @@ void RocketChatServerData::getLoginMethods()
         Q_UNUSED( pDdpApi );
         qDebug() << "loginMethods Recieved";
     };
-    QSharedPointer<RocketChatSubscribeLoginMethods> loginMethodsSubscription( new RocketChatSubscribeLoginMethods() );
+    // QSharedPointer<RocketChatSubscribeLoginMethods> loginMethodsSubscription( new RocketChatSubscribeLoginMethods() );
+    auto loginMethodsSubscription = QSharedPointer<RocketChatSubscribeLoginMethods>::create();
     loginMethodsSubscription->setSuccess( success );
     // sendDdprequest( loginMethodsSubscription );
     mDdpApi->sendRequest( loginMethodsSubscription );
@@ -1824,7 +1862,8 @@ void RocketChatServerData::getServerInfo()
             }
         }
     };
-    QSharedPointer<GetServerInfoRequest> serverInfoRequest( new GetServerInfoRequest( success, nullptr ) );
+    //  QSharedPointer<GetServerInfoRequest> serverInfoRequest( new GetServerInfoRequest( success, nullptr ) );
+    auto serverInfoRequest = QSharedPointer<GetServerInfoRequest>::create( success, nullptr );
     mRestApi->sendRequest( serverInfoRequest );
 }
 
@@ -1883,7 +1922,8 @@ void RocketChatServerData::resume( void )
 void RocketChatServerData::logout()
 {
     qDebug() << "logged out";
-    RestApiRequest logoutRequest = QSharedPointer<RestRequest>( new RestLogoutRequest );
+    //  RestApiRequest logoutRequest = QSharedPointer<RestRequest>( new RestLogoutRequest );
+    auto logoutRequest = QSharedPointer<RestLogoutRequest>::create();
     mResumeOperation = false;
     emit resetLoginMethods();
     mDdpApi->resume();
@@ -1919,7 +1959,8 @@ void RocketChatServerData::createPublicGroup( const QString &pChannelName, const
             }
         }
     };
-    QSharedPointer<RocketChatCreatePublicGroupRequest> request( new RocketChatCreatePublicGroupRequest( pChannelName, pUsers, pReadonly ) );
+    //  QSharedPointer<RocketChatCreatePublicGroupRequest> request( new RocketChatCreatePublicGroupRequest( pChannelName, pUsers, pReadonly ) );
+    auto request = QSharedPointer<RocketChatCreatePublicGroupRequest>::create( pChannelName, pUsers, pReadonly );
     sendDdprequest( request );
 }
 
@@ -1939,7 +1980,8 @@ void RocketChatServerData::createPrivateGroup( const QString &pChannelName, cons
             }
         }
     };
-    QSharedPointer<RocketChatCreatePrivateGroupRequest> request( new RocketChatCreatePrivateGroupRequest( pChannelName, pUsers, pReadonly ) );
+    // QSharedPointer<RocketChatCreatePrivateGroupRequest> request( new RocketChatCreatePrivateGroupRequest( pChannelName, pUsers, pReadonly ) );
+    auto request = QSharedPointer<RocketChatCreatePrivateGroupRequest>::create( pChannelName, pUsers, pReadonly );
     request->setSuccess( success );
     sendDdprequest( request );
 }
@@ -1955,7 +1997,8 @@ void RocketChatServerData::addUsersToChannel( const QString &pChannelId, const Q
 
         if ( Q_LIKELY( !user.isEmpty() ) ) {
             QStringList usernames( user );
-            QSharedPointer<RocketChatAddUsersToChannel > request( new RocketChatAddUsersToChannel( pChannelId, usernames ) );
+            //QSharedPointer<RocketChatAddUsersToChannel > request( new RocketChatAddUsersToChannel( pChannelId, usernames ) );
+            auto request = QSharedPointer<RocketChatAddUsersToChannel >::create( pChannelId, usernames );
             request->setSuccess( success );
             sendDdprequest( request );
         }
diff --git a/services/emojiservice.cpp b/services/emojiservice.cpp
index 34552fa..08b615c 100755
--- a/services/emojiservice.cpp
+++ b/services/emojiservice.cpp
@@ -50,7 +50,8 @@ void EmojiService::loadCustomEmojis( const std::function<void ( QList<QSharedPoi
         data->success = pSuccess;
         handleCustomEmojisReceived( data );
     };
-    QSharedPointer<DDPMethodRequest> request( new DDPMethodRequest( QStringLiteral( "listEmojiCustom" ), params, success ) );
+    // QSharedPointer<DDPMethodRequest> request( new DDPMethodRequest( QStringLiteral( "listEmojiCustom" ), params, success ) );
+    auto request = QSharedPointer<DDPMethodRequest>::create( QStringLiteral( "listEmojiCustom" ), params, success );
     server->sendDdprequest( request );
 }
 /**
@@ -94,7 +95,7 @@ void EmojiService::handleCustomEmojisReceived( EmojiData *data )
                         mParsedCustomEmojisTemp.append( parsedEmoji );
                         qDebug() << "emoji parsed: " << parsedEmoji->getIdentifier();
                         QString url = QStringLiteral( "/emoji-custom/" ) + parsedEmoji->getName() + '.' + parsedEmoji->getExtension();
-                        std::function<void ( QSharedPointer<TempFile>, bool )> then = [ = ]( QSharedPointer<TempFile> file, bool ) {
+                        std::function<void ( QSharedPointer<TempFile>, bool )> then = [ = ]( const QSharedPointer<TempFile> &file, bool ) {
                             if ( Q_UNLIKELY( file.isNull() ) ) {
                                 qWarning() << "file is null" << parsedEmoji->getIdentifier();
                                 return;
@@ -110,7 +111,8 @@ void EmojiService::handleCustomEmojisReceived( EmojiData *data )
                                 data->success( mParsedCustomEmojisTemp );
                             }
                         };
-                        QSharedPointer<FileRequest> fileRequest( new FileRequest( url, QStringLiteral( "emoji" ), then, true ) );
+                        //  QSharedPointer<FileRequest> fileRequest( new FileRequest( url, QStringLiteral( "emoji" ), then, true ) );
+                        auto fileRequest = QSharedPointer<FileRequest>::create( url, QStringLiteral( "emoji" ), then, true );
                         mFileService->getFileRessource( fileRequest );
                     }
                 }
@@ -141,7 +143,8 @@ QSharedPointer<Emoji> EmojiService::parseEmoji( const QHash<QString, QString> &p
     QString unicode = pEmojiData[QStringLiteral( "unicode" )];
     int order = pEmojiData[QStringLiteral( "sort_order" )].toInt();
 
-    QSharedPointer<Emoji> emoji( new Emoji( std::move( name ), std::move( catgeory ), std::move( filePath ), std::move( html ), std::move( unicode ), order ) );
+    //QSharedPointer<Emoji> emoji( new Emoji( std::move( name ), std::move( catgeory ), std::move( filePath ), std::move( html ), std::move( unicode ), order ) );
+    auto emoji = QSharedPointer<Emoji>::create( std::move( name ), std::move( catgeory ), std::move( filePath ), std::move( html ), std::move( unicode ), order );
     return emoji;
 }
 
@@ -151,7 +154,8 @@ QSharedPointer<Emoji> EmojiService::parseEmoji( const QJsonObject &pEmojiData )
     QString extension = pEmojiData[QStringLiteral( "extension" )].toString();
     QString category = pEmojiData[QStringLiteral( "category" )].toString();
 
-    QSharedPointer<Emoji> emoji( new Emoji( std::move( name ),  std::move( extension ),  std::move( category ) ) );
+    //QSharedPointer<Emoji> emoji( new Emoji( std::move( name ),  std::move( extension ),  std::move( category ) ) );
+    auto emoji = QSharedPointer<Emoji>::create( std::move( name ),  std::move( extension ),  std::move( category ) );
     return emoji;
 }
 
diff --git a/services/fileservice.cpp b/services/fileservice.cpp
index 661dcf0..518e08d 100755
--- a/services/fileservice.cpp
+++ b/services/fileservice.cpp
@@ -97,19 +97,19 @@ QSharedPointer<TempFile> FileService::getFileFromCache( const QSharedPointer< Fi
         qDebug() << "storageEntry len " << storageEntry.size();
 
         if ( !storageEntry.size() ) {
-            return QSharedPointer<TempFile> ( nullptr );
+            return QSharedPointer<TempFile>( nullptr );
         } else {
             QFile cacheHit( storageEntry );
 
             if ( cacheHit.exists() ) {
-                return QSharedPointer<TempFile> ( new TempFile( storageEntry, pRequest->url ) );
+                return QSharedPointer<TempFile>::create( storageEntry, pRequest->url );
             } else {
                 mStorage->removeFileCacheEntry( pRequest->url, storageEntry );
-                return QSharedPointer<TempFile> ( nullptr );
+                return QSharedPointer<TempFile>( nullptr );
             }
         }
     } else {
-        return QSharedPointer<TempFile> ( nullptr );
+        return QSharedPointer<TempFile>( nullptr );
     }
 }
 
@@ -158,7 +158,8 @@ void FileService::getFileFromServer( const QSharedPointer< FileRequest > &pReque
                             QString dataHash = QCryptographicHash::hash( content, QCryptographicHash::Md5 );
 
                             if ( fileHash == dataHash ) {
-                                QSharedPointer<TempFile> tempfile( new TempFile( location, url ) );
+                                //QSharedPointer<TempFile> tempfile( new TempFile( location, url ) );
+                                auto tempfile = QSharedPointer<TempFile>::create( location, url );
                                 pRequest->then( tempfile, pRequest->showInline );
 
                                 if ( location.size() ) {
@@ -174,7 +175,8 @@ void FileService::getFileFromServer( const QSharedPointer< FileRequest > &pReque
                             auto written = file.write( content );
                             qDebug() << "wrote byte to file" << written;
                             file.close();
-                            QSharedPointer<TempFile> tempfile( new TempFile( location, url ) );
+                            //QSharedPointer<TempFile> tempfile( new TempFile( location, url ) );
+                            auto tempfile = QSharedPointer<TempFile>::create( location, url );
                             mStorage->addFileCacheEntry( url, location );
                             pRequest->then( tempfile, pRequest->showInline );
 
@@ -197,8 +199,8 @@ void FileService::getFileFromServer( const QSharedPointer< FileRequest > &pReque
             };
 
             mCurrentDownloads.insert( fullUrl );
-            RestApiRequest request = QSharedPointer<RestRequest>( new GetRequest( fullUrl, success, error, true, true ) );
-
+            //RestApiRequest request = QSharedPointer<RestRequest>( new GetRequest( fullUrl, success, error, true, true ) );
+            auto request = QSharedPointer<GetRequest>::create( fullUrl, success, error, true, true );
             mServer->sendApiRequest( request );
         }
     }
diff --git a/services/messageservice.cpp b/services/messageservice.cpp
index eb5f3c1..72a9e62 100644
--- a/services/messageservice.cpp
+++ b/services/messageservice.cpp
@@ -78,8 +78,9 @@ void MessageService::sendMessage( const QSharedPointer<RocketChatMessage> &pMess
         QJsonObject params;
         params[QStringLiteral( "rid" )] = pMessage->getRoomId();
         params[QStringLiteral( "msg" )] = pMessage->getMessageString();
-        QSharedPointer<DDPRequest> sendMessageRequest( new DDPMethodRequest(
-                    QStringLiteral( "sendMessage" ), {params} ) );
+        //   QSharedPointer<DDPRequest> sendMessageRequest( new DDPMethodRequest(
+        //              QStringLiteral( "sendMessage" ), {params} ) );
+        auto sendMessageRequest = QSharedPointer<DDPMethodRequest>::create( QStringLiteral( "sendMessage" ), QJsonArray( {params} ) );
         mServer->sendDdprequest( sendMessageRequest, true );
     }
 }
@@ -181,13 +182,14 @@ QSharedPointer<RocketChatMessage> MessageService::parseMessage( const QJsonObjec
         QString formattedDate = date.toString( QStringLiteral( "dd.MM.yyyy" ) );
         QString formattedTime = date.toString( QStringLiteral( "hh:mm" ) );
         auto attachments = processAttachments( pMessageData );
-        message = ChatMessage( new RocketChatMessage( pMessageData ) );
+        //message = ChatMessage( new RocketChatMessage( pMessageData ) );
+        message = QSharedPointer<RocketChatMessage>::create( pMessageData );
         message->setAttachments( attachments );
         message->setOwnMessage( ownMessage );
         message->setAuthorId( authorId );
 
         if ( attachments.size() > 0 ) {
-            QSharedPointer<RocketChatAttachment> firstAttachment  = attachments.first();
+            auto firstAttachment  = attachments.first();
 
             if ( !firstAttachment.isNull() ) {
                 if ( firstAttachment->getType() == "replyMessage" ) {
@@ -263,9 +265,9 @@ void MessageService::searchMessage( const QString &pTerm, const QString &pRoom )
         }
     };
 
-    QSharedPointer<RocketChatMessageSearchRequest> request( new RocketChatMessageSearchRequest( pTerm,
-            pRoom ) );
-
+    // QSharedPointer<RocketChatMessageSearchRequest> request( new RocketChatMessageSearchRequest( pTerm,
+    //         pRoom ) );
+    auto request = QSharedPointer<RocketChatMessageSearchRequest>::create( pTerm, pRoom );
     request->setSuccess( ddpSuccess );
 
     mServer->sendDdprequest( request );
@@ -278,7 +280,8 @@ void MessageService::loadHistoryFromServer( const QSharedPointer<LoadHistoryRequ
         pContainer->mAlredayReceived = 0;
 
         //TODO: fix memory leak risk
-        QSharedPointer<QSet<QString>> duplicateCheck( new QSet<QString> );
+        //QSharedPointer<QSet<QString>> duplicateCheck( new QSet<QString> );
+        auto duplicateCheck = QSharedPointer<QSet<QString>>::create();
 
         if ( requests.length() ) {
             auto list = new QMultiMap<QString, ChatMessage>;
@@ -306,8 +309,9 @@ void MessageService::loadHistoryFromServer( const QSharedPointer<LoadHistoryRequ
                         params = {roomId, endObj, limit, startObj};
                     }
 
-                    QSharedPointer<DDPMethodRequest> request( new DDPMethodRequest( QStringLiteral( "loadHistory" ),
-                            params ) );
+                    //       QSharedPointer<DDPMethodRequest> request( new DDPMethodRequest( QStringLiteral( "loadHistory" ),
+                    //             params ) );
+                    auto request = QSharedPointer<DDPMethodRequest>::create( QStringLiteral( "loadHistory" ), params );
                     DdpCallback ddpSuccess = [ = ]( const QJsonObject & pResponse,
                     MeteorDDP * pDdp ) {
                         Q_UNUSED( pDdp );
@@ -363,8 +367,9 @@ void MessageService::loadHistoryFromServer( const QSharedPointer<LoadHistoryServ
     if ( !pRequest.isNull() ) {
         QList<QSharedPointer<LoadHistoryServiceRequest>> list;
         list.append( pRequest );
-        QSharedPointer<LoadHistoryRequestContainer> container( new LoadHistoryRequestContainer( list,
-                pRequest->getSuccess() ) );
+        //   QSharedPointer<LoadHistoryRequestContainer> container( new LoadHistoryRequestContainer( list,
+        //         pRequest->getSuccess() ) );
+        auto container = QSharedPointer<LoadHistoryRequestContainer>::create( list, pRequest->getSuccess() );
         container->setSuccess( pRequest->getSuccess() );
         loadHistoryFromServer( container );
     }
@@ -428,7 +433,8 @@ void MessageService::loadHistoryFromAutoSource( const QSharedPointer<LoadHistory
                     timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch();
                 }
 
-                QSharedPointer<LoadHistoryServiceRequest> newrequest( new LoadHistoryServiceRequest( key ) );
+                //  QSharedPointer<LoadHistoryServiceRequest> newrequest( new LoadHistoryServiceRequest( key ) );
+                auto newrequest = QSharedPointer<LoadHistoryServiceRequest>::create( key );
                 newrequest->setStart( timestamp );
                 newrequest->setLimit( limit - currentList.count() );
 
@@ -439,7 +445,8 @@ void MessageService::loadHistoryFromAutoSource( const QSharedPointer<LoadHistory
                 requestList.append( newrequest );
             }
         } else {
-            QSharedPointer<LoadHistoryServiceRequest> newrequest( new LoadHistoryServiceRequest( key ) );
+            //QSharedPointer<LoadHistoryServiceRequest> newrequest( new LoadHistoryServiceRequest( key ) );
+            auto newrequest =  QSharedPointer<LoadHistoryServiceRequest>::create( key );
             double timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch();
 
             if ( pRequest->getStart() > -1 ) {
@@ -460,7 +467,8 @@ void MessageService::loadHistoryFromAutoSource( const QSharedPointer<LoadHistory
         if ( !pRequest->getNoLastThreeDays() ) {
             double end = QDateTime::currentMSecsSinceEpoch();
             double start = end - ( 86400 * 3 * 1000 );
-            QSharedPointer<LoadHistoryServiceRequest> lastThreeDays( new LoadHistoryServiceRequest( key ) );
+            //QSharedPointer<LoadHistoryServiceRequest> lastThreeDays( new LoadHistoryServiceRequest( key ) );
+            auto lastThreeDays = QSharedPointer<LoadHistoryServiceRequest>::create( key );
             pRequest->setStart( start );
             pRequest->setStart( start );
             requestList.append( lastThreeDays );
@@ -470,8 +478,9 @@ void MessageService::loadHistoryFromAutoSource( const QSharedPointer<LoadHistory
     auto success = pRequest->getSuccess();
     success( channelMap );
     qDebug() << "loaded from database now loading from sever with " << requestList.size() << "requests";
-    QSharedPointer<LoadHistoryRequestContainer> requests( new LoadHistoryRequestContainer( requestList,
-            serverSuccess ) );
+    //QSharedPointer<LoadHistoryRequestContainer> requests( new LoadHistoryRequestContainer( requestList,
+    //        serverSuccess ) );
+    auto requests = QSharedPointer<LoadHistoryRequestContainer>::create( requestList, serverSuccess );
     loadHistoryFromServer( requests );
 }
 
@@ -523,8 +532,9 @@ QList<QSharedPointer<RocketChatAttachment>> MessageService::processAttachments(
                     title = attachment[QStringLiteral( "title" )].toString();
                 }
 
-                QSharedPointer<RocketChatAttachment> attachmentObject( new RocketChatAttachment( url, type,
-                        title ) );
+                //    QSharedPointer<RocketChatAttachment> attachmentObject( new RocketChatAttachment( url, type,
+                //          title ) );
+                auto attachmentObject = QSharedPointer<RocketChatAttachment>::create( url, type, title );
                 attachmentObject->setHeight( height );
                 attachmentObject->setWidth( width );
 
@@ -550,7 +560,8 @@ QList<QSharedPointer<RocketChatAttachment>> MessageService::processAttachments(
                 QString author = attachmentObject["author_name"].toString();
                 text = text.replace( mReplyRegeEx, "" );
                 text = text.replace( mReplyReplyRegeEx, "" );
-                QSharedPointer<RocketChatReplyMessage> reply( new RocketChatReplyMessage( text, author ) );
+                // QSharedPointer<RocketChatReplyMessage> reply( new RocketChatReplyMessage( text, author ) );
+                auto reply = QSharedPointer<RocketChatReplyMessage>::create( text, author );
                 attachmentsList.append( reply );
             }
         }
diff --git a/services/rocketchatchannelservice.cpp b/services/rocketchatchannelservice.cpp
index f7e795d..53fd3a5 100755
--- a/services/rocketchatchannelservice.cpp
+++ b/services/rocketchatchannelservice.cpp
@@ -53,7 +53,8 @@ QSharedPointer<RocketChatChannel> RocketChatChannelService::createChannelObject(
 
 QSharedPointer<RocketChatChannel> RocketChatChannelService::createChannelObject( const QString &pRoomId, const QString &pName, const QString &pType, const QString &pUsername )
 {
-    QSharedPointer<RocketChatChannel> ptr( new RocketChatChannel( mServer, mMessageService, pRoomId, pName, pType ) );
+    //  QSharedPointer<RocketChatChannel> ptr( new RocketChatChannel( mServer, mMessageService, pRoomId, pName, pType ) );
+    auto ptr = QSharedPointer<RocketChatChannel>::create( mServer, mMessageService, pRoomId, pName, pType );
     ptr->setUsername( pUsername );
 
     if ( Q_LIKELY( mChannels ) ) {
@@ -232,11 +233,20 @@ void RocketChatChannelService::loadJoinedChannelsFromServer( void )
             emit channelsLoaded( channelsParsed, true );
         }
     };
-    QSharedPointer<DDPRequest> subscriptions( new DDPMethodRequest( "subscriptions/get", {}, [ = ]( QJsonObject pResponse, MeteorDDP * pDdpApi ) {
+    /*QSharedPointer<DDPRequest> subscriptions( new DDPMethodRequest( "subscriptions/get", {}, [ = ]( QJsonObject pResponse, MeteorDDP * pDdpApi ) {
         subscriptionSuccess( pResponse, pDdpApi );
         QSharedPointer<DDPRequest> rooms( new DDPMethodRequest( "rooms/get", {}, roomsSuccess ) );
         mServer->sendDdprequest( rooms );
-    } ) );
+    } ) );*/
+    auto subscriptionsSuccess = [ = ]( QJsonObject pResponse, MeteorDDP * pDdpApi ) {
+        subscriptionSuccess( pResponse, pDdpApi );
+        //QSharedPointer<DDPRequest> rooms( new DDPMethodRequest( "rooms/get", {}, roomsSuccess ) );
+        QJsonArray test;
+        auto rooms = QSharedPointer<DDPMethodRequest>::create( "rooms/get", test, roomsSuccess );
+        mServer->sendDdprequest( rooms );
+    } ;
+    QJsonArray test;
+    auto subscriptions = QSharedPointer<DDPMethodRequest>::create( QStringLiteral( "subscriptions/get" ), test, subscriptionsSuccess );
     mServer->sendDdprequest( subscriptions );
 }
 
@@ -267,7 +277,7 @@ void RocketChatChannelService::loadJoinedChannelsFromDb()
                     if ( !user.isNull() ) {
                         channelPointer->setChatPartner( user );
                     } else {
-                        auto newUser = QSharedPointer<RocketChatUser>( new RocketChatUser( channelPointer->getChatPartnerId() ) );
+                        auto newUser = QSharedPointer<RocketChatUser>::create( channelPointer->getChatPartnerId() );
                         newUser->setUserName( roomHash["username"].toString() );
                         channelPointer->setChatPartner( newUser );
                         QMetaObject::invokeMethod( users, "addUser", Q_ARG( User, newUser ) );
@@ -311,7 +321,8 @@ void RocketChatChannelService::loadUsersOfChannel( const QSharedPointer<RocketCh
     if ( !pChannel.isNull() ) {
         QString channelId = pChannel->getRoomId();
         QJsonArray params = {channelId, true};
-        QSharedPointer<DDPMethodRequest> request( new DDPMethodRequest( "getUsersOfRoom", params ) );
+        //QSharedPointer<DDPMethodRequest> request( new DDPMethodRequest( "getUsersOfRoom", params ) );
+        auto request = QSharedPointer<DDPMethodRequest>::create( "getUsersOfRoom", params );
         DdpCallback success = [ = ]( QJsonObject data, MeteorDDP * ddp ) {
             Q_UNUSED( ddp );
 
@@ -350,7 +361,7 @@ void RocketChatChannelService::loadUsersOfChannel( const QSharedPointer<RocketCh
                                 name = userObject["name"].toString();
                             }
 
-                            QSharedPointer<RocketChatUser> user;
+                            auto user = QSharedPointer<RocketChatUser>( nullptr );
 
 
                             auto oldUser = userModel->getUserById( userId );
@@ -362,7 +373,8 @@ void RocketChatChannelService::loadUsersOfChannel( const QSharedPointer<RocketCh
                                 user = oldUser;
 
                             } else {
-                                QSharedPointer<RocketChatUser> newUser( new RocketChatUser( userId ) );
+                                //   QSharedPointer<RocketChatUser> newUser( new RocketChatUser( userId ) );
+                                auto newUser = QSharedPointer<RocketChatUser>::create( userId );
                                 newUser->setName( name );
                                 newUser->setUserName( username );
                                 newUser->setStatus( status );
@@ -378,7 +390,8 @@ void RocketChatChannelService::loadUsersOfChannel( const QSharedPointer<RocketCh
                         } else if ( current.type() == QJsonValue::String ) {
                             //TODO: still relevant?
                             QString name = current.toString();
-                            QSharedPointer<RocketChatUser> user( new RocketChatUser( name ) );
+                            //QSharedPointer<RocketChatUser> user( new RocketChatUser( name ) );
+                            auto user = QSharedPointer<RocketChatUser>::create( name );
                             userList.append( user );
                         }
                     }
@@ -402,7 +415,8 @@ void RocketChatChannelService::subscribeChannel( const QSharedPointer<RocketChat
 
 void RocketChatChannelService::subscribeChannel( const QString &pChannel )
 {
-    QSharedPointer<RocketChatSubscribeChannelRequest> subscription( new RocketChatSubscribeChannelRequest( pChannel ) );
+    //QSharedPointer<RocketChatSubscribeChannelRequest> subscription( new RocketChatSubscribeChannelRequest( pChannel ) );
+    auto subscription = QSharedPointer<RocketChatSubscribeChannelRequest>::create( pChannel );
     mServer->sendDdprequest( subscription );
 }
 
@@ -457,10 +471,12 @@ void RocketChatChannelService::leaveChannel( const QString &pId )
 {
     //TODO: handle response, as soon as RC is fixed to do so
     if ( mChannels->contains( pId ) ) {
-        QSharedPointer<RocketChatLeaveRoomRequest> request( new RocketChatLeaveRoomRequest( pId ) );
+        //  QSharedPointer<RocketChatLeaveRoomRequest> request( new RocketChatLeaveRoomRequest( pId ) );
+        auto request = QSharedPointer<RocketChatLeaveRoomRequest>::create( pId );
         auto ddp = getDdp();
         ddp->sendRequest( request );
-        QSharedPointer<RocketChatHideRoomRequest> request2( new RocketChatHideRoomRequest( pId ) );
+        //QSharedPointer<RocketChatHideRoomRequest> request2( new RocketChatHideRoomRequest( pId ) );
+        auto request2 = QSharedPointer<RocketChatHideRoomRequest>::create( pId );
         getDdp()->sendRequest( request2 );
         deleteChannel( pId );
     }
@@ -479,7 +495,8 @@ void RocketChatChannelService::deleteChannel( const QString &pId )
 
 void RocketChatChannelService::hideRoom( const QString &pId )
 {
-    QSharedPointer<RocketChatHideRoomRequest> request( new RocketChatHideRoomRequest( pId ) );
+    //QSharedPointer<RocketChatHideRoomRequest> request( new RocketChatHideRoomRequest( pId ) );
+    auto request = QSharedPointer<RocketChatHideRoomRequest>::create( pId );
     mDdp->sendRequest( request );
     deleteChannel( pId );
 }
@@ -487,16 +504,17 @@ void RocketChatChannelService::hideRoom( const QString &pId )
 void RocketChatChannelService::reportContent( const QString &pMessageId, const QString &pAuthorId )
 {
     QJsonArray params = {QStringLiteral( "abuse" )};
-    QSharedPointer<DDPMethodRequest> request( new DDPMethodRequest( QStringLiteral( "createDirectMessage" ), params ) );
+    //QSharedPointer<DDPMethodRequest> request( new DDPMethodRequest( QStringLiteral( "createDirectMessage" ), params ) );
+    auto request = QSharedPointer<DDPMethodRequest>::create( QStringLiteral( "createDirectMessage" ), params );
     DdpCallback success = [ = ]( QJsonObject pResponse, MeteorDDP * pDdp ) {
         if ( Q_LIKELY( pResponse.contains( QStringLiteral( "result" ) ) ) ) {
             QJsonObject result = pResponse[QStringLiteral( "result" )].toObject();
 
             if ( Q_LIKELY( result.contains( QStringLiteral( "rid" ) ) ) ) {
                 QString rid = result[QStringLiteral( "rid" )].toString();
-                QSharedPointer<DDPSubscriptionRequest> subRoom( new DDPSubscriptionRequest( QStringLiteral( "room" ), {"d" + QStringLiteral( "abuse" )} ) );
-                QSharedPointer<RocketChatSubscribeChannelRequest> subMessages( new RocketChatSubscribeChannelRequest( rid ) );
-                QSharedPointer<RocketChatChannel> channel = createChannelObject( rid, QStringLiteral( "abuse" ), "d" );
+                auto subRoom = QSharedPointer<DDPSubscriptionRequest>::create( QStringLiteral( "room" ), QJsonArray( {"d" + QStringLiteral( "abuse" )} ) );
+                auto subMessages = QSharedPointer<RocketChatSubscribeChannelRequest>::create( rid );
+                auto channel = createChannelObject( rid, QStringLiteral( "abuse" ), "d" );
 
                 if ( !channel.isNull() ) {
 
@@ -505,7 +523,8 @@ void RocketChatChannelService::reportContent( const QString &pMessageId, const Q
                     pDdp->sendRequest( subMessages );
                     emit directChannelReady( rid, "d" );
                     QString message = QStringLiteral( "Report message with id:" ) + pMessageId + QStringLiteral( " from user with id:" ) + pAuthorId;
-                    QSharedPointer<RocketChatMessage> reportMessage( new RocketChatMessage( rid, message ) );
+                    // QSharedPointer<RocketChatMessage> reportMessage( new RocketChatMessage( rid, message ) );
+                    auto reportMessage = QSharedPointer<RocketChatMessage>::create( std::move( rid ), std::move( message ) );
                     mMessageService->sendMessage( reportMessage );
                 }
             }
@@ -540,7 +559,8 @@ void RocketChatChannelService::searchRoom( const QString &pTerm, const QString &
                         QString name = roomObj["name"].toString();
                         QString id = roomObj["_id"].toString();
                         QString type = roomObj["t"].toString();
-                        QSharedPointer<RocketChatChannel> ptr( new RocketChatChannel( mServer, mMessageService, id, name, type ) );
+                        // QSharedPointer<RocketChatChannel> ptr( new RocketChatChannel( mServer, mMessageService, id, name, type ) );
+                        auto ptr = QSharedPointer<RocketChatChannel>::create( mServer, mMessageService, id, name, type );
                         channelList.append( ptr );
                         ids[id] = true;
                         names[name] = true;
@@ -561,7 +581,9 @@ void RocketChatChannelService::searchRoom( const QString &pTerm, const QString &
                         QString id = roomObj["_id"].toString();
                         QString type = "d";
                         QString username = roomObj["username"].toString();
-                        QSharedPointer<RocketChatChannel> ptr( new RocketChatChannel( mServer, mMessageService, id, name, type ) );
+                        // QSharedPointer<RocketChatChannel> ptr( new RocketChatChannel( mServer, mMessageService, id, name, type ) );
+                        auto ptr = QSharedPointer<RocketChatChannel>::create( mServer, mMessageService, id, name, type );
+
                         ptr->setUsername( username );
                         channelList.append( ptr );
                         ids[id] = true;
@@ -581,7 +603,8 @@ void RocketChatChannelService::searchRoom( const QString &pTerm, const QString &
         }
     };
 
-    QSharedPointer<RestSpotlightRequest> request( new RestSpotlightRequest( pTerm, "" ) );
+    //QSharedPointer<RestSpotlightRequest> request( new RestSpotlightRequest( pTerm, "" ) );
+    auto request = QSharedPointer<RestSpotlightRequest>::create( pTerm, "" );
     request->setSuccess( success );
 
     mServer->sendApiRequest( request );
@@ -622,8 +645,10 @@ void RocketChatChannelService::openPrivateChannelWith( const QString &pUsername
                 QString rid = result[QStringLiteral( "rid" )].toString();
 
                 QSharedPointer<RocketChatChannel> channel;
-                QSharedPointer<DDPSubscriptionRequest> subRoom( new DDPSubscriptionRequest( QStringLiteral( "room" ), {"d" + pUsername} ) );
-                QSharedPointer<RocketChatSubscribeChannelRequest> subMessages( new RocketChatSubscribeChannelRequest( rid ) );
+                //QSharedPointer<DDPSubscriptionRequest> subRoom( new DDPSubscriptionRequest( QStringLiteral( "room" ), {"d" + pUsername} ) );
+                auto subRoom = QSharedPointer<DDPSubscriptionRequest>::create( QStringLiteral( "room" ), QJsonArray( {"d" + pUsername} ) );
+                //QSharedPointer<RocketChatSubscribeChannelRequest> subMessages( new RocketChatSubscribeChannelRequest( rid ) );
+                auto subMessages = QSharedPointer<RocketChatSubscribeChannelRequest>::create( rid );
 
                 //TODO: fix
                 if ( !mChannels->contains( rid ) ) {
@@ -646,7 +671,8 @@ void RocketChatChannelService::openPrivateChannelWith( const QString &pUsername
                             }
                         }
                     };
-                    QSharedPointer<RocketChatGetRoomByNameAndType> detailsRequest( new RocketChatGetRoomByNameAndType( pUsername, "d" ) );
+                    //QSharedPointer<RocketChatGetRoomByNameAndType> detailsRequest( new RocketChatGetRoomByNameAndType( pUsername, "d" ) );
+                    auto detailsRequest = QSharedPointer<RocketChatGetRoomByNameAndType>::create( pUsername, "d" );
                     detailsRequest->setSuccess( success );
                     mServer->sendDdprequest( detailsRequest );
                 } else {
diff --git a/utils.cpp b/utils.cpp
index 3b3c4c3..a513878 100755
--- a/utils.cpp
+++ b/utils.cpp
@@ -82,7 +82,7 @@ QString Utils::linkiFy( const QString &pText )
     quotes["›"] = "‹";
 
 
-    std::function<QString( QString text )> parse = [&]( QString pText ) {
+    std::function<QString( QString text )> parse = [&]( const QString & pText ) {
         QString html;
         html.reserve( 300 );
         QVector<QString> parts;
-- 
GitLab