feat: hide-title and show-domain-source for rss

This commit is contained in:
ralphocdol 2024-09-12 06:43:27 +08:00
parent d60457afaf
commit 1aa325de27
7 changed files with 54 additions and 5 deletions

View File

@ -518,10 +518,15 @@ An array of RSS/atom feeds. The title can optionally be changed.
| hide-categories | boolean | no | false | Only applicable for `detailed-list` style | | hide-categories | boolean | no | false | Only applicable for `detailed-list` style |
| hide-description | boolean | no | false | Only applicable for `detailed-list` style | | hide-description | boolean | no | false | Only applicable for `detailed-list` style |
| item-link-prefix | string | no | | | | item-link-prefix | string | no | | |
| hide-title | boolean | no | false | |
| show-domain-source | boolean | no | false | |
###### `item-link-prefix` ###### `item-link-prefix`
If an RSS feed isn't returning item links with a base domain and Glance has failed to automatically detect the correct domain you can manually add a prefix to each link with this property. If an RSS feed isn't returning item links with a base domain and Glance has failed to automatically detect the correct domain you can manually add a prefix to each link with this property.
###### `show-domain-source`
Useful when using FreshRSS' user queries since it shows the query name instead of the actual source
##### `limit` ##### `limit`
The maximum number of articles to show. The maximum number of articles to show.

View File

