Compare commits

..

6 commits

Author SHA1 Message Date
Artem Anufrij
e94475cbb0
Merge pull request #145 from thejdev/master
Add flatpak manifest file
2021-08-29 00:22:20 +02:00
Jaidev
2abc8ad80d Add flatpak manifest file 2021-08-25 12:54:19 +00:00
Artem Anufrij
0d4c58582f prepare for new release 2021-03-24 12:48:02 +01:00
Artem Anufrij
69f79420dc remove Ctrl+Q 2020-11-17 23:05:02 +01:00
Artem Anufrij
5a4f114083 fix 0 issue fix #136 2020-11-17 23:02:40 +01:00
Artem Anufrij
88f318cde9 fixed icon and color fetching 2020-11-17 22:51:28 +01:00
6 changed files with 337 additions and 27 deletions

View file

@ -0,0 +1,31 @@
# This is the same ID that you've used in meson.build and other files
app-id: com.github.artemanufrij.webpin
# Instead of manually specifying a long list of build and runtime dependencies,
# we can use a convenient pre-made runtime and SDK. For this example, we'll be
# using the runtime and SDK provided by elementary.
runtime: io.elementary.Platform
runtime-version: '6'
sdk: io.elementary.Sdk
# This should match the exec line in your .desktop file and usually is the same
# as your app ID
command: com.github.artemanufrij.webpin
# Here we can specify the kinds of permissions our app needs to run. Since we're
# not using hardware like webcams, making sound, or reading external files, we
# only need permission to draw our app on screen using either X11 or Wayland.
finish-args:
- '--share=ipc'
- '--socket=fallback-x11'
- '--socket=wayland'
# This section is where you list all the source code required to build your app.
# If we had external dependencies that weren't included in our SDK, we would list
# them here.
modules:
- name: webpin
buildsystem: meson
sources:
- type: dir
path: .

View file

@ -33,6 +33,24 @@
</screenshot> </screenshot>
</screenshots> </screenshots>
<releases> <releases>
<release version="1.0.5" date="2021-03-24">
<description>
<p>New:</p>
<ul>
<li>Gesture navigation (by Cassidy James Blaede)</li>
</ul>
<p>Fixed:</p>
<ul>
<li>Crash when press '0'</li>
<li>Some improvements by Nathan Bonnemains</li>
</ul>
<p>Translation:</p>
<ul>
<li>Polish (by Michał Nowakowski)</li>
<li>French (by Nathan Bonnemains)</li>
</ul>
</description>
</release>
<release version="1.0.4" date="2019-07-15"> <release version="1.0.4" date="2019-07-15">
<description> <description>
<p>New:</p> <p>New:</p>

View file

