File indexing completed on 2024-05-19 05:40:49

0001 /***************************************************************************
0002  *  Copyright (C) 2020 by Renaud Guezennec                               *
0003  *   http://www.rolisteam.org/contact                                      *
0004  *                                                                         *
0005  *   This software is free software; you can redistribute it and/or modify *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  *                                                                         *
0010  *   This program is distributed in the hope that it will be useful,       *
0011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0013  *   GNU General Public License for more details.                          *
0014  *                                                                         *
0015  *   You should have received a copy of the GNU General Public License     *
0016  *   along with this program; if not, write to the                         *
0017  *   Free Software Foundation, Inc.,                                       *
0018  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
0019  ***************************************************************************/
0020 #include "updater/media/webviewupdater.h"
0021 
0022 #include "controller/view_controller/webpagecontroller.h"
0023 #include "network/networkmessage.h"
0024 #include "worker/messagehelper.h"
0025 
0026 WebViewUpdater::WebViewUpdater(campaign::CampaignManager* campaign, QObject* parent)
0027     : MediaUpdaterInterface(campaign, parent)
0028 {
0029     ReceiveEvent::registerNetworkReceiver(NetMsg::WebPageCategory, this);
0030 }
0031 
0032 void WebViewUpdater::addMediaController(MediaControllerBase* ctrl)
0033 {
0034     auto webCtrl= dynamic_cast<WebpageController*>(ctrl);
0035     if(nullptr == webCtrl)
0036         return;
0037 
0038     if(webCtrl->state() != WebpageController::RemoteView)
0039     {
0040         auto shareWebPage= [webCtrl](bool b) {
0041             if(b)
0042                 MessageHelper::shareWebpage(webCtrl);
0043             else if(webCtrl->sharingMode() == WebpageController::None)
0044                 MessageHelper::closeMedia(webCtrl->uuid(), webCtrl->contentType());
0045         };
0046 
0047         connect(webCtrl, &WebpageController::urlSharingChanged, this, shareWebPage);
0048         connect(webCtrl, &WebpageController::htmlSharingChanged, this, shareWebPage);
0049 
0050         auto updateWebPage= [webCtrl]() {
0051             if(webCtrl->sharingMode() == WebpageController::None || !webCtrl->keepSharing())
0052                 return;
0053             MessageHelper::updateWebpage(webCtrl);
0054         };
0055 
0056         connect(webCtrl, &WebpageController::htmlChanged, this, updateWebPage);
0057         connect(webCtrl, &WebpageController::urlChanged, this, updateWebPage);
0058     }
0059     else
0060     {
0061         m_webPages.insert(webCtrl->uuid(), webCtrl);
0062     }
0063 
0064     connect(webCtrl, &WebpageController::modifiedChanged, this, [webCtrl, this]() {
0065         if(webCtrl->modified())
0066         {
0067             saveMediaController(webCtrl);
0068         }
0069     });
0070 }
0071 
0072 NetWorkReceiver::SendType WebViewUpdater::processMessage(NetworkMessageReader* msg)
0073 {
0074     if(msg->category() == NetMsg::WebPageCategory && msg->action() == NetMsg::UpdateContent)
0075     {
0076         auto uuid= msg->string8();
0077         auto ctrl= m_webPages.value(uuid);
0078         if(!ctrl.isNull())
0079             MessageHelper::readUpdateWebpage(ctrl, msg);
0080     }
0081     return NetWorkReceiver::NONE;
0082 }