Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • AlekSIS/official/AlekSIS-App-DashboardFeeds
  • sunweaver/AlekSIS-App-DashboardFeeds
2 results
Show changes
Commits on Source (5)
......@@ -3,92 +3,94 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-01 13:22+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"PO-Revision-Date: 2020-04-29 12:02+0000\n"
"Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
"Language-Team: German <https://translate.edugit.org/projects/aleksis/"
"aleksis-app-dashboardfeeds/de/>\n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.0.1\n"
#: models.py:17
msgid "RSS Url"
msgstr ""
msgstr "RSS-URL"
#: models.py:18 models.py:65
msgid "Base URL"
msgstr ""
msgstr "Basis-URL"
#: models.py:19
msgid "index url of the news website (as link for users)"
msgstr ""
msgstr "Startseite der Website (als Link für Nutzer)"
#: models.py:20
msgid "Rss Source"
msgstr ""
msgstr "RSS-Quelle"
#: models.py:22
msgid "Text Only RSS Feed"
msgstr ""
msgstr "RSS-Feed nur mit Text"
#: models.py:57
msgid "RSS Widget"
msgstr ""
msgstr "RSS-Widget"
#: models.py:58
msgid "RSS Widgets"
msgstr ""
msgstr "RSS-Widgets"
#: models.py:64
msgid "iCal URL"
msgstr ""
msgstr "iCal-URL"
#: models.py:66
msgid "index url of the calendar (as link for users)"
msgstr ""
msgstr "URL der Kalenderansicht (als Link für Nutzer)"
#: models.py:67
msgid "number of displayed events"
msgstr ""
msgstr "Anzahl der anzuzeigenden Ereignisse"
#: models.py:77
msgid "Ical Widget"
msgstr ""
msgstr "iCal-Widget"
#: models.py:78
msgid "Ical Widgets"
msgstr ""
msgstr "iCal-Widgets"
#: templates/dashboardfeeds/ical.html:5
msgid "Current Events"
msgstr ""
msgstr "Aktuelle Ereignisse"
#: templates/dashboardfeeds/ical.html:11
msgid "No events to display"
msgstr ""
msgstr "Keine Termine zum Anzeigen"
#: templates/dashboardfeeds/ical.html:17
msgid "Further events"
msgstr ""
msgstr "Weitere Termine"
#: templates/dashboardfeeds/rss.html:19 templates/dashboardfeeds/rss.html:21
msgid "title image"
msgstr ""
msgstr "Titelbild"
#: templates/dashboardfeeds/rss.html:23
msgid "no feed image"
msgstr ""
msgstr "Kein Bild vorhanden"
#: templates/dashboardfeeds/rss.html:34
msgid "Read more"
msgstr ""
msgstr "Mehr lesen"
#: templates/dashboardfeeds/rss.html:38
msgid "Further articles"
msgstr ""
msgstr "Weitere Artikel"
......@@ -14,14 +14,16 @@ from .util.event_feed import get_current_events_with_cal
class RSSFeedWidget(DashboardWidget):
template = "dashboardfeeds/rss.html"
url = models.URLField(verbose_name=_("RSS Url"))
base_url = models.URLField(verbose_name=_("Base URL"),
help_text=_("index url of the news website (as link for users)"))
rss_source = models.ForeignKey(Source, verbose_name=_("Rss Source"), on_delete=models.CASCADE, editable=False,
url = models.URLField(verbose_name=_("RSS feed source URL"))
base_url = models.URLField(verbose_name=_("Base URL of related website"),
help_text=_("The widget will have a link to visit a related website to read more news"))
text_only = models.BooleanField(verbose_name=_("Text only"), help_text=_("Do not show an image to depict the news item"), default=False)
rss_source = models.ForeignKey(Source, on_delete=models.CASCADE, editable=False,
null=True)
text_only = models.BooleanField(verbose_name=_("Text Only RSS Feed"), default=False)
def save(self, *args, **kwargs):
# Update the linked RSS source object to transfer data into django-feeds
if not self.rss_source:
source = Source()
source.name = self.title
......@@ -38,7 +40,7 @@ class RSSFeedWidget(DashboardWidget):
self.rss_source.live = self.active
self.rss_source.save()
super().save()
super().save(*args, **kwargs)
def get_context(self):
posts = self.rss_source.posts.all().order_by("-created")
......@@ -61,10 +63,10 @@ class RSSFeedWidget(DashboardWidget):
class ICalFeedWidget(DashboardWidget):
template = "dashboardfeeds/ical.html"
url = models.URLField(verbose_name=_("iCal URL"))
base_url = models.URLField(verbose_name=_("Base URL"),
help_text=_("index url of the calendar (as link for users)"))
events_count = models.IntegerField(verbose_name=_("number of displayed events"), default=5)
url = models.URLField(verbose_name=_("iCalendar URL"))
base_url = models.URLField(verbose_name=_("Base URL of related calendar"),
help_text=_("The widget will have a link to visit a related website to see more events"))
events_count = models.IntegerField(verbose_name=_("Number of displayed events"), default=5)
def get_context(self):
feed = {
......@@ -74,5 +76,5 @@ class ICalFeedWidget(DashboardWidget):
return feed
class Meta:
verbose_name = _("Ical Widget")
verbose_name_plural = _("Ical Widgets")
verbose_name = _("iCalendar Widget")
verbose_name_plural = _("iCalendar Widgets")
......@@ -5,4 +5,6 @@ from aleksis.core.util.core_helpers import celery_optional
@celery_optional
def get_feeds():
update_feeds(10)
""" Update RSS feeds through django-feeds """
return update_feeds(max_feeds=10)
......@@ -12,12 +12,13 @@ logger = logging.getLogger(__name__)
def get_current_events(calendar: Calendar, limit: int = 5) -> list:
"""
Get upcoming events from calendar
""" Get upcoming events from a calendar (ICS) object
:param calendar: The calendar object
:param limit: Count of events
:return: List of upcoming events
"""
i: int = 0
events: list = []
for event in calendar.timeline.start_after(timezone.now()):
......@@ -38,21 +39,20 @@ def get_current_events(calendar: Calendar, limit: int = 5) -> list:
if not event.all_day:
# No all day event
formatted += " " + begin_time_formatted
formatted += f" {begin_time_formatted}"
if event.begin.time != event.end.time():
# Event has an end time
formatted += "" + end_time_formatted
formatted += f"{end_time_formatted}"
else:
# Event is on multiple days
if event.all_day:
# Event is all day
formatted = "{} – {}".format(begin_date_formatted, end_date_formatted)
formatted = f"{begin_date_formatted}{end_date_formatted}"
else:
# Event has begin and end times
formatted = "{} {} – {} {}".format(begin_date_formatted, begin_time_formatted, end_date_formatted,
end_time_formatted)
formatted = f"{begin_date_formatted} {begin_time_formatted}{end_date_formatted} {end_time_formatted}"
events.append({
"name": event.name,
......@@ -66,6 +66,10 @@ def get_current_events(calendar: Calendar, limit: int = 5) -> list:
@cache_memoize(300)
def get_current_events_with_cal(calendar_url: str, limit: int = 5) -> list:
""" Download an iCalendar file from an URL, parse using the ICS library
and return a limited number of events
"""
try:
content = requests.get(calendar_url, timeout=3)
except requests.RequestException as e:
......
from bs4 import BeautifulSoup
def parse_rss_html(rss_html: str) -> (str, str):
soup = BeautifulSoup(rss_html, features="html.parser")
rich_text = soup.get_text()
img_href = soup.img
if img_href:
img_href = img_href.get("src", None)
return rich_text, img_href