Giter VIP home page Giter VIP logo

yarr's People

Contributors

adaszko avatar darkdragon-001 avatar dependabot[bot] avatar dlford avatar e-zk avatar farow avatar hannesbraun avatar hcl avatar icefed avatar jakembauer avatar kaloyan13 avatar lakuapik avatar minioin avatar nkanaev avatar pierreprinetti avatar qbit avatar vfaronov avatar wnh avatar xfzv avatar yangkghjh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

yarr's Issues

Docker build won't run succcesssfuly

Running this using the dockerfile results in the browser getting no response, and the container returns errors like these:

2020/09/17 16:14:26 http: panic serving 172.17.0.1:47948: open assets/index.html: no such file or directory
goroutine 12 [running]:
net/http.(*conn).serve.func1(0xc000210320)
	/usr/local/go/src/net/http/server.go:1801 +0x147
panic(0x9f57e0, 0xc0001fb530)
	/usr/local/go/src/runtime/panic.go:975 +0x3e9
html/template.Must(...)
	/usr/local/go/src/html/template/template.go:372
github.com/nkanaev/yarr/server.IndexHandler(0xb158c0, 0xc0001be380, 0xc000228100)
	/src/server/handlers.go:99 +0x78a
github.com/nkanaev/yarr/server.Handler.ServeHTTP(0x7ffc5096696f, 0xc, 0xc000051c60, 0xc000070cd0, 0xc000067200, 0xc000212098, 0xb158c0, 0xc0001be380, 0xc000228000)
	/src/server/server.go:46 +0x222
net/http.serverHandler.ServeHTTP(0xc0001be2a0, 0xb158c0, 0xc0001be380, 0xc000228000)
	/usr/local/go/src/net/http/server.go:2843 +0xa3
net/http.(*conn).serve(0xc000210320, 0xb16a40, 0xc000064b40)
	/usr/local/go/src/net/http/server.go:1925 +0x8ad
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:2969 +0x36c

Can't delete feed

If I delete a feed through Manage Feeds, the feed disappears from the UI, but reloading the page it appears again.

yarr as PWA?

Hi,
I was reading through your rationale and discovered your initial goal:

a desktop application accessible via web browser

That somehow sparked the question and idea to support yarr as a PWA, adding features like:

  • Installable via the webpage
  • Have a dedicated app icon
  • Proper app feeling, not just a webpage in a browser

Checking pages like pwabuilder.com the minimum requirement would be:

  • A manifest file
  • Service Worker scripts

Have you considered making yarr a PWA?

I could help providing the necessary files, but have honestly no idea how to include them via GO.
Anyway, wanted to check with you upfront.

What do you think?

Setting to remove Reading pane

Hello! Thank you for this project, it's very nice!

Would you think it's possible to add a setting to remove the reading pane?

Suggestions.

  1. Let us move folders and feeds up and down to organize our reader.
  2. Change display settings (list, card, titles, ...etc).
  3. Make an Android app.

Thanks.

Fail to run yarr

I successfully compiled yarr using docker, but failed to run the image.

runner@fv-az99-810:~/work/yarr$ docker run yarr
2021/07/18 04:08:43 main.go:86: using db file /data/yarr.db
2021/07/18 04:08:43 migration.go:28: db version is 0. migrating to 6
2021/07/18 04:08:43 migration.go:37: [migration:1] starting
2021/07/18 04:08:43 migration.go:63: [migration:1] failed to start transaction
2021/07/18 04:08:43 main.go:114: Failed to initialise database: unable to open database file: no such file or directory

Login page empty

Problem

When starting yarr with the parameter -auth-file, the expected login page remains empty.

Run call

/usr/local/bin/yarr -addr 127.0.0.1:7070 -db /data/yarr.db -auth-file /share/yarr/auth

Version

I am using version v1.2

Reason?

Uncertain here, but the makefile doesn't include the login.html for the assets. Or is my run call wrong?

yarr is feature complete

thank you for your interest in the project. unfortunately, i cannot accept any more new features.
the project was created due to lack of the application that i wanted, and it's already serving my own needs. i'd like to keep it simple.

yarr is not being deprecated. it's my go-to feed reader, and i'll gladly fix bugs & accept patches to improve the existing functionality.

my only requests for contributors would be:

  • to not introduce any 3rd party dependencies
  • to cover new code with unit tests whenever possible

