[Libreoffice-commits] online.git: common/Util.cpp gtk/main.cpp gtk/Makefile wsd/LOOLWSD.cpp wsd/Storage.cpp
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Tue Oct 16 21:47:54 UTC 2018
common/Util.cpp | 3 +
gtk/Makefile | 37 +++++++++++++++++++
gtk/main.cpp | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
wsd/LOOLWSD.cpp | 13 +++++-
wsd/Storage.cpp | 8 +---
5 files changed, 157 insertions(+), 10 deletions(-)
New commits:
commit 58db979291da40c4016516100873ea97951a6b99
Author: Tor Lillqvist <tml at collabora.com>
AuthorDate: Wed Oct 17 00:40:49 2018 +0300
Commit: Tor Lillqvist <tml at collabora.com>
CommitDate: Wed Oct 17 00:45:35 2018 +0300
Start on a gtk+-based workalike to the iOS app
The idea is that it would work sufficiently identically, so that even
people without a Mac and without an iOS device could participate in
development of the non-iOS-specific bits, like the JavaScript, or the
online MOBILEAPP-specific plumbing. Which would be great.
No, this doesn't do anything sane yet. It does compile the same online
C++ files as the iOS app, though. (Some minor tweaks were needed in a
couple of them to silence gcc warnings.)
There is a plain Makefile, but I should change to using autofoo, too.
Eventually, this will need to be built in a separate tree from a
normal online, just like when using the --enable-iosapp configure
switch. (But for now, doesn't matter.)
Change-Id: I13e4d921acb99d802d2f9da4b0df4a237ca60ad6
diff --git a/common/Util.cpp b/common/Util.cpp
index e6a9aefec..ad510e4f1 100644
--- a/common/Util.cpp
+++ b/common/Util.cpp
@@ -292,6 +292,8 @@ namespace Util
return std::getenv("DISPLAY") != nullptr;
}
+#ifndef MOBILEAPP
+
static const char *startsWith(const char *line, const char *tag)
{
size_t len = strlen(tag);
@@ -306,7 +308,6 @@ namespace Util
return nullptr;
}
-#ifndef MOBILEAPP
std::string getHumanizedBytes(unsigned long nBytes)
{
constexpr unsigned factor = 1024;
diff --git a/gtk/Makefile b/gtk/Makefile
new file mode 100644
index 000000000..cefbeb992
--- /dev/null
+++ b/gtk/Makefile
@@ -0,0 +1,37 @@
+PROGS = mobile
+
+all : $(PROGS)
+
+WARNINGFLAGS = -Wall -Werror -Wno-parentheses -Wno-sign-compare -Wno-unused-variable
+INCLUDEFLAGS = -I../common -I../net -I../kit -I../wsd -I../bundled/include -I.. -I.
+DEFINEFLAGS = -DMOBILEAPP -DLOOLWSD_DATADIR='"/usr/local/share/loolwsd"' -DLOOLWSD_CONFIGDIR='"/usr/local/etc/loolwsd"' -DTOPSRCDIR='"'$(realpath $(PWD)/..)'"'
+
+CFLAGS = -g $(WARNINGFLAGS) `pkg-config --cflags webkit2gtk-4.0` $(INCLUDEFLAGS) $(DEFINEFLAGS)
+CXXFLAGS = $(CFLAGS)
+
+LIBS=`pkg-config --libs webkit2gtk-4.0` -lPocoFoundationd -lPocoUtild -lPocoXMLd -lPocoJSONd -lPocoNetd -lpng -lpthread -ldl
+
+common_OBJS = Unit.o FileUtil.o Log.o MessageQueue.o Protocol.o Session.o SigUtil.o SpookyV2.o Util.o
+kit_OBJS = ChildSession.o Kit.o
+net_OBJS = FakeSocket.o Socket.o
+wsd_OBJS = ClientSession.o DocumentBroker.o LOOLWSD.o Storage.o TileCache.o
+
+mobile_OBJS = main.o $(common_OBJS) $(kit_OBJS) $(net_OBJS) $(wsd_OBJS)
+
+$(common_OBJS) : %.o : ../common/%.cpp
+ $(CXX) $(CXXFLAGS) -c -o $@ $^
+
+$(kit_OBJS) : %.o : ../kit/%.cpp
+ $(CXX) $(CXXFLAGS) -c -o $@ $^
+
+$(net_OBJS) : %.o : ../net/%.cpp
+ $(CXX) $(CXXFLAGS) -c -o $@ $^
+
+$(wsd_OBJS) : %.o : ../wsd/%.cpp
+ $(CXX) $(CXXFLAGS) -c -o $@ $^
+
+mobile : $(mobile_OBJS)
+ $(CXX) -o $@ $(mobile_OBJS) $(LIBS)
+
+clean :
+ rm -f $(PROGS) *.o 2>/dev/null
diff --git a/gtk/main.cpp b/gtk/main.cpp
new file mode 100644
index 000000000..e7dc9f4d6
--- /dev/null
+++ b/gtk/main.cpp
@@ -0,0 +1,106 @@
+// -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*-
+/*
+ * Copyright (C) 2006, 2007 Apple Inc.
+ * Copyright (C) 2007 Alp Toker <alp at atoker.com>
+ * Copyright (C) 2011 Lukasz Slachciak
+ * Copyright (C) 2011 Bob Murphy
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <iostream>
+
+#include <gtk/gtk.h>
+#include <webkit2/webkit2.h>
+
+#include "FakeSocket.hpp"
+#include "Log.hpp"
+#include "LOOLWSD.hpp"
+#include "Util.hpp"
+
+static void destroyWindowCb(GtkWidget* widget, GtkWidget* window);
+static gboolean closeWebViewCb(WebKitWebView* webView, GtkWidget* window);
+
+int loolwsd_server_socket_fd;
+
+int main(int argc, char* argv[])
+{
+ Log::initialize("Mobile", "trace", false, false, {});
+ Util::setThreadName("main");
+ fakeSocketSetLoggingCallback([](const std::string& line)
+ {
+ LOG_TRC_NOFILE(line);
+ });
+
+ // Initialize GTK+
+ gtk_init(&argc, &argv);
+
+ // Create an 800x600 window that will contain the browser instance
+ GtkWidget *main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_default_size(GTK_WINDOW(main_window), 800, 600);
+
+ // Create a "user content manager"
+ WebKitUserContentManager *userContentManager = WEBKIT_USER_CONTENT_MANAGER(webkit_user_content_manager_new());
+
+ // Create a browser instance
+ WebKitWebView *webView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_user_content_manager(userContentManager));
+
+ // Put the browser area into the main window
+ gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(webView));
+
+ // Set up callbacks so that if either the main window or the browser instance is
+ // closed, the program will exit
+ g_signal_connect(main_window, "destroy", G_CALLBACK(destroyWindowCb), NULL);
+ g_signal_connect(webView, "close", G_CALLBACK(closeWebViewCb), main_window);
+
+ // Load a web page into the browser instance
+ webkit_web_view_load_uri(webView,
+ "file://" TOPSRCDIR "/loleaflet/dist/loleaflet.html"
+ "?file_path=" TOPSRCDIR "/test/data/hello-world.odt"
+ "&closebutton=1"
+ "&permission=edit"
+ "&debug=true");
+
+ // Make sure that when the browser area becomes visible, it will get mouse
+ // and keyboard events
+ gtk_widget_grab_focus(GTK_WIDGET(webView));
+
+ // Make sure the main window and all its contents are visible
+ gtk_widget_show_all(main_window);
+
+ // Run the main GTK+ event loop
+ gtk_main();
+
+ return 0;
+}
+
+
+static void destroyWindowCb(GtkWidget* widget, GtkWidget* window)
+{
+ gtk_main_quit();
+}
+
+static gboolean closeWebViewCb(WebKitWebView* webView, GtkWidget* window)
+{
+ gtk_widget_destroy(window);
+ return TRUE;
+}
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index e65fbd282..df69c7152 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -133,8 +133,12 @@ using Poco::Net::PartHandler;
#include <ServerSocket.hpp>
+#ifdef MOBILEAPP
#ifdef IOS
#include "ios.h"
+#else
+#include "gtk.h"
+#endif
#endif
using namespace LOOLProtocol;
@@ -262,11 +266,11 @@ inline void checkSessionLimitsAndWarnClients()
#endif
}
+#ifndef MOBILEAPP
/// Internal implementation to alert all clients
/// connected to any document.
void alertAllUsersInternal(const std::string& msg)
{
-#ifndef MOBILEAPP
std::lock_guard<std::mutex> docBrokersLock(DocBrokersMutex);
@@ -280,8 +284,8 @@ void alertAllUsersInternal(const std::string& msg)
std::shared_ptr<DocumentBroker> docBroker = brokerIt.second;
docBroker->addCallback([msg, docBroker](){ docBroker->alertAllUsers(msg); });
}
-#endif
}
+#endif
static void checkDiskSpaceAndWarnClients(const bool cacheLastCheck)
{
@@ -1068,7 +1072,6 @@ void LOOLWSD::initialize(Application& self)
docProcSettings.LimitFileSizeMb = getConfigValue<int>("per_document.limit_file_size_mb", 0);
docProcSettings.LimitNumberOpenFiles = getConfigValue<int>("per_document.limit_num_open_files", 0);
Admin::instance().setDefDocProcSettings(docProcSettings, false);
-#endif
#if ENABLE_DEBUG
std::cerr << "\nLaunch one of these in your browser:\n\n"
@@ -1082,6 +1085,8 @@ void LOOLWSD::initialize(Application& self)
std::cerr << "\nOr for the Admin Console:\n\n"
<< adminURI << '\n' << std::endl;
#endif
+
+#endif
}
void LOOLWSD::initializeSSL()
@@ -2991,7 +2996,9 @@ int LOOLWSD::innerMain()
std::cerr << "Ready to accept connections on port " << ClientPortNumber << ".\n" << std::endl;
#endif
+#ifndef MOBILEAPP
const auto startStamp = std::chrono::steady_clock::now();
+#endif
while (!TerminationFlag && !ShutdownRequestFlag)
{
diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp
index 951fe31d0..96fa903fb 100644
--- a/wsd/Storage.cpp
+++ b/wsd/Storage.cpp
@@ -354,11 +354,11 @@ StorageBase::SaveResult LocalStorage::saveLocalFileToStorage(const Authorization
return StorageBase::SaveResult(StorageBase::SaveResult::OK);
}
+#ifndef MOBILEAPP
+
namespace
{
-#ifndef MOBILEAPP
-
inline
Poco::Net::HTTPClientSession* getHTTPClientSession(const Poco::URI& uri)
{
@@ -370,8 +370,6 @@ Poco::Net::HTTPClientSession* getHTTPClientSession(const Poco::URI& uri)
: new Poco::Net::HTTPClientSession(uri.getHost(), uri.getPort());
}
-#endif
-
void addStorageDebugCookie(Poco::Net::HTTPRequest& request)
{
(void) request;
@@ -411,8 +409,6 @@ Poco::Timestamp iso8601ToTimestamp(const std::string& iso8601Time, const std::st
} // anonymous namespace
-#ifndef MOBILEAPP
-
std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Authorization& auth)
{
// update the access_token to the one matching to the session
More information about the Libreoffice-commits
mailing list