@ -0,0 +1,272 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2017 Artem Anufrij <artem.anufrij@live.de> -->
<component type="desktop">
<id>com.github.artemanufrij.webpin</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-3.0+</project_license>
<name>Webpin</name>
<summary>A simple app to pin websites on the desktop</summary>
<description>
<p>Create your own WebApps. Pin your any favorite website on Applications Menu or Plank like a regular desktop app.</p>
<p>Webpin is a fork of Webby (by Erasmo Marín).</p>
</description>
<categories>
<category>Utility</category>
<category>Network</category>
</categories>
<custom>
<value key="x-appcenter-color-primary">#399cd2</value>
<value key="x-appcenter-color-primary-text">rgb(255,255,255)</value>
<value key="x-appcenter-suggested-price">1</value>
</custom>
<developer_name>Artem Anufrij</developer_name>
<url type="homepage">https://artemanufrij.github.io</url>
<url type="bugtracker">https://github.com/artemanufrij/webpin/issues</url>
<url type="help">https://github.com/artemanufrij/webpin/issues</url>
<update_contact>artem.anufrij@live.de</update_contact>
<screenshots>
<screenshot type="default">
<image>https://raw.githubusercontent.com/artemanufrij/webpin/master/screenshots/Screenshot.png</image>
</screenshot>
<screenshot>
<image>https://raw.githubusercontent.com/artemanufrij/webpin/master/screenshots/Screenshot_new_app.png</image>
</screenshot>
</screenshots>
<releases>
<release version="1.0.4" date="2019-07-15">
<description>
<p>New:</p>
<ul>
<li>Enable Media Source Extensions (by Cassidy James Blaede)</li>
</ul>
<p>Translation:</p>
<ul>
<li>Dutch (by Heimen Stoffels)</li>
<li>Spanish (by Manueljlin)</li>
<li>Lithuanian (by welaq)</li>
</ul>
</description>
</release>
<release version="1.0.3" date="2018-11-18">
<description>
<p>New:</p>
<ul>
<li>Theme switcher</li>
<li>Option for minimal UI</li>
</ul>
<p>Improved:</p>
<ul>
<li>Cache choosed icon instead to reference it</li>
</ul>
</description>
</release>
<release version="1.0.2" date="2018-11-02">
<description>
<p>New:</p>
<ul>
<li>Sort items inside app overview</li>
</ul>
<p>Fixed:</p>
<ul>
<li>Custom icon was replaced by default one</li>
</ul>
</description>
</release>
<release version="1.0.1" date="2018-10-30">
<description>
<p>New:</p>
<ul>
<li>Navigation buttons</li>
</ul>
</description>
</release>
<release version="1.0.0" date="2018-10-20">
<description>
<p>New:</p>
<ul>
<li>Moved to Meson</li>
<li>Support for local .html files</li>
</ul>
<p>Fixed:</p>
<ul>
<li>Restore correct window size</li>
<li>Grabing page icon</li>
</ul>
<p>Translation:</p>
<ul>
<li>Dutch (by Heimen Stoffels)</li>
</ul>
</description>
</release>
<release version="0.3.0" date="2018-07-24">
<description>
Prepare for JUNO
</description>
</release>
<release version="0.2.10" date="2018-04-25">
<description>
<p>Fixed:</p>
<ul>
<li>Restore window position for hidden apps</li>
</ul>
</description>
</release>
<release version="0.2.9" date="2018-03-10">
<description>
<p>Improved:</p>
<ul>
<li>Desktop Action Menu</li>
<li>Small UI fixes</li>
</ul>
</description>
</release>
<release version="0.2.8" date="2018-02-12">
<description>
<p>New:</p>
<ul>
<li>back/forward navigation by mouse buttons (8/9) (Thanks to Julian Raschke)</li>
</ul>
<p>Improved:</p>
<ul>
<li>favicon fetching</li>
</ul>
</description>
</release>
<release version="0.2.6" date="2018-02-05">
<description>
<p>New:</p>
<ul>
<li>Save and restore window position</li>
<li>Grab favorite icon</li>
</ul>
<p>Fix:</p>
<ul>
<li>Grab website color</li>
</ul>
</description>
</release>
<release version="0.2.5" date="2017-12-17">
<description>
<p>Translation:</p>
<ul>
<li>Russian (by Camellan)</li>
<li>Lithuanian (by welaq)</li>
</ul>
</description>
</release>
<release version="0.2.4" date="2017-11-27">
<description>
<p>New:</p>
<ul>
<li>Option for Dark Theme</li>
<li>Grab 'theme-color' (if exists) from called website</li>
</ul>
</description>
</release>
<release version="0.2.3" date="2017-11-20">
<description>
<p>Fix:</p>
<ul>
<li>Custom settings in .desktop</li>
</ul>
</description>
</release>
<release version="0.2.2" date="2017-11-20">
<description>
<p>Fix:</p>
<ul>
<li>Custom settings in .desktop</li>
</ul>
</description>
</release>
<release version="0.2.1" date="2017-11-18">
<description>
<p>Fix:</p>
<ul>
<li>Set custom color</li>
</ul>
</description>
</release>
<release version="0.1.13" date="2017-11-18">
<description>
<p>Fix:</p>
<ul>
<li>Desktop icon name</li>
</ul>
</description>
</release>
<release version="0.1.12" date="2017-11-13">
<description>
<p>Fix:</p>
<ul>
<li>Set custom color for headerbar</li>
</ul>
</description>
</release>
<release version="0.1.11" date="2017-11-13">
<description>
<p>Fix:</p>
<ul>
<li>Set custom color for headerbar</li>
</ul>
</description>
</release>
<release version="0.1.10" date="2017-11-11">
<description>
<p>New:</p>
<ul>
<li>Set custom color for headerbar</li>
</ul>
<p>Fix:</p>
<ul>
<li>Open application on clicking desktop notification</li>
</ul>
<p>Translation:</p>
<ul>
<li>Lithuanian (by welaq)</li>
</ul>
</description>
</release>
<release version="0.1.9" date="2017-10-15">
<description>
<p>New:</p>
<ul>
<li>Copy current URI into clipboard</li>
</ul>
<p>Fix:</p>
<ul>
<li>Open WebApp on single click instead double click</li>
</ul>
</description>
</release>
</releases>
<content_rating type="oars-1.1">
<content_attribute id="violence-cartoon">none</content_attribute>
<content_attribute id="violence-fantasy">none</content_attribute>
<content_attribute id="violence-realistic">none</content_attribute>
<content_attribute id="violence-bloodshed">none</content_attribute>
<content_attribute id="violence-sexual">none</content_attribute>
<content_attribute id="violence-desecration">none</content_attribute>
<content_attribute id="violence-slavery">none</content_attribute>
<content_attribute id="violence-worship">none</content_attribute>
<content_attribute id="drugs-alcohol">none</content_attribute>
<content_attribute id="drugs-narcotics">none</content_attribute>
<content_attribute id="drugs-tobacco">none</content_attribute>
<content_attribute id="sex-nudity">none</content_attribute>
<content_attribute id="sex-themes">none</content_attribute>
<content_attribute id="sex-homosexuality">none</content_attribute>
<content_attribute id="sex-prostitution">none</content_attribute>
<content_attribute id="sex-adultery">none</content_attribute>
<content_attribute id="sex-appearance">none</content_attribute>
<content_attribute id="language-profanity">none</content_attribute>
<content_attribute id="language-humor">none</content_attribute>
<content_attribute id="language-discrimination">none</content_attribute>
<content_attribute id="social-chat">none</content_attribute>
<content_attribute id="social-info">none</content_attribute>
<content_attribute id="social-audio">none</content_attribute>
<content_attribute id="social-location">none</content_attribute>
<content_attribute id="social-contacts">none</content_attribute>
<content_attribute id="money-purchasing">none</content_attribute>
<content_attribute id="money-gambling">none</content_attribute>
</content_rating>
</component>

