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: I13e4d921acb99d802d2f9da4b0df4a237ca60ad6private/kendy/mobile
parent
e9d0b38103
commit
58db979291
|
@ -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;
|
||||
|
|
|
@ -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
|
|
@ -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@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;
|
||||
}
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue