From f9a4331cb13d5e68efbd0034d0e10210e3a4b1b3 Mon Sep 17 00:00:00 2001 From: Tobias Eidelpes Date: Mon, 3 May 2021 17:19:50 +0200 Subject: [PATCH] Add default icon to feeds Every feed has an icon. If not set by the user, the database automatically sets the default icon to media/default-icon-svg. --- backend/.gitignore | 2 +- backend/app_be/media/default-icon.svg | Bin 0 -> 10661 bytes backend/app_be/models.py | 2 +- .../einstellungen/einstellungen.component.ts | 8 +++----- 4 files changed, 5 insertions(+), 7 deletions(-) create mode 100644 backend/app_be/media/default-icon.svg diff --git a/backend/.gitignore b/backend/.gitignore index cbeb2f6..c7091f0 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -1,7 +1,7 @@ venv *.pyc staticfiles -media +media/feed-icons .env *.sqlite3 *.sqlite diff --git a/backend/app_be/media/default-icon.svg b/backend/app_be/media/default-icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..b1c7bbe935cdaa7a7c8e635cbcfe97dd017da035 GIT binary patch literal 10661 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 literal 0 HcmV?d00001 diff --git a/backend/app_be/models.py b/backend/app_be/models.py index 1fa41f0..e407166 100644 --- a/backend/app_be/models.py +++ b/backend/app_be/models.py @@ -9,7 +9,7 @@ class User(models.Model): class Feed(models.Model): url = models.TextField(blank=False, null=False, validators=[URLValidator(['http', 'https'])]) active = models.BooleanField() - icon = models.FileField(upload_to='feed-icons', blank=True, null=True, + icon = models.FileField(upload_to='feed-icons', blank=True, null=False, default='default-icon.svg', validators=[FileExtensionValidator(['png', 'svg'])]) keywords = models.TextField(blank=False, null=False) match_all_keywords = models.BooleanField(blank=True, default=False) diff --git a/frontend/src/app/component/einstellungen/einstellungen.component.ts b/frontend/src/app/component/einstellungen/einstellungen.component.ts index 57ffbfc..4ce40bb 100644 --- a/frontend/src/app/component/einstellungen/einstellungen.component.ts +++ b/frontend/src/app/component/einstellungen/einstellungen.component.ts @@ -1,11 +1,11 @@ import {Component, OnInit} from '@angular/core'; import {HttpClient} from '@angular/common/http'; -import {Observable, throwError} from 'rxjs'; +import {throwError} from 'rxjs'; import {MatSnackBar} from '@angular/material/snack-bar'; import {NGXLogger} from 'ngx-logger'; import {IFeed} from '../../interfaces/feed.interface'; import {FeedService} from '../../services/feed.service'; -import {ActivatedRoute, NavigationEnd, Router} from '@angular/router'; +import {ActivatedRoute} from '@angular/router'; @Component({ selector: 'app-einstellungen', @@ -22,10 +22,8 @@ export class EinstellungenComponent implements OnInit { private _snackbar: MatSnackBar, private _logger: NGXLogger, private _feedService: FeedService, - private _route: ActivatedRoute, - private _router: Router) { + private _route: ActivatedRoute) { this.icon = 'assets/logo.svg'; - this._router.routeReuseStrategy.shouldReuseRoute = () => false; this._feedService.getFeeds().toPromise().then(data => this.feeds = data).catch(err => this._logger.error(err)); }