View file

@ -46,18 +46,6 @@ namespace Webpin {
construct { construct {
this.flags |= GLib.ApplicationFlags.HANDLES_OPEN; this.flags |= GLib.ApplicationFlags.HANDLES_OPEN;
this.flags |= ApplicationFlags.HANDLES_COMMAND_LINE; this.flags |= ApplicationFlags.HANDLES_COMMAND_LINE;
var action_quit = new SimpleAction ("quit", null);
add_action (action_quit);
string[] accel_quit = {"<Control>q", "0"};
set_accels_for_action ("app.quit", accel_quit);
action_quit.activate.connect (
() => {
if (mainwindow != null) {
mainwindow.destroy ();
}
});
create_cache_folders (); create_cache_folders ();
} }

View file

@ -65,8 +65,6 @@ namespace Webpin.Widgets {
enable_webgl = true enable_webgl = true
} }
}; };
web_view.web_context.set_spell_checking_enabled(true);
web_view.web_context.set_spell_checking_languages({"en_US", "de_DE"});
cookie_manager = web_view.web_context.get_cookie_manager (); cookie_manager = web_view.web_context.get_cookie_manager ();
cookie_manager.set_accept_policy (WebKit.CookieAcceptPolicy.ALWAYS); cookie_manager.set_accept_policy (WebKit.CookieAcceptPolicy.ALWAYS);

View file