if you'd like to introduce new features, please do so by forking it. i won't guarantee that it'd be merged to the upstream though.

Missing error message when port cannot be opened

If yarr cannot open 127.0.0.1:7070 it will exit with no explanation and with exit code 0 (successful). Please provide an explanation and let yarr exit with a non-zero exit code, preferrably 1.

$ _output/linux/yarr  # prompt return immediately
$ echo $?             # let's eee the exit code
0
$ _output/linux/yarr -version
v1.0 (9c7d95f6)
$ go version
go version go1.15.2 linux/amd64
$ uname -a
Linux syskon 5.8.10-arch1-1 #1 SMP PREEMPT Thu, 17 Sep 2020 18:01:06 +0000 x86_64 GNU/Linux

Add night mode

Yarr currently does not support night mode (I didn't find it anyway). It is dazzling to watch the screen at night. I hope to add night mode. In addition, I also hope to add a login function.

Suggestion: Allow to edit feed urls

You can edit feed names and arrange them, but you can't edit the feed URL (after adding them), I think this is a basic feature of feed readers.

Support tray icon on Linux

I see that support for tray icons on linux was removed shortly before release. I personally would love to see this feature back :)

Nil pointer issue

I tried running this service with more than 300 links and out of three times, it crashed twice.

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x89bd17]

goroutine 24 [running]:
github.com/nkanaev/yarr/server.findFavicon(0xc000406ba0, 0x1c, 0xc0002d1260, 0x29, 0x0, 0x0, 0x0)
	/var/home/minioin/workspace/yarr/server/crawler.go:170 +0x5d7
github.com/nkanaev/yarr/server.(*Handler).startJobs.func2()
	/var/home/minioin/workspace/yarr/server/server.go:76 +0x3aa
created by github.com/nkanaev/yarr/server.(*Handler).startJobs
	/var/home/minioin/workspace/yarr/server/server.go:97 +0x149

Pagination does not fetch the correct articles after some are marked as read

In the unread section, when you scroll down after reading a few articles some of them will not show up.

I could take a shot at trying to fix it and I've thought of two ways this can be fixed.

  • The web-ui could request items from a specific offset (instead of by page), which would get decreased for each article read.
  • The web-ui could request items after the last item in the list, similar to how reddit handles pagination. This would to somewhat alter the query.

Any thoughts as to which would be better, or maybe a different solution?

Lastly, in rare cases the unread counter can go below 0. I haven't been able to reproduce it consistently and I don't know if it's related to this specific issue. Have you noticed that at all?

Dockerfile breaks

Great project!!!!

When I try to create the Dockerfile, it doesn't work

thanks

Duplicate items appearing

I added Merriam-Webster's Word of the Day feed to my yarr instance and upon doing so it added the list of words from the past few days just fine. Upon fetching new updates now, the new word of the day is appearing twice in yarr even though it only appears once in the feed.

Feed URL: https://www.merriam-webster.com/wotd/feed/rss2

image

Notice the two most recent words, progeny and inveigle, are duplicated. (I added the feed two days ago, when abrupt was the word of the day.)

I looked at the DB and do in fact see two rows for each of those words. In the feed, I Ctrl+F'd the GUIDs for each row and, as expected, only one for each word is found. I'm not sure where the duplicate rows/different GUIDs are coming from. Is there anything I can do to troubleshoot this further?

An error occurred while attempting to build docker image

Anybody can help me? thanks!

sss@debian:~/yarr/yarr$ docker build .
Sending build context to Docker daemon  4.681MB
Step 1/8 : FROM golang:1.15 AS build
1.15: Pulling from library/golang
57df1a1f1ad8: Pull complete 
71e126169501: Pull complete 
1af28a55c3f3: Pull complete 
03f1c9932170: Pull complete 
f4773b341423: Pull complete 
fb320882041b: Pull complete 
24b0ad6f9416: Pull complete 
Digest: sha256:da7ff43658854148b401f24075c0aa390e3b52187ab67cab0043f2b15e754a68
Status: Downloaded newer image for golang:1.15
 ---> 05c8f6d2538a