@ -795,6 +795,11 @@ details[open] .summary::after {
top: 0.1rem; top: 0.1rem;
} }
.list-horizontal-text > .rss-li {
display: inline-flex;
align-items: center;
}
.header-container { .header-container {
margin-top: calc(var(--widget-gap) / 2); margin-top: calc(var(--widget-gap) / 2);
--header-height: 45px; --header-height: 45px;

View File

@ -16,10 +16,17 @@
<div class="grow min-width-0"> <div class="grow min-width-0">
<a class="size-h3 color-primary-if-not-visited" href="{{ .Link }}" target="_blank" rel="noreferrer">{{ .Title }}</a> <a class="size-h3 color-primary-if-not-visited" href="{{ .Link }}" target="_blank" rel="noreferrer">{{ .Title }}</a>
<ul class="list-horizontal-text flex-nowrap"> <ul class="list-horizontal-text flex-nowrap">
<li {{ dynamicRelativeTimeAttrs .PublishedAt }}></li> <li class="rss-li" {{ dynamicRelativeTimeAttrs .PublishedAt }}></li>
<li class="min-width-0"> {{ if .ChannelName }}
<li class="rss-li min-width-0">
<a class="block text-truncate" href="{{ .ChannelURL }}" target="_blank" rel="noreferrer">{{ .ChannelName }}</a> <a class="block text-truncate" href="{{ .ChannelURL }}" target="_blank" rel="noreferrer">{{ .ChannelName }}</a>
</li> </li>
{{ end }}
{{ if .SourceName }}
<li class="rss-li min-width-0">
<a class="block text-truncate" href="{{ .SourceURL }}" target="_blank" rel="noreferrer">{{ .SourceName }}</a>
</li>
{{ end }}
</ul> </ul>
{{ if ne "" .Description }} {{ if ne "" .Description }}
<p class="rss-detailed-description text-truncate-2-lines margin-top-10">{{ .Description }}</p> <p class="rss-detailed-description text-truncate-2-lines margin-top-10">{{ .Description }}</p>

View File

@ -19,7 +19,12 @@
<a href="{{ .Link }}" title="{{ .Title }}" class="block text-truncate color-primary-if-not-visited" target="_blank" rel="noreferrer">{{ .Title }}</a> <a href="{{ .Link }}" title="{{ .Title }}" class="block text-truncate color-primary-if-not-visited" target="_blank" rel="noreferrer">{{ .Title }}</a>
<ul class="list-horizontal-text flex-nowrap margin-top-5"> <ul class="list-horizontal-text flex-nowrap margin-top-5">
<li class="shrink-0" {{ dynamicRelativeTimeAttrs .PublishedAt }}></li> <li class="shrink-0" {{ dynamicRelativeTimeAttrs .PublishedAt }}></li>
{{ if .ChannelName }}
<li class="min-width-0 text-truncate">{{ .ChannelName }}</li> <li class="min-width-0 text-truncate">{{ .ChannelName }}</li>
{{ end }}
{{ if .SourceName }}
<li class="min-width-0 text-truncate">{{ .SourceName }}</li>
{{ end }}
</ul> </ul>
</div> </div>
</div> </div>

View File

@ -19,7 +19,12 @@
<a href="{{ .Link }}" title="{{ .Title }}" class="text-truncate-3-lines color-primary-if-not-visited margin-top-10 margin-bottom-auto" target="_blank" rel="noreferrer">{{ .Title }}</a> <a href="{{ .Link }}" title="{{ .Title }}" class="text-truncate-3-lines color-primary-if-not-visited margin-top-10 margin-bottom-auto" target="_blank" rel="noreferrer">{{ .Title }}</a>
<ul class="list-horizontal-text flex-nowrap margin-top-7"> <ul class="list-horizontal-text flex-nowrap margin-top-7">
<li class="shrink-0" {{ dynamicRelativeTimeAttrs .PublishedAt }}></li> <li class="shrink-0" {{ dynamicRelativeTimeAttrs .PublishedAt }}></li>
{{ if .ChannelName }}
<li class="min-width-0 text-truncate">{{ .ChannelName }}</li> <li class="min-width-0 text-truncate">{{ .ChannelName }}</li>
{{ end }}
{{ if .SourceName }}
<li class="min-width-0 text-truncate">{{ .SourceName }}</li>
{{ end }}
</ul> </ul>
</div> </div>
</div> </div>

View File

@ -6,10 +6,17 @@
<li> <li>
<a class="title size-title-dynamic color-primary-if-not-visited" href="{{ .Link }}" target="_blank" rel="noreferrer" title="{{ .Title }}">{{ .Title }}</a> <a class="title size-title-dynamic color-primary-if-not-visited" href="{{ .Link }}" target="_blank" rel="noreferrer" title="{{ .Title }}">{{ .Title }}</a>
<ul class="list-horizontal-text flex-nowrap"> <ul class="list-horizontal-text flex-nowrap">
<li {{ dynamicRelativeTimeAttrs .PublishedAt }}></li> <li class="rss-li" {{ dynamicRelativeTimeAttrs .PublishedAt }}></li>
<li class="min-width-0"> {{ if .ChannelName }}
<li class="rss-li min-width-0">
<a class="block text-truncate" href="{{ .ChannelURL }}" target="_blank" rel="noreferrer">{{ .ChannelName }}</a> <a class="block text-truncate" href="{{ .ChannelURL }}" target="_blank" rel="noreferrer">{{ .ChannelName }}</a>
</li> </li>
{{ end }}
{{ if .SourceName }}
<li class="rss-li min-width-0">
<a class="block text-truncate" href="{{ .SourceURL }}" target="_blank" rel="noreferrer">{{ .SourceName }}</a>
</li>
{{ end }}
</ul> </ul>
</li> </li>
{{ else }} {{ else }}

View File

@ -24,6 +24,8 @@ type RSSFeedItem struct {
Categories []string Categories []string
Description string Description string
PublishedAt time.Time PublishedAt time.Time
SourceName string
SourceURL string
} }
// doesn't cover all cases but works the vast majority of the time // doesn't cover all cases but works the vast majority of the time
@ -63,6 +65,8 @@ type RSSFeedRequest struct {
HideDescription bool `yaml:"hide-description"` HideDescription bool `yaml:"hide-description"`
ItemLinkPrefix string `yaml:"item-link-prefix"` ItemLinkPrefix string `yaml:"item-link-prefix"`
IsDetailed bool `yaml:"-"` IsDetailed bool `yaml:"-"`
HideTitle bool `yaml:"hide-title"`
ShowSource bool `yaml:"show-domain-source"`
} }
type RSSFeedItems []RSSFeedItem type RSSFeedItems []RSSFeedItem
@ -150,7 +154,18 @@ func getItemsFromRSSFeedTask(request RSSFeedRequest) ([]RSSFeedItem, error) {
} }
} }
if request.Title != "" { if request.ShowSource {
parsedUrl, err := url.Parse(rssItem.Link)
if err != nil {
return nil, err
}
rssItem.SourceName = parsedUrl.Host
rssItem.SourceURL = parsedUrl.Scheme + "://" + parsedUrl.Host
}
if request.HideTitle {
rssItem.ChannelName = ""
} else if request.Title != "" {
rssItem.ChannelName = request.Title rssItem.ChannelName = request.Title
} else { } else {
rssItem.ChannelName = feed.Title rssItem.ChannelName = feed.Title