@ -232,17 +232,17 @@ namespace Webpin.Widgets.Views {
if (msg.status_code == 200) { if (msg.status_code == 200) {
var body = (string)msg.response_body.data; var body = (string)msg.response_body.data;
Regex regex = null; Regex regex = null;
try { try {
regex = new Regex ("(?<=<meta name=\"theme-color\" content=\")#[0-9a-fA-F]{6}"); regex = new Regex ("(?<=theme-color).*((?<=content=)\"?(#[0-9a-fA-F]*))");
} catch (Error err) { } catch (Error err) {
warning (err.message); warning (err.message);
} }
MatchInfo match_info = null; MatchInfo match_info = null;
if (regex != null && regex.match (body, 0, out match_info)) { if (regex != null && regex.match (body, 0, out match_info)) {
var result = match_info.fetch (0); var result = match_info.fetch (match_info.get_match_count () - 1);
stdout.printf("color: %s\n", result);
Gdk.RGBA return_value = {0, 0, 0, 1}; Gdk.RGBA return_value = {0, 0, 0, 1};
if (return_value.parse (result)) { if (return_value.parse (result)) {
Idle.add ( Idle.add (
@ -252,12 +252,12 @@ namespace Webpin.Widgets.Views {
}); });
} }
} }
var icon_path = "";
if (tmp_icon_file == "") { if (tmp_icon_file == "") {
try { try {
regex = new Regex ("(?<=\"fluid-icon\" href=\")[/\\w\\.:\\-]*"); regex = new Regex ("(?<=\"fluid-icon\" href=\")[/\\w\\.:\\-]*");
if (regex.match (body, 0, out match_info)) { if (regex.match (body, 0, out match_info)) {
var icon_path = format_icon_path (url, match_info.fetch (0)); icon_path = format_icon_path (url, match_info.fetch (0));
download_icon (icon_path); download_icon (icon_path);
} }
} catch (Error err) { } catch (Error err) {
@ -267,9 +267,9 @@ namespace Webpin.Widgets.Views {
if (tmp_icon_file == "") { if (tmp_icon_file == "") {
try { try {
regex = new Regex ("(rel=\"icon\").*href=\"([\\-/\\w]*64.png)"); regex = new Regex ("(?<=rel=icon)[\\w\\+\\/=\\s]*(?<=href=)([\\w\\+\\/=\\.)]*64\\.(svg|png))");
if (regex.match (body, 0, out match_info)) { if (regex.match (body, 0, out match_info)) {
var icon_path = format_icon_path (url, match_info.fetch (match_info.get_match_count () - 1)); icon_path = format_icon_path (url, match_info.fetch (match_info.get_match_count () - 2));
download_icon (icon_path); download_icon (icon_path);
} }
} catch (Error err) { } catch (Error err) {
@ -279,9 +279,9 @@ namespace Webpin.Widgets.Views {
if (tmp_icon_file == "") { if (tmp_icon_file == "") {
try { try {
regex = new Regex ("(rel=\"icon\").*href=\"([\\-/\\w]*96.png)"); regex = new Regex ("(?<=rel=icon)[\\w\\+\\/=\\s]*(?<=href=)([\\w\\+\\/=\\.)]*96\\.(svg|png))");
if (regex.match (body, 0, out match_info)) { if (regex.match (body, 0, out match_info)) {
var icon_path = format_icon_path (url, match_info.fetch (match_info.get_match_count () - 1)); icon_path = format_icon_path (url, match_info.fetch (match_info.get_match_count () - 1));
download_icon (icon_path); download_icon (icon_path);
} }
} catch (Error err) { } catch (Error err) {
@ -293,7 +293,7 @@ namespace Webpin.Widgets.Views {
try { try {
regex = new Regex ("(\"apple-touch-icon\").*href=\"([\\-/\\w]*.png)"); regex = new Regex ("(\"apple-touch-icon\").*href=\"([\\-/\\w]*.png)");
if (regex.match (body, 0, out match_info)) { if (regex.match (body, 0, out match_info)) {
var icon_path = format_icon_path (url, match_info.fetch (match_info.get_match_count () - 1)); icon_path = format_icon_path (url, match_info.fetch (match_info.get_match_count () - 1));
download_icon (icon_path); download_icon (icon_path);
} }
} catch (Error err) { } catch (Error err) {
@ -305,7 +305,7 @@ namespace Webpin.Widgets.Views {
try { try {
regex = new Regex ("(?<=\"mask-icon\" href=\")[/\\w\\.:\\-]*"); regex = new Regex ("(?<=\"mask-icon\" href=\")[/\\w\\.:\\-]*");
if (regex.match (body, 0, out match_info)) { if (regex.match (body, 0, out match_info)) {
var icon_path = format_icon_path (url, match_info.fetch (0)); icon_path = format_icon_path (url, match_info.fetch (0));
download_icon (icon_path); download_icon (icon_path);
} }
} catch (Error err) { } catch (Error err) {
@ -363,6 +363,9 @@ namespace Webpin.Widgets.Views {
tmp_icon_file = GLib.Path.build_filename (Environment.get_tmp_dir (), Random.next_int ().to_string () + tmp_icon_ext); tmp_icon_file = GLib.Path.build_filename (Environment.get_tmp_dir (), Random.next_int ().to_string () + tmp_icon_ext);
stdout.printf("source: %s\n", url);
stdout.printf("destination: %s\n", tmp_icon_file);
var s_file = File.new_for_uri (url); var s_file = File.new_for_uri (url);
var d_file = File.new_for_path (tmp_icon_file); var d_file = File.new_for_path (tmp_icon_file);
@ -370,7 +373,7 @@ namespace Webpin.Widgets.Views {
try { try {
copy_done = s_file.copy (d_file, FileCopyFlags.OVERWRITE); copy_done = s_file.copy (d_file, FileCopyFlags.OVERWRITE);
} catch (Error err) { } catch (Error err) {
warning (err.message); stdout.printf ("%s\n", err.message);
} }
if (copy_done && tmp_icon_ext != ".svg") { if (copy_done && tmp_icon_ext != ".svg") {
try { try {