diff --git a/README.md b/README.md index f0955b74e..cb9b70c9a 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,9 @@ ![Screenshot](data/communique-light-screenshot.png) ![Screenshot](data/communique-dark-screenshot.png) +![Screenshot](data/communique-fullscreen-screenshot.png) +![Screenshot](data/communique-shortcuts.png) +![Screenshot](data/communique-preferences.png) ## Your personal journalist Subscribe to and read RSS/Atom feeds with cross-platform synchronization. Communique is a feed reader with support for a lot of RSS services, like Feedbin, Tiny Tiny RSS, Nextcloud News etc. And ofcourse, you can use Communique to subscribe to and read RSS feeds locally, without logging in to anything. diff --git a/data/ArticleView/style.css b/data/ArticleView/style.css index 3d70a4495..c411f8cdb 100644 --- a/data/ArticleView/style.css +++ b/data/ArticleView/style.css @@ -146,7 +146,7 @@ body { } .tlgrey { - background-color: #eee; + background-color: #d4d4d4; } h1, @@ -410,76 +410,6 @@ figure { border: none; } -/* MIDNIGHT THEME */ - -body.theme.midnight { - color: rgba(255, 255, 255, 0.6); - background: #233540; -} - -body.theme.midnight pre, -body.theme.midnight pre code, -body.theme.midnight code { - background-color: rgba(255, 255, 255, 0.6); - color: #233540; -} - -body.theme.midnight table, -body.theme.midnight th, -body.theme.midnight td { - border: 1px solid rgba(255, 255, 255, 0.6); -} - -body.theme.midnight div.frcontent th, -body.theme.midnight header.post { - background: rgba(0, 0, 0, 0.1); -} - -body.theme.midnight header.post h1 { - color: #fff; -} - -body.theme.midnight header.post h1 a { - color: #9BA6AC; -} - -body.theme.midnight header.post span.source { - color: #2978a6; -} - -body.theme.midnight header.post span.author { - color: rgba(255, 255, 255, 0.6); -} - -body.theme.midnight div.frcontent { - border: 1px solid rgba(0, 0, 0, 0.1); -} - -body.theme.midnight div.frcontent a { - color: #2978a6; -} - -body.theme.midnight div.frcontent h1, -body.theme.midnight div.frcontent h2, -body.theme.midnight div.frcontent h3, -body.theme.midnight div.frcontent h4 { - color: #2978a6; -} - -body.theme.midnight div.frcontent h2 { - border-color: #2978a6; -} - -body.theme.midnight div.frcontent body, -body.theme.midnight div.frcontent ul, -body.theme.midnight div.frcontent figcaption, -body.theme.midnight div.frcontent h5, -body.theme.midnight div.frcontent h6, -body.theme.midnight div.frcontent p { - color: rgba(255, 255, 255, 0.6); - text-align: justify; -} - /* LIGHT THEME */ body.theme.spring { @@ -495,9 +425,9 @@ body.theme.gruvbox p { body.theme.spring pre, body.theme.spring pre code, body.theme.spring code { - background-color: #fafafa; - color: #000000; - font-family: 'FuraCode Nerd Font', 'Fira Code', 'Fira Mono', monospace, Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, serif; + background-color: #e2e2e2; + color: #1a1a1a; + font-family: 'FuraCode Nerd Font', 'Fira Code', 'Fira Mono', monospace, Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, serif, Roboto Mono; } body.theme.spring table, @@ -550,9 +480,9 @@ body.theme.gruvbox p { body.theme.gruvbox pre, body.theme.gruvbox pre code, body.theme.gruvbox code { - background-color: #333333; - color: #fafafa; - font-family: 'FuraCode Nerd Font', 'Fira Code', 'Fira Mono', monospace, Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, serif; + background-color: #2b2b2b; + color: #d4d4d4; + font-family: 'FuraCode Nerd Font', 'Fira Code', 'Fira Mono', monospace, Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, serif, Roboto Mono; } body.theme.gruvbox table, diff --git a/data/com.github.suzie97.communique-autostart.desktop.in b/data/com.github.suzie97.communique-autostart.desktop.in index c16195e6a..268820c53 100755 --- a/data/com.github.suzie97.communique-autostart.desktop.in +++ b/data/com.github.suzie97.communique-autostart.desktop.in @@ -2,7 +2,7 @@ Name=Communique Autostart GenericName=RSS Client Comment=Read RSS/Atom Feeds -Categories=Network;Feed; +Categories=Network;Feed;News; Exec=com.github.suzie97.communique --background Icon=com.github.suzie97.communique Terminal=false diff --git a/data/com.github.suzie97.communique.appdata.xml.in b/data/com.github.suzie97.communique.appdata.xml.in index f955ddd9e..70ef76a7f 100644 --- a/data/com.github.suzie97.communique.appdata.xml.in +++ b/data/com.github.suzie97.communique.appdata.xml.in @@ -5,7 +5,7 @@ CC0-1.0 GPL-3.0+ Communique - RSS Reader with cross-platform sync. + RSS Reader with cross-platform sync

