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 }