From 80bab090bfab458e981d90eecd6a18721da461f1 Mon Sep 17 00:00:00 2001 From: Jallepalli Ashok Kumar Date: Wed, 23 Sep 2015 15:30:31 +0530 Subject: [PATCH] ttrss: New module for Tiny Tiny RSS feed reader --- actions/ttrss | 59 +++++++++++++++++ data/etc/plinth/modules-enabled/ttrss | 1 + plinth/modules/ttrss/__init__.py | 46 ++++++++++++++ plinth/modules/ttrss/forms.py | 28 +++++++++ plinth/modules/ttrss/templates/ttrss.html | 44 +++++++++++++ plinth/modules/ttrss/tests/__init__.py | 0 plinth/modules/ttrss/urls.py | 28 +++++++++ plinth/modules/ttrss/views.py | 77 +++++++++++++++++++++++ 8 files changed, 283 insertions(+) create mode 100755 actions/ttrss create mode 100644 data/etc/plinth/modules-enabled/ttrss create mode 100644 plinth/modules/ttrss/__init__.py create mode 100644 plinth/modules/ttrss/forms.py create mode 100644 plinth/modules/ttrss/templates/ttrss.html create mode 100644 plinth/modules/ttrss/tests/__init__.py create mode 100644 plinth/modules/ttrss/urls.py create mode 100644 plinth/modules/ttrss/views.py diff --git a/actions/ttrss b/actions/ttrss new file mode 100755 index 000000000..070b9cdcc --- /dev/null +++ b/actions/ttrss @@ -0,0 +1,59 @@ +#!/usr/bin/python3 +# -*- mode: python -*- +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Configuration helper for News Feed Reader (Tiny Tiny RSS) +""" +import argparse + +from plinth import action_utils + + +def parse_arguments(): + """Return parsed command line arguments as dictionary.""" + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') + + subparsers.add_parser('enable', help='Enable Tiny Tiny RSS') + subparsers.add_parser('disable', help='Disable Tiny Tiny RSS') + + return parser.parse_args() + + +def subcommand_enable(_): + """Enable web configuration and reload.""" + action_utils.webserver_enable('50-tt-rss') + + +def subcommand_disable(_): + """Disable web configuration and reload.""" + action_utils.webserver_disable('50-tt-rss') + + +def main(): + """Parse arguments and perform all duties.""" + arguments = parse_arguments() + + subcommand = arguments.subcommand.replace('-', '_') + subcommand_method = globals()['subcommand_' + subcommand] + subcommand_method(arguments) + + +if __name__ == '__main__': + main() diff --git a/data/etc/plinth/modules-enabled/ttrss b/data/etc/plinth/modules-enabled/ttrss new file mode 100644 index 000000000..0c9a11e5e --- /dev/null +++ b/data/etc/plinth/modules-enabled/ttrss @@ -0,0 +1 @@ +plinth.modules.ttrss diff --git a/plinth/modules/ttrss/__init__.py b/plinth/modules/ttrss/__init__.py new file mode 100644 index 000000000..b9b8f289e --- /dev/null +++ b/plinth/modules/ttrss/__init__.py @@ -0,0 +1,46 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Plinth module to configure Tiny Tiny RSS +""" + +from gettext import gettext as _ + +from plinth import cfg +from plinth import action_utils + +def init(): + """Intialize Tiny Tiny RSS module.""" + menu = cfg.main_menu.get('apps:index') + menu.add_urlname(_('News Feed Reader (Tiny Tiny RSS)'), 'glyphicon-envelope', + 'ttrss:index', 600) + +depends = ['plinth.modules.apps'] + +def is_enabled(): + """Return whether the module is enabled.""" + return action_utils.webserver_is_enabled('50-tt-rss') + +def diagnose(): + """Run diagnostics and return the results.""" + results = [] + + results.extend(action_utils.diagnose_url_on_all( + 'https://{host}/ttrss', extra_options=['--no-check-certificate'])) + + return results diff --git a/plinth/modules/ttrss/forms.py b/plinth/modules/ttrss/forms.py new file mode 100644 index 000000000..07439c429 --- /dev/null +++ b/plinth/modules/ttrss/forms.py @@ -0,0 +1,28 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Forms for configuring Tiny Tiny RSS +""" + +from django import forms + +class TtrssForm(forms.Form): + """Tiny Tiny RSS configuration form.""" + enabled = forms.BooleanField( + label='Enable Tiny Tiny RSS', + required=False) diff --git a/plinth/modules/ttrss/templates/ttrss.html b/plinth/modules/ttrss/templates/ttrss.html new file mode 100644 index 000000000..b036e9eb9 --- /dev/null +++ b/plinth/modules/ttrss/templates/ttrss.html @@ -0,0 +1,44 @@ +{% extends "base.html" %} + +{% load bootstrap %} + +{% comment %} +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +{% endcomment %} + +{% block content %} + +

News Feed Reader (Tiny Tiny RSS)

+ +

Tiny Tiny RSS is a news feed (RSS/Atom) reader and aggregator, + designed to allow you to read news from any location, while feeling + as close to a real desktop application as possible.

+ +{% include "diagnostics_button.html" with module="ttrss" %} + +

Configuration

+ +
+ {% csrf_token %} + + {{ form|bootstrap }} + + +
+ +{% endblock %} diff --git a/plinth/modules/ttrss/tests/__init__.py b/plinth/modules/ttrss/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/plinth/modules/ttrss/urls.py b/plinth/modules/ttrss/urls.py new file mode 100644 index 000000000..aca8b1b9d --- /dev/null +++ b/plinth/modules/ttrss/urls.py @@ -0,0 +1,28 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +URLs for the ttrss module +""" + +from django.conf.urls import patterns, url + + +urlpatterns = patterns( + 'plinth.modules.ttrss.views', + url(r'^apps/ttrss/$', 'index', name='index'), + ) diff --git a/plinth/modules/ttrss/views.py b/plinth/modules/ttrss/views.py new file mode 100644 index 000000000..696a7fc51 --- /dev/null +++ b/plinth/modules/ttrss/views.py @@ -0,0 +1,77 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Plinth module for configuring News Feed Reader (Tiny Tiny RSS) +""" + +from django.contrib import messages +from django.template.response import TemplateResponse +from gettext import gettext as _ +import logging + +from plinth import actions +from plinth import package +from plinth.modules import ttrss +from .forms import TtrssForm + +logger = logging.getLogger(__name__) + + +@package.required(['tt-rss']) +def index(request): + """Serve configuration page.""" + status = get_status() + + form = None + + if request.method == 'POST': + form = TtrssForm(request.POST, prefix='ttrss') + if form.is_valid(): + _apply_changes(request, status, form.cleaned_data) + status = get_status() + form = TtrssForm(initial=status, prefix='ttrss') + else: + form = TtrssForm(initial=status, prefix='ttrss') + + return TemplateResponse(request, 'ttrss.html', + {'title': _('News Feed Reader (Tiny Tiny RSS)'), + 'status': status, + 'form': form}) + +def get_status(): + """Get the current status.""" + return {'enabled': ttrss.is_enabled()} + + +def _apply_changes(request, old_status, new_status): + """Apply the changes.""" + modified = False + + if old_status['enabled'] != new_status['enabled']: + sub_command = 'enable' if new_status['enabled'] else 'disable' + actions.superuser_run('ttrss', [sub_command]) + modified = True + + if modified: + messages.success(request, _('Configuration updated')) + else: + messages.info(request, _('Setting unchanged')) + + + +