Subscribe to and read RSS/Atom feeds with cross-platform synchronization. Communique features support for a lot of RSS services. And ofcourse, you can use Communique to subscribe to and read RSS feeds locally, without logging in to anything. Communique also allows you to save your articles to Instapaper, Pocket or Wallabag, or send them via email straight from the app.

Supported services:

@@ -53,6 +53,15 @@ https://raw.githubusercontent.com/suzie97/communique/master/data/communique-dark-screenshot.png + + https://raw.githubusercontent.com/suzie97/communique/master/data/communique-fullscreen-screenshot.png + + + https://raw.githubusercontent.com/suzie97/communique/master/data/communique-shortcuts.png + + + https://raw.githubusercontent.com/suzie97/communique/master/data/communique-preferences.png + none @@ -84,6 +93,23 @@ none + + +

Feature Updates:

+
    +
  • Rounded window corners
  • +
  • Improved theme
  • +
  • A more content focused experience with fullscreen mode
  • +
  • Changing the font does not requires a restart anymore
  • +
  • Add new shortcuts dialog
  • +
  • Context menus now follow the standard system style
  • +
+

Bug Fixes:

+
    +
  • Correctly navigate between articles using shortcuts
  • +
+
+

Improvements:

diff --git a/data/com.github.suzie97.communique.desktop.in b/data/com.github.suzie97.communique.desktop.in index 85317446b..267ac718d 100755 --- a/data/com.github.suzie97.communique.desktop.in +++ b/data/com.github.suzie97.communique.desktop.in @@ -2,7 +2,7 @@ Name=Communique GenericName=RSS Client Comment=Read RSS/Atom Feeds -Categories=Network;Education;News;Feed; +Categories=Network;News;Feed; Exec=com.github.suzie97.communique %U Icon=com.github.suzie97.communique Terminal=false diff --git a/data/communique-dark-screenshot.png b/data/communique-dark-screenshot.png index 470ba4ee8..afb238355 100644 Binary files a/data/communique-dark-screenshot.png and b/data/communique-dark-screenshot.png differ diff --git a/data/communique-fullscreen-screenshot.png b/data/communique-fullscreen-screenshot.png new file mode 100644 index 000000000..b93169abb Binary files /dev/null and b/data/communique-fullscreen-screenshot.png differ diff --git a/data/communique-light-screenshot.png b/data/communique-light-screenshot.png index 77d7cec24..25b87e6d9 100644 Binary files a/data/communique-light-screenshot.png and b/data/communique-light-screenshot.png differ diff --git a/data/communique-preferences.png b/data/communique-preferences.png new file mode 100644 index 000000000..ac137b12c Binary files /dev/null and b/data/communique-preferences.png differ diff --git a/data/communique-shortcuts.png b/data/communique-shortcuts.png new file mode 100644 index 000000000..5c36aad24 Binary files /dev/null and b/data/communique-shortcuts.png differ diff --git a/meson.build b/meson.build index 5631119f6..14287efbe 100644 --- a/meson.build +++ b/meson.build @@ -163,7 +163,6 @@ vala_sources = [ 'src/Widgets/LoginRow.vala', 'src/Widgets/MainWindow.vala', 'src/Widgets/MediaPlayer.vala', - 'src/Widgets/MediaButton.vala', 'src/Widgets/MediaRow.vala', 'src/Widgets/ModeButton.vala', 'src/Widgets/RemovePopover.vala', diff --git a/src/Widgets/ArticleView.vala b/src/Widgets/ArticleView.vala index e41886a81..eea64b2d6 100644 --- a/src/Widgets/ArticleView.vala +++ b/src/Widgets/ArticleView.vala @@ -1027,10 +1027,6 @@ public class FeedReader.ArticleView : Gtk.Overlay { return false; } - public void showMediaButton (bool show) { - m_fsHead.showMediaButton (show); - } - public void sendEvent (Gdk.EventKey event) { m_currentView.key_press_event (event); } diff --git a/src/Widgets/ColumnView.vala b/src/Widgets/ColumnView.vala index ab2e797be..73a7d7fc1 100644 --- a/src/Widgets/ColumnView.vala +++ b/src/Widgets/ColumnView.vala @@ -185,8 +185,6 @@ public class FeedReader.ColumnView : Gtk.Paned { Logger.debug ("ContentPage: set headerbar"); m_headerbar.setRead (row.getArticle ().getUnread ()); m_headerbar.setMarked (row.getArticle ().getMarked ()); - m_headerbar.showMediaButton (row.haveMedia ()); - m_article_view.showMediaButton (row.haveMedia ()); } }); diff --git a/src/Widgets/ColumnViewHeader.vala b/src/Widgets/ColumnViewHeader.vala index 18a396021..53af7301d 100644 --- a/src/Widgets/ColumnViewHeader.vala +++ b/src/Widgets/ColumnViewHeader.vala @@ -10,7 +10,6 @@ public class FeedReader.ColumnViewHeader : Hdy.HeaderBar { private Gtk.Button m_share_button; private Gtk.Button m_tag_button; private Gtk.Button m_print_button; - private AttachedMediaButton m_media_button; private HoverButton m_mark_button; private HoverButton m_read_button; private Gtk.Button m_close_button; @@ -226,14 +225,6 @@ public class FeedReader.ColumnViewHeader : Hdy.HeaderBar { }); }); - m_media_button = new AttachedMediaButton (); - m_media_button.popOpened.connect ( () => { - popOpened (); - }); - m_media_button.popClosed.connect ( () => { - popClosed (); - }); - var search_grid = new Gtk.Grid () { valign = Gtk.Align.CENTER }; @@ -249,7 +240,7 @@ public class FeedReader.ColumnViewHeader : Hdy.HeaderBar { this.pack_end (shareStack); this.pack_end (m_print_button); this.pack_end (new Gtk.Separator (Gtk.Orientation.HORIZONTAL)); - this.pack_end (m_media_button); + this.pack_end (new Gtk.Separator (Gtk.Orientation.HORIZONTAL)); } public void set_paned_positions (int start_position, int end_position, bool start_changed = true) { @@ -341,11 +332,6 @@ public class FeedReader.ColumnViewHeader : Hdy.HeaderBar { } } - public void showMediaButton (bool show) { - m_media_button.update (); - m_media_button.visible = show; - } - public void refreshSahrePopover () { if (m_sharePopover == null) { return; diff --git a/src/Widgets/FullscreenHeader.vala b/src/Widgets/FullscreenHeader.vala index d007e719e..0af05a7f6 100644 --- a/src/Widgets/FullscreenHeader.vala +++ b/src/Widgets/FullscreenHeader.vala @@ -160,8 +160,4 @@ public class FeedReader.FullscreenHeader : Gtk.EventBox { m_timeout_source_id = 0; } } - - public void showMediaButton (bool show) { - m_header.showMediaButton (show); - } } diff --git a/src/Widgets/MediaButton.vala b/src/Widgets/MediaButton.vala deleted file mode 100644 index 2508a5a23..000000000 --- a/src/Widgets/MediaButton.vala +++ /dev/null @@ -1,135 +0,0 @@ -// This file is part of FeedReader. -// -// FeedReader 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, either version 3 of the License, or -// (at your option) any later version. -// -// FeedReader 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 FeedReader. If not, see . - -public class FeedReader.AttachedMediaButton : Gtk.Button { - - private Gtk.ListBox m_list; - private Gtk.Image m_filesIcon; - private Gtk.Spinner m_spinner; - private Gtk.Stack m_stack; - private Gee.List m_enclosures; - private Gtk.Popover m_pop; - private ulong m_signalID = 0; - public signal void play(string url); - public signal void popClosed(); - public signal void popOpened(); - - public AttachedMediaButton() - { - m_filesIcon = new Gtk.Image.from_icon_name("mail-attachment-symbolic", Gtk.IconSize.SMALL_TOOLBAR); - m_spinner = new Gtk.Spinner(); - m_spinner.set_size_request(16,16); - - m_stack = new Gtk.Stack(); - m_stack.set_transition_duration(100); - m_stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE); - m_stack.add_named(m_spinner, "spinner"); - m_stack.add_named(m_filesIcon, "files"); - this.add(m_stack); - this.set_relief(Gtk.ReliefStyle.NONE); - this.set_events(Gdk.EventMask.ENTER_NOTIFY_MASK); - this.set_focus_on_click(false); - - m_list = new Gtk.ListBox(); - m_list.margin = 10; - m_list.set_selection_mode(Gtk.SelectionMode.NONE); - m_list.row_activated.connect((row) => { - m_spinner.start(); - m_pop.hide(); - mediaRow? mRow = row as mediaRow; - if(mRow != null) - { - playMedia(mRow.getURL()); - } - else - { - Logger.error("MediaPopover: invalid row clicked"); - } - }); - - m_pop = new Gtk.Popover(this); - m_pop.add(m_list); - m_pop.set_modal(true); - m_pop.set_position(Gtk.PositionType.BOTTOM); - m_pop.closed.connect(() => { - popClosed(); - }); - } - - public void update() - { - m_enclosures = new Gee.ArrayList(); - Article? selectedArticle = ColumnView.get_default().getSelectedArticle(); - if(selectedArticle != null) - { - m_enclosures = selectedArticle.getEnclosures(); - } - - if(m_signalID != 0) - { - this.disconnect(m_signalID); - m_signalID = 0; - } - - if(m_enclosures.size != 0) - { - m_stack.set_visible_child_name("files"); - this.set_tooltip_text(_("Attachments")); - var children = m_list.get_children(); - foreach(Gtk.Widget row in children) - { - m_list.remove(row); - } - foreach(Enclosure enc in m_enclosures) - { - m_list.add(new mediaRow(enc)); - } - m_signalID = this.clicked.connect(() => { - popOpened(); - m_pop.show_all(); - }); - } - else - { - // no media - } - } - - private void playMedia(string url) - { - Logger.debug(@"MediaButton.playMedia: $url"); - if(Settings.general().get_boolean("mediaplayer")) - { - m_stack.set_visible_child_name("spinner"); - var media = new MediaPlayer(url); - media.loaded.connect(() => { - m_spinner.stop(); - m_stack.set_visible_child_name("files"); - }); - ColumnView.get_default().ArticleViewAddMedia(media); - } - else - { - try - { - Gtk.show_uri_on_window(MainWindow.get_default(), url, Gdk.CURRENT_TIME); - } - catch(GLib.Error e) - { - Logger.debug("could not open the link in an external browser: %s".printf(e.message)); - } - } - } -} diff --git a/src/Widgets/ServiceInfo.vala b/src/Widgets/ServiceInfo.vala index ab3004cc1..72653726c 100644 --- a/src/Widgets/ServiceInfo.vala +++ b/src/Widgets/ServiceInfo.vala @@ -1,42 +1,27 @@ -// This file is part of FeedReader. -// -// FeedReader 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, either version 3 of the License, or -// (at your option) any later version. -// -// FeedReader 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 FeedReader. If not, see . +/* +* SPDX-License-Identifier: GPL-3.0-or-later +* SPDX-FileCopyrightText: 2021 Your Name +*/ public class FeedReader.ServiceInfo : Gtk.Overlay { private Gtk.Stack m_stack; private Gtk.Spinner m_spinner; private Gtk.Image m_logo; - private Gtk.Label m_name; private Gtk.Label m_label; private Gtk.Label m_offline; private Gtk.Grid m_box; - public ServiceInfo () - { - // m_logo = new Gtk.Image (); + public ServiceInfo () { m_logo = new Gtk.Image.from_file (""); m_label = new Gtk.Label ("") { halign = Gtk.Align.CENTER, margin_start = 10, - margin_end = 10 + margin_end = 10, + margin_top = 6 }; m_label.set_ellipsize (Pango.EllipsizeMode.END); - m_name = new Gtk.Label ("") { - halign = Gtk.Align.CENTER, - ellipsize = Pango.EllipsizeMode.END - }; - m_name.get_style_context ().add_class (Granite.STYLE_CLASS_H1_LABEL); + m_label.get_style_context ().add_class (Granite.STYLE_CLASS_H3_LABEL); + m_label.get_style_context ().add_class (Gtk.STYLE_CLASS_DIM_LABEL); m_box = new Gtk.Grid () { orientation = Gtk.Orientation.VERTICAL, @@ -45,7 +30,6 @@ public class FeedReader.ServiceInfo : Gtk.Overlay { valign = Gtk.Align.CENTER }; m_box.add (m_logo); - m_box.add (m_name); m_box.add (m_label); m_box.margin_top = 20; m_box.margin_bottom = 5; @@ -72,25 +56,6 @@ public class FeedReader.ServiceInfo : Gtk.Overlay { string? service_icon = FeedReaderBackend.get_default ().symbolicIcon (); string? user_name = FeedReaderBackend.get_default ().accountName (); string? server = FeedReaderBackend.get_default ().getServerURL (); - string? service_name = ""; - - if (server == "https://feedbin.com/") { - service_name = "Feedbin"; - } else if (server == "https://tt-rss.org/") { - service_name = "Tiny Tiny RSS"; - } else if (server == "https://github.com/nextcloud/news") { - service_name = "Nextcloud News"; - } else if (server == "http://www.inoreader.com/") { - service_name = "InoReader"; - } else if (server == "https://freshrss.org/") { - service_name = "freshRSS"; - } else if (server == "https://feedhq.org/") { - service_name = "FeedHQ"; - } else if (server == "https://bazqux.com/") { - service_name = "BazQux"; - } else if (server == "http://localhost/") { - service_name = "Communique"; - } if (this.is_visible ()) { if (user_name == "none" || service_icon == "none") { @@ -99,12 +64,9 @@ public class FeedReader.ServiceInfo : Gtk.Overlay { } else { m_logo.set_from_icon_name (service_icon, Gtk.IconSize.BUTTON); - // m_logo.get_style_context ().add_class ("fr-sidebar-symbolic"); m_label.set_label (user_name); - m_name.label = service_name; m_stack.set_visible_child_name ("info"); - if (server != "none") - { + if (server != "none") { this.set_tooltip_text (Utils.shortenURL (server)); } }