Merge webextension into main.
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
commit
e84c774683
|
@ -1 +1,2 @@
|
||||||
/build/
|
/build/
|
||||||
|
*.zip
|
||||||
|
|
|
@ -6,6 +6,7 @@ project(remwharead
|
||||||
|
|
||||||
set(WITH_MAN "YES" CACHE STRING "WITH_MAN defaults to \"YES\"")
|
set(WITH_MAN "YES" CACHE STRING "WITH_MAN defaults to \"YES\"")
|
||||||
set(WITH_TESTS "NO" CACHE STRING "WITH_TESTS defaults to \"NO\"")
|
set(WITH_TESTS "NO" CACHE STRING "WITH_TESTS defaults to \"NO\"")
|
||||||
|
set(WITH_MOZILLA "NO" CACHE STRING "WITH_MOZILLA defaults to \"NO\"")
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
find_package(PkgConfig REQUIRED)
|
find_package(PkgConfig REQUIRED)
|
||||||
|
@ -63,6 +64,10 @@ if (WITH_MAN)
|
||||||
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (WITH_MOZILLA)
|
||||||
|
add_subdirectory(browser-plugins/webextension/native-wrapper)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WITH_TESTS)
|
if(WITH_TESTS)
|
||||||
add_library(${PROJECT_NAME}_testlib SHARED ${sources})
|
add_library(${PROJECT_NAME}_testlib SHARED ${sources})
|
||||||
target_link_libraries(${PROJECT_NAME}_testlib ${COMMON_LIBRARIES})
|
target_link_libraries(${PROJECT_NAME}_testlib ${COMMON_LIBRARIES})
|
||||||
|
|
|
@ -96,6 +96,7 @@ cmake --build .
|
||||||
* `-DCMAKE_BUILD_TYPE=Debug` for a debug build.
|
* `-DCMAKE_BUILD_TYPE=Debug` for a debug build.
|
||||||
* `-DWITH_MAN=NO` to not compile the manpage.
|
* `-DWITH_MAN=NO` to not compile the manpage.
|
||||||
* `WITH_TESTS=YES` to compile the tests.
|
* `WITH_TESTS=YES` to compile the tests.
|
||||||
|
* `WITH_MOZILLA=YES` to install the helper script for the Mozilla extension.
|
||||||
* One of:
|
* One of:
|
||||||
** `-DWITH_DEB=YES` if you want to be able to generate a deb-package.
|
** `-DWITH_DEB=YES` if you want to be able to generate a deb-package.
|
||||||
** `-DWITH_RPM=YES` if you want to be able to generate an rpm-package.
|
** `-DWITH_RPM=YES` if you want to be able to generate an rpm-package.
|
||||||
|
@ -105,6 +106,10 @@ You can run the tests with `ctest` inside the build directory. Install with
|
||||||
|
|
||||||
== Copyright
|
== Copyright
|
||||||
|
|
||||||
|
The icons of the plugins are from the
|
||||||
|
https://github.com/PapirusDevelopmentTeam/papirus-icon-theme[Papirus icon
|
||||||
|
theme] with the license GPLv3.
|
||||||
|
|
||||||
----
|
----
|
||||||
Copyright © 2019 tastytea <tastytea@tastytea.de>.
|
Copyright © 2019 tastytea <tastytea@tastytea.de>.
|
||||||
License GPLv3: GNU GPL version 3 <https://www.gnu.org/licenses/gpl-3.0.html>.
|
License GPLv3: GNU GPL version 3 <https://www.gnu.org/licenses/gpl-3.0.html>.
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<label for="tags">Tags, comma separated:</label>
|
||||||
|
<input type="text" id="tags" autofocus>
|
||||||
|
<input type="button" id="button" value="Add URI">
|
||||||
|
<strong id="error"></strong>
|
||||||
|
|
||||||
|
<script src="launch.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
zip -r -FS ../remwharead.zip * --exclude 'native-wrapper/*' --exclude build_package.sh
|
|
@ -0,0 +1,3 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||||
|
<path style="fill:#dfdfdf" d="M 4,0 C 4,0 3,0 3,1 V 15 L 8,12 13,15 V 1 C 13,1 13,0 12,0 Z M 7,3 H 9 V 5 H 11 V 7 H 9 V 9 H 7 V 7 H 5 V 5 H 7 Z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 233 B |
|
@ -0,0 +1,3 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||||
|
<path style="fill:#444444" d="M 4,0 C 4,0 3,0 3,1 V 15 L 8,12 13,15 V 1 C 13,1 13,0 12,0 Z M 7,3 H 9 V 5 H 11 V 7 H 9 V 9 H 7 V 7 H 5 V 5 H 7 Z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 233 B |
|
@ -0,0 +1,61 @@
|
||||||
|
var taburl;
|
||||||
|
var port;
|
||||||
|
|
||||||
|
function set_taburl(tabs) // Set taburl to URL of current tab.
|
||||||
|
{
|
||||||
|
let tab = tabs[0];
|
||||||
|
taburl = tab.url;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_tags() // get tags from text input.
|
||||||
|
{
|
||||||
|
let tags = document.getElementById("tags").value;
|
||||||
|
if (tags != "")
|
||||||
|
{
|
||||||
|
return "-t " + tags + " ";
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
function onResponse(response) {
|
||||||
|
console.log("Received: " + response);
|
||||||
|
if (response == "Command successful.")
|
||||||
|
{
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
document.getElementById("error").textContent = response;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function onError(error) {
|
||||||
|
console.log(`Error: ${error}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
function launch() // Launch wrapper and send tags + URL to stdin.
|
||||||
|
{
|
||||||
|
var arguments = get_tags() + taburl;
|
||||||
|
console.log("Sending: " + arguments + " to remwharead");
|
||||||
|
var sending = browser.runtime.sendNativeMessage("remwharead", arguments);
|
||||||
|
sending.then(onResponse, onError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Call set_taburl() with current tab.
|
||||||
|
browser.tabs.query({currentWindow: true, active: true}).then(set_taburl);
|
||||||
|
|
||||||
|
button.addEventListener("click", launch); // Call send() if submit is clicked.
|
||||||
|
|
||||||
|
// Click button if enter is hit in text input.
|
||||||
|
document.querySelector("#tags").addEventListener(
|
||||||
|
"keyup", event =>
|
||||||
|
{
|
||||||
|
if(event.key !== "Enter")
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
document.querySelector("#button").click();
|
||||||
|
event.preventDefault();
|
||||||
|
});
|
|
@ -0,0 +1,54 @@
|
||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "remwharead",
|
||||||
|
"version": "0.2.0",
|
||||||
|
|
||||||
|
"description": "Integrates remwharead into your Browser.",
|
||||||
|
"homepage_url": "https://schlomp.space/tastytea/remwharead",
|
||||||
|
|
||||||
|
"icons":
|
||||||
|
{
|
||||||
|
"16": "icon_dark.svg"
|
||||||
|
},
|
||||||
|
|
||||||
|
"applications":
|
||||||
|
{
|
||||||
|
"gecko":
|
||||||
|
{
|
||||||
|
"id": "remwharead@tastytea.de",
|
||||||
|
"strict_min_version": "57.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"permissions":
|
||||||
|
[
|
||||||
|
"activeTab",
|
||||||
|
"nativeMessaging"
|
||||||
|
],
|
||||||
|
|
||||||
|
"browser_action":
|
||||||
|
{
|
||||||
|
"default_title": "remwharead",
|
||||||
|
"default_popup": "add_uri.html",
|
||||||
|
"browser_style": true,
|
||||||
|
"default_icon": "icon_dark.svg",
|
||||||
|
"theme_icons":
|
||||||
|
[{ // Dark means dark text in Firefox. 🙄
|
||||||
|
"dark": "icon_light.svg",
|
||||||
|
"light": "icon_dark.svg",
|
||||||
|
"size": 16
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
|
||||||
|
"commands":
|
||||||
|
{
|
||||||
|
"open_popup":
|
||||||
|
{
|
||||||
|
"suggested_key":
|
||||||
|
{
|
||||||
|
"default": "Ctrl+Shift+S"
|
||||||
|
},
|
||||||
|
"description": "Add URI to remwharead."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
set(MOZILLA_NMH_DIR "${CMAKE_INSTALL_LIBDIR}/mozilla/native-messaging-hosts")
|
||||||
|
|
||||||
|
add_executable(${PROJECT_NAME}_wrapper ${PROJECT_NAME}_wrapper.cpp)
|
||||||
|
|
||||||
|
install(TARGETS ${PROJECT_NAME}_wrapper DESTINATION ${MOZILLA_NMH_DIR})
|
||||||
|
install(FILES remwharead.json remwharead_wrapper.sh
|
||||||
|
DESTINATION ${MOZILLA_NMH_DIR})
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"name": "remwharead",
|
||||||
|
"description": "Saves URIs of things you want to remember in a database.",
|
||||||
|
"path": "/usr/lib/mozilla/native-messaging-hosts/remwharead_wrapper",
|
||||||
|
"type": "stdio",
|
||||||
|
"allowed_extensions": [ "remwharead@tastytea.de" ]
|
||||||
|
}
|
|
@ -0,0 +1,91 @@
|
||||||
|
/* This file is part of remwharead.
|
||||||
|
* Copyright © 2019 tastytea <tastytea@tastytea.de>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
|
||||||
|
using std::string;
|
||||||
|
using std::cin;
|
||||||
|
using std::cout;
|
||||||
|
using std::uint32_t;
|
||||||
|
using std::system;
|
||||||
|
|
||||||
|
const string read_input()
|
||||||
|
{
|
||||||
|
string input;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
bool start = false;
|
||||||
|
while (cin.read(&c, 1).good())
|
||||||
|
{
|
||||||
|
if (!start)
|
||||||
|
{
|
||||||
|
if (c == '"')
|
||||||
|
{
|
||||||
|
start = true;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (c != '"')
|
||||||
|
{
|
||||||
|
input += c;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
void send_message(const string &message)
|
||||||
|
{
|
||||||
|
uint32_t length = message.length() + 2;
|
||||||
|
cout.write(reinterpret_cast<const char*>(&length), sizeof(length));
|
||||||
|
cout << '"' << message << '"';
|
||||||
|
}
|
||||||
|
|
||||||
|
int launch(const string &args)
|
||||||
|
{
|
||||||
|
const string cmd = "remwharead " + args + " 2>/dev/null";
|
||||||
|
int ret = system(cmd.c_str());
|
||||||
|
if (WIFEXITED(ret))
|
||||||
|
{
|
||||||
|
ret = WEXITSTATUS(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
const string args = read_input();
|
||||||
|
int ret = launch(args);
|
||||||
|
|
||||||
|
if (ret == 0)
|
||||||
|
{
|
||||||
|
send_message("Command successful.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
send_message("Command failed with status: " + std::to_string(ret) + '.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
Loading…
Reference in New Issue