Step 2/8 : RUN apt install gcc -y
 ---> Running in fb424d048250

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Reading package lists...
Building dependency tree...
Reading state information...
gcc is already the newest version (4:8.3.0-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Removing intermediate container fb424d048250
 ---> cd28b72488e2
Step 3/8 : WORKDIR /src
 ---> Running in f036049afdc7
Removing intermediate container f036049afdc7
 ---> 9f315d926022
Step 4/8 : COPY . .
 ---> b472aa9fe3a4
Step 5/8 : RUN make build_linux
 ---> Running in f1f3ee2244fe
go run scripts/bundle_assets.go >/dev/null
go: github.com/mmcdole/[email protected]: parsing gofeed/go.mod: open /src/gofeed/go.mod: no such file or directory
make: *** [makefile:7: server/assets_bundle.go] Error 1
The command '/bin/sh -c make build_linux' returned a non-zero code: 2

Extract full content by default

Hi! First off, thanks a ton for the project. It's dead easy to install and use - loving this a lot! Please, keep it up and never overcomplicate things like others tend to do.

I would very much appreciate the ability to set auto extract full content for certain feeds so that the experience is more immersive. Instead of having to manually click "Read Here" it'd be done by default.

BTW: I'd have one more little feature request related to scroll bar (specifically hiding it for the articles part). I believe it's trivial to implement and would look much better.

Thanks again!

Usability Suggestion

  1. Auto move to next folder when marking all as read.
  2. Allow custom timings to refresh feeds.

Sorry for bad English, Thanks.

Version v2.0 no longer works properly when setup behind reverse proxy

I am trying to setup dockerized Yarr behind a Nginx reverse proxy.
I have two Yarr docker images built right now: v1.4 and v2.0. Both versions work just fine when served directly, without reverse proxy.

Docker image built from tag v1.4 works as expected.
Nginx logs when accessing https://yarr.example.com:

192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET / HTTP/2.0" 200 39565 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/stylesheets/app.css HTTP/2.0" 200 10437 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/fetch.umd.js HTTP/2.0" 200 17934 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/vue.min.js HTTP/2.0" 200 93670 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/purify.min.js HTTP/2.0" 200 16941 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/url-polyfill.min.js HTTP/2.0" 200 6358 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/stylesheets/bootstrap.min.css HTTP/2.0" 200 160403 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/app.js HTTP/2.0" 200 18643 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/popper.min.js HTTP/2.0" 200 17883 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/api.js HTTP/2.0" 200 2967 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/vue-lazyload.js HTTP/2.0" 200 20764 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/Readability.min.js HTTP/2.0" 200 27755 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/keybindings.js HTTP/2.0" 200 4904 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /static/javascripts/bootstrap-vue.min.js HTTP/2.0" 200 381485 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /api/feeds HTTP/2.0" 200 3 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /api/status HTTP/2.0" 200 25 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /api/folders HTTP/2.0" 200 3 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /api/settings HTTP/2.0" 200 162 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /api/items? HTTP/2.0" 200 37 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /static/graphicarts/anchor.png HTTP/2.0" 200 395 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"

With v2.0, when I proceed to https://yarr.example.com, Firefox tries to download application/octet-stream file with a random name, without extension (for example dE9ike23). It seems to be a valid HTML file – see this gist.
Nginx logs:

192.168.1.5 - - [25/Apr/2021:14:23:59 +0000] "GET / HTTP/2.0" 200 5897 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"

Relevant part of the docker-compose file:

[...]
  yarr:
    container_name: yarr
    image: yarr2     # or yarr1
    restart: always
    networks:
      - nginx
    expose:
      - 7070
    volumes:
      - yarr:/data
[...]

Relevant part of the Nginx config file:

[...]
server {
    listen 443 ssl http2;
    server_name yarr.example.com;
    location / {
        proxy_pass http://yarr:7070;

        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
[...]

Please let me know if above information is sufficient, or should I include anything else.

Reverse proxy behind non-root path

I have set up yarr behind reverse proxy on a non-root path. For illustration, it could be http://example.com/my/yarr/. The HTML seems to refer to resources by relative path (./static/...), but particularly api.js seems to refer to absolute paths, such as /api/feeds/.... These URLs are then resolved to http://example.com/api/feeds/..., which is not where my yarr instance is found.

I request that yarr supports being proxied behind a non-root path like I have set up.

It is possible to implement this by making all URLs used fully relative. A common alternative is to take the root address as a configuration input (i.e. root = http://example.com/my/yarr/) and use that to generate fully absolute URLs.

In addition to importing/exporting .opml files, consider support using a specific .opml file as a source of truth.

I'd love to store my feeds in my dotfiles repository: feeds.opml. Currently, I use akregator to do this. The feed list just an akregator's config file, and is updated when I add/remove feeds.

If yarr had a similar feature, I would consider switching to it ;) Especially if was able to canonicalize xml before writing the file out: akregator loves to just permute xml attributes without semantic changes, which makes storing this file in git pretty annoying.

feed.go:21: index out of range [0] with length 0

It seems one of my feeds returns nothing and so triggers a panic because of a missing length check in src/parser/feed.go:21.

panic: runtime error: index out of range [0] with length 0

goroutine 343937 [running]:
github.com/nkanaev/yarr/src/parser.sniff(0xc00016f7ba, 0x2, 0x2, 0xc00016f7ba, 0x2)
        github.com/nkanaev/yarr/src/parser/feed.go:21 +0x390
github.com/nkanaev/yarr/src/parser.Parse(0x3da0c0, 0xc00049ff80, 0xc000642d80, 0x18, 0x3da440)
        github.com/nkanaev/yarr/src/parser/feed.go:59 +0x245
github.com/nkanaev/yarr/src/worker.listItems(0x4c, 0xc0002f4318, 0xc000642030, 0x14, 0x0, 0x0, 0xc0003fc0a0, 0x1d, 0xc0000240f0, 0
x23, ...)
        github.com/nkanaev/yarr/src/worker/crawler.go:193 +0x385
github.com/nkanaev/yarr/src/worker.(*Worker).worker(0xc00007dd10, 0xc000361c80, 0xc00037a060)
        github.com/nkanaev/yarr/src/worker/worker.go:136 +0x145
created by github.com/nkanaev/yarr/src/worker.(*Worker).refresher
        github.com/nkanaev/yarr/src/worker/worker.go:117 +0xcf
2021/06/30 09:43:24 main.go:86: using db file /var/db/yarr/storage.db
2021/06/30 09:43:24 main.go:133: starting server at http://10.192.0.5:7070
2021/06/30 09:43:24 worker.go:105: Refreshing feeds
2021/06/30 09:43:24 worker.go:76: auto-refresh 30m: starting

I simply added a length check that fixes it for me.

--- src/parser/feed.go.orig	2021-06-07 09:07:20 UTC
+++ src/parser/feed.go
@@ -18,6 +18,11 @@ type processor func(r io.Reader) (*Feed, error)
 func sniff(lookup string) (string, processor) {
 	lookup = strings.TrimSpace(lookup)
 	lookup = strings.TrimLeft(lookup, "\x00\xEF\xBB\xBF\xFE\xFF")
+
+	if len(lookup) < 1 {
+		return "", nil
+	}
+
 	switch lookup[0] {
 	case '<':
 		decoder := xmlDecoder(strings.NewReader(lookup))

Suggestion: Podcasts

Hey sorry if this isn't the right place to ask for suggestions, but I think podcasts would be a nice addition to yarr. Normally they would be in the XML tag enclosure.

<enclosure length="[LENGTH, eg 26546304]" type="audio/mpeg" url="[URL]"/>

Suggestion: Keyboard Shortcuts

How would you feel about the idea of adding keyboard shortcuts? I find them very handy in NetNewsWire.
Not asking you to necessarily do the implementation; more curious about your opinion of the capability.

Potential features in a branch

Hi, I understand that #57 means the app is feature complete from your perspective.

That said, I added some features in my branch and I thought it would be nice to at least point them here, in case there's something that interests you. I wouldn't mind making a PR for any of them:

  • Setting to enable/disable "Auto mark item as read"
  • "Mark all as read" works on all views
  • Show "mark all as read" and settings on all views
  • Use charset from feeds instead of using the HTTP charset
  • Some key-bindings change:
    • previous/next feed with p and n
    • toggle read/unread m

If anything makes sense to you here, please let me know.

If there's no interest in any of them, it's all good. :)

Thanks for the great project.

Feature: Ability to mark "all older than n days" as read

It will be nice to have an option (or several options) to mark all entries older than a certain amount of days as read.

Example use case
You go on holidays, camping or something similar. You come back after a week and some of the items in the feeds are now obsolete.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.