mirror of
https://github.com/Xevion/glance.git
synced 2025-12-09 04:07:22 -06:00
Allow specifying a custom lobsters URL or instance
This commit is contained in:
@@ -573,11 +573,23 @@ Preview:
|
|||||||
#### Properties
|
#### Properties
|
||||||
| Name | Type | Required | Default |
|
| Name | Type | Required | Default |
|
||||||
| ---- | ---- | -------- | ------- |
|
| ---- | ---- | -------- | ------- |
|
||||||
|
| instance-url | string | no | https://lobste.rs/ |
|
||||||
|
| custom-url | string | no | |
|
||||||
| limit | integer | no | 15 |
|
| limit | integer | no | 15 |
|
||||||
| collapse-after | integer | no | 5 |
|
| collapse-after | integer | no | 5 |
|
||||||
| sort-by | string | no | hot |
|
| sort-by | string | no | hot |
|
||||||
| tags | array | no | |
|
| tags | array | no | |
|
||||||
|
|
||||||
|
##### `instance-url`
|
||||||
|
The base URL for a lobsters instance hosted somewhere other than on lobste.rs. Example:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
instance-url: https://www.journalduhacker.net/
|
||||||
|
```
|
||||||
|
|
||||||
|
##### `custom-url`
|
||||||
|
A custom URL to retrieve lobsters posts from. If this is specified, the `instance-url`, `sort-by` and `tags` properties are ignored.
|
||||||
|
|
||||||
##### `limit`
|
##### `limit`
|
||||||
The maximum number of posts to show.
|
The maximum number of posts to show.
|
||||||
|
|
||||||
|
|||||||
@@ -55,9 +55,18 @@ func getLobstersPostsFromFeed(feedUrl string) (ForumPosts, error) {
|
|||||||
return posts, nil
|
return posts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func FetchLobstersPosts(sortBy string, tags []string) (ForumPosts, error) {
|
func FetchLobstersPosts(customURL string, instanceURL string, sortBy string, tags []string) (ForumPosts, error) {
|
||||||
var feedUrl string
|
var feedUrl string
|
||||||
|
|
||||||
|
if customURL != "" {
|
||||||
|
feedUrl = customURL
|
||||||
|
} else {
|
||||||
|
if instanceURL != "" {
|
||||||
|
instanceURL = strings.TrimRight(instanceURL, "/") + "/"
|
||||||
|
} else {
|
||||||
|
instanceURL = "https://lobste.rs/"
|
||||||
|
}
|
||||||
|
|
||||||
if sortBy == "hot" {
|
if sortBy == "hot" {
|
||||||
sortBy = "hottest"
|
sortBy = "hottest"
|
||||||
} else if sortBy == "new" {
|
} else if sortBy == "new" {
|
||||||
@@ -65,10 +74,11 @@ func FetchLobstersPosts(sortBy string, tags []string) (ForumPosts, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(tags) == 0 {
|
if len(tags) == 0 {
|
||||||
feedUrl = "https://lobste.rs/" + sortBy + ".json"
|
feedUrl = instanceURL + sortBy + ".json"
|
||||||
} else {
|
} else {
|
||||||
tags := strings.Join(tags, ",")
|
tags := strings.Join(tags, ",")
|
||||||
feedUrl = "https://lobste.rs/t/" + tags + ".json"
|
feedUrl = instanceURL + "t/" + tags + ".json"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
posts, err := getLobstersPostsFromFeed(feedUrl)
|
posts, err := getLobstersPostsFromFeed(feedUrl)
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import (
|
|||||||
type Lobsters struct {
|
type Lobsters struct {
|
||||||
widgetBase `yaml:",inline"`
|
widgetBase `yaml:",inline"`
|
||||||
Posts feed.ForumPosts `yaml:"-"`
|
Posts feed.ForumPosts `yaml:"-"`
|
||||||
|
InstanceURL string `yaml:"instance-url"`
|
||||||
|
CustomURL string `yaml:"custom-url"`
|
||||||
Limit int `yaml:"limit"`
|
Limit int `yaml:"limit"`
|
||||||
CollapseAfter int `yaml:"collapse-after"`
|
CollapseAfter int `yaml:"collapse-after"`
|
||||||
SortBy string `yaml:"sort-by"`
|
SortBy string `yaml:"sort-by"`
|
||||||
@@ -38,7 +40,7 @@ func (widget *Lobsters) Initialize() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (widget *Lobsters) Update(ctx context.Context) {
|
func (widget *Lobsters) Update(ctx context.Context) {
|
||||||
posts, err := feed.FetchLobstersPosts(widget.SortBy, widget.Tags)
|
posts, err := feed.FetchLobstersPosts(widget.CustomURL, widget.InstanceURL, widget.SortBy, widget.Tags)
|
||||||
|
|
||||||
if !widget.canContinueUpdateAfterHandlingErr(err) {
|
if !widget.canContinueUpdateAfterHandlingErr(err) {
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user