Compare commits
160 Commits
v2.0
...
84920cc4cf
Author | SHA1 | Date | |
---|---|---|---|
|
84920cc4cf | ||
|
e9676491ee | ||
|
1a545bb2a1 | ||
|
1e128a7cd8 | ||
|
5dbb6a710c | ||
|
dadadeb066 | ||
|
c76ff26bd6 | ||
|
50f8648f64 | ||
|
5f82a9e339 | ||
|
3278ba4eac | ||
|
9fc72f8b68 | ||
|
b7b707bd43 | ||
|
7cf27e0fde | ||
|
66f2a973a3 | ||
|
7ecbbff18a | ||
|
850ce195a0 | ||
|
479aebd023 | ||
|
9b178d1fb3 | ||
|
3ab098db5c | ||
|
6d16e93008 | ||
|
98934daee4 | ||
|
259474cae9 | ||
|
1e65a7951b | ||
|
bed5640366 | ||
|
57ea83cf4f | ||
|
219842d723 | ||
|
a96fc101f2 | ||
|
81a77ce0a4 | ||
|
9ed359f964 | ||
|
bc18557820 | ||
|
7d99edab8d | ||
|
32ca121520 | ||
|
9f1a0534a3 | ||
|
d2678be96d | ||
|
95ebbb9d13 | ||
|
0f6d4d639d | ||
|
795a5d2cb4 | ||
|
dd5f760606 | ||
|
58d6a46e36 | ||
|
a8d7b86cdc | ||
|
aac3de7ca2 | ||
|
de24659bae | ||
|
632412c10e | ||
|
012b58bbe4 | ||
|
c092842ee4 | ||
|
e4c1d01915 | ||
|
ce07ddea92 | ||
|
bd6322e533 | ||
|
91da774286 | ||
|
e62906e63d | ||
|
56e5625adc | ||
|
1ecf4b0bb4 | ||
|
57d9421c7f | ||
|
a73188944d | ||
|
97904cc0f3 | ||
|
f28f354992 | ||
|
698f5d6d06 | ||
|
b935a1c511 | ||
|
10e6bfa5a0 | ||
|
f030a4075b | ||
|
c9dd977600 | ||
|
c1bcc0c517 | ||
|
2a5692d9a7 | ||
|
a8d160f9b1 | ||
|
286cbff236 | ||
|
fff0870d3b | ||
|
fe22460c07 | ||
|
18f2789a5d | ||
|
7f161a5408 | ||
|
cba3fbc48c | ||
|
5e46f1480e | ||
|
ead253c55f | ||
|
6b8da92cb3 | ||
|
a91f64ce9d | ||
|
e1a6ccf133 | ||
|
d2c034a850 | ||
|
713930decc | ||
|
ee2a825cf0 | ||
|
8e9da86f83 | ||
|
9eb49fd3a7 | ||
|
684bc25b83 | ||
|
8ceab03cd7 | ||
|
34dad4ac8f | ||
|
b40d930f8a | ||
|
d4b34e900e | ||
|
954b549029 | ||
|
fbd0b2310e | ||
|
be7af0ccaf | ||
|
18221ef12d | ||
|
4c0726412b | ||
|
d7253a60b8 | ||
|
2de3ddff08 | ||
|
830248b6ae | ||
|
f8db2ef7ad | ||
|
109caaa889 | ||
|
d0b83babd2 | ||
|
de3decbffd | ||
|
c92229a698 | ||
|
176852b662 | ||
|
52cc8ecbbd | ||
|
e3e9542f1e | ||
|
b78c8bf8bf | ||
|
bff7476b58 | ||
|
05f5785660 | ||
|
cb50aed89a | ||
|
df655aca5e | ||
|
86853a87bf | ||
|
e3109a4384 | ||
|
eee8002d69 | ||
|
92f11f7513 | ||
|
5428e6be3a | ||
|
1ad693f931 | ||
|
c2d88a7e3f | ||
|
3b29d737eb | ||
|
fe178b8fc6 | ||
|
cca742a1c2 | ||
|
c7eddff118 | ||
|
cf30ed249f | ||
|
26b87dee98 | ||
|
77c7f938f1 | ||
|
f98de9a0a5 | ||
|
6fa2b67024 | ||
|
355e5feb62 | ||
|
a7dd707062 | ||
|
4de46a7bc5 | ||
|
2c6fce3322 | ||
|
19ecfcd0bc | ||
|
d575acfe80 | ||
|
d203d38de6 | ||
|
9f01f63613 | ||
|
982c4ebbbc | ||
|
0c5385cef3 | ||
|
58f4e1f6c9 | ||
|
6b7f69d5c0 | ||
|
7aeb458ee5 | ||
|
7cfd3b3238 | ||
|
55262d38fe | ||
|
a45e29feb7 | ||
|
9f5fd3bb4d | ||
|
63f9d55903 | ||
|
8f36ae013e | ||
|
851aa1a136 | ||
|
f38dcfba3b | ||
|
214c7aacfc | ||
|
eb9bfc57e2 | ||
|
c072783c42 | ||
|
9d701678e1 | ||
|
37ed856d8b | ||
|
28f08ad42a | ||
|
da267a56ef | ||
|
16e4cad9ad | ||
|
d13a04898e | ||
|
ff39fbff70 | ||
|
92c6aac49e | ||
|
4ca81f90e9 | ||
|
75e828cb4c | ||
|
883214a740 | ||
|
36e359c881 | ||
|
87b53fb8ec | ||
|
2ae62855cc |
16
.github/workflows/build.yml
vendored
@@ -7,7 +7,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
build_macos:
|
build_macos:
|
||||||
name: Build for MacOS
|
name: Build for MacOS
|
||||||
runs-on: macos-10.15
|
runs-on: macos-13
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout"
|
- name: "Checkout"
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
- name: "Setup Go"
|
- name: "Setup Go"
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: '^1.16'
|
go-version: '^1.17'
|
||||||
- name: Cache Go Modules
|
- name: Cache Go Modules
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
@@ -34,7 +34,7 @@ jobs:
|
|||||||
|
|
||||||
build_windows:
|
build_windows:
|
||||||
name: Build for Windows
|
name: Build for Windows
|
||||||
runs-on: windows-2019
|
runs-on: windows-2022
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout"
|
- name: "Checkout"
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@@ -43,7 +43,7 @@ jobs:
|
|||||||
- name: "Setup Go"
|
- name: "Setup Go"
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: '^1.16'
|
go-version: '^1.17'
|
||||||
- name: Cache Go Modules
|
- name: Cache Go Modules
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
@@ -61,7 +61,7 @@ jobs:
|
|||||||
|
|
||||||
build_linux:
|
build_linux:
|
||||||
name: Build for Linux
|
name: Build for Linux
|
||||||
runs-on: ubuntu-18.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout"
|
- name: "Checkout"
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@@ -70,7 +70,7 @@ jobs:
|
|||||||
- name: "Setup Go"
|
- name: "Setup Go"
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: '^1.16'
|
go-version: '^1.17'
|
||||||
- name: Cache Go Modules
|
- name: Cache Go Modules
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
@@ -131,7 +131,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||||
asset_path: ./yarr-windows.zip
|
asset_path: ./yarr-windows.zip
|
||||||
asset_name: yarr-${{ github.ref }}-windows32.zip
|
asset_name: yarr-${{ github.ref }}-windows64.zip
|
||||||
asset_content_type: application/zip
|
asset_content_type: application/zip
|
||||||
- name: Upload Linux
|
- name: Upload Linux
|
||||||
uses: actions/upload-release-asset@v1
|
uses: actions/upload-release-asset@v1
|
||||||
@@ -140,5 +140,5 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||||
asset_path: ./yarr-linux.zip
|
asset_path: ./yarr-linux.zip
|
||||||
asset_name: yarr-${{ github.ref }}-linux32.zip
|
asset_name: yarr-${{ github.ref }}-linux64.zip
|
||||||
asset_content_type: application/zip
|
asset_content_type: application/zip
|
||||||
|
2
.gitignore
vendored
@@ -1,5 +1,3 @@
|
|||||||
/server/assets.go
|
|
||||||
/gofeed
|
|
||||||
/_output
|
/_output
|
||||||
/yarr
|
/yarr
|
||||||
*.db
|
*.db
|
||||||
|
44
build.md
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
## Compilation
|
||||||
|
|
||||||
|
Install `Go >= 1.17` and `GCC`. Get the source code:
|
||||||
|
|
||||||
|
git clone https://github.com/nkanaev/yarr.git
|
||||||
|
|
||||||
|
Then run one of the corresponding commands:
|
||||||
|
|
||||||
|
# create an executable for the host os
|
||||||
|
make build_macos # -> _output/macos/yarr.app
|
||||||
|
make build_linux # -> _output/linux/yarr
|
||||||
|
make build_windows # -> _output/windows/yarr.exe
|
||||||
|
|
||||||
|
# host-specific cli version (no gui)
|
||||||
|
make build_default # -> _output/yarr
|
||||||
|
|
||||||
|
# ... or start a dev server locally
|
||||||
|
make serve # starts a server at http://localhost:7070
|
||||||
|
|
||||||
|
# ... or build a docker image
|
||||||
|
docker build -t yarr .
|
||||||
|
|
||||||
|
## ARM compilation
|
||||||
|
|
||||||
|
The instructions below are to cross-compile *yarr* to `Linux/ARM*`.
|
||||||
|
|
||||||
|
Build:
|
||||||
|
|
||||||
|
docker build -t yarr.arm -f dockerfile.arm .
|
||||||
|
|
||||||
|
Test:
|
||||||
|
|
||||||
|
# inside host
|
||||||
|
docker run -it --rm yarr.arm
|
||||||
|
|
||||||
|
# then, inside container
|
||||||
|
cd /root/out
|
||||||
|
qemu-aarch64 -L /usr/aarch64-linux-gnu/ yarr.arm64
|
||||||
|
|
||||||
|
Extract files from images:
|
||||||
|
|
||||||
|
CID=$(docker create yarr.arm)
|
||||||
|
docker cp -a "$CID:/root/out" .
|
||||||
|
docker rm "$CID"
|
@@ -1,3 +1,56 @@
|
|||||||
|
# upcoming
|
||||||
|
|
||||||
|
- (new) Fever API support (thanks to @icefed)
|
||||||
|
- (fix) duplicate articles caused by the same feed addition (thanks to @adaszko)
|
||||||
|
- (fix) relative article links (thanks to @adazsko for the report)
|
||||||
|
- (fix) atom article links stored in id element (thanks to @adazsko for the report)
|
||||||
|
|
||||||
|
# v2.4 (2023-08-15)
|
||||||
|
|
||||||
|
- (new) ARM build support (thanks to @tillcash & @fenuks)
|
||||||
|
- (new) auth configuration via param or env variable (thanks to @pierreprinetti)
|
||||||
|
- (new) web app manifest for an app-like experience on mobile (thanks to @qbit)
|
||||||
|
- (fix) concurrency issue crashing the app (thanks to @quoing)
|
||||||
|
- (fix) favicon visibility in dark mode (thanks to @caycaycarly for the report)
|
||||||
|
- (fix) autoloading more articles not working in certain edge cases (thanks to @fenuks for the report)
|
||||||
|
- (fix) handle Google URL redirects in "Read Here" (thanks to @cubbei for discovery)
|
||||||
|
- (fix) handle failures to extract content in "Read Here" (thanks to @grigio for the report)
|
||||||
|
- (fix) article view width for high resolution screens (thanks to @whaler-ragweed for the report)
|
||||||
|
- (fix) make newly added feed searchable (thanks to @BMorearty for the report)
|
||||||
|
- (fix) feed/article selection accessibility via arrow keys (thanks to @grigio and @tillcash)
|
||||||
|
- (fix) keyboard shortcuts in Firefox (thanks to @kaloyan13)
|
||||||
|
- (fix) keyboard shortcuts in non-English layouts (thanks to @kaloyan13)
|
||||||
|
- (fix) sorting articles with timezone information (thanks to @x2cf)
|
||||||
|
- (fix) handling links set in guid only for certain feeds (thanks to @adaszko for the report)
|
||||||
|
- (fix) crashes caused by feed icon endpoint (thanks to @adaszko)
|
||||||
|
|
||||||
|
# v2.3 (2022-05-03)
|
||||||
|
|
||||||
|
- (fix) handling encodings (thanks to @f100024 & @fserb)
|
||||||
|
- (fix) parsing xml feeds with illegal characters (thanks to @stepelu for the report)
|
||||||
|
- (fix) old articles reappearing as unread (thanks to @adaszko for the report)
|
||||||
|
- (fix) item list scrolling issue on large screens (thanks to @bielej for the report)
|
||||||
|
- (fix) keyboard shortcuts color in dark mode (thanks to @John09f9 for the report)
|
||||||
|
- (etc) autofocus when adding a new feed (thanks to @lakuapik)
|
||||||
|
|
||||||
|
# v2.2 (2021-11-20)
|
||||||
|
|
||||||
|
- (fix) windows console support (thanks to @dufferzafar for the report)
|
||||||
|
- (fix) remove html tags from article titles (thanks to Alex Went for the report)
|
||||||
|
- (etc) autoselect current folder when adding a new feed (thanks to @krkk)
|
||||||
|
- (etc) folder/feed settings menu available across all filters
|
||||||
|
|
||||||
|
# v2.1 (2021-08-16)
|
||||||
|
|
||||||
|
- (new) configuration via env variables
|
||||||
|
- (fix) missing `content-type` headers (thanks to @verahawk for the report)
|
||||||
|
- (fix) handle opml files not following the spec (thanks to @huangnauh for the report)
|
||||||
|
- (fix) pagination in unread/starred feeds (thanks to @Farow for the report)
|
||||||
|
- (fix) handling feeds with non-utf8 encodings (thanks to @fserb for the report)
|
||||||
|
- (fix) errors caused by empty feeds (thanks to @decke)
|
||||||
|
- (fix) recognize all audio mime types as podcasts (thanks to @krkk)
|
||||||
|
- (fix) ui tweaks (thanks to @Farow)
|
||||||
|
|
||||||
# v2.0 (2021-04-18)
|
# v2.0 (2021-04-18)
|
||||||
|
|
||||||
- (new) user interface tweaks
|
- (new) user interface tweaks
|
||||||
|
@@ -159,6 +159,7 @@ Delete any from the list in case they drop support of web feeds.
|
|||||||
- medium
|
- medium
|
||||||
- posthaven
|
- posthaven
|
||||||
- reddit
|
- reddit
|
||||||
|
- substack
|
||||||
- tumblr
|
- tumblr
|
||||||
- vimeo
|
- vimeo
|
||||||
- wordpress
|
- wordpress
|
||||||
|
@@ -20,3 +20,8 @@ The licenses are included, and the authorship comments are left intact.
|
|||||||
https://github.com/getlantern/systray (commit:2c0986d) Apache 2.0
|
https://github.com/getlantern/systray (commit:2c0986d) Apache 2.0
|
||||||
|
|
||||||
removed golog dependency
|
removed golog dependency
|
||||||
|
|
||||||
|
- fixconsole
|
||||||
|
https://github.com/apenwarr/fixconsole (commit:5a9f648) Apache 2.0
|
||||||
|
|
||||||
|
removed `w32` dependency
|
||||||
|
0
doc/todo.txt
Normal file
44
dockerfile.arm
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
FROM ubuntu:20.04
|
||||||
|
|
||||||
|
# Install GCC
|
||||||
|
RUN apt update
|
||||||
|
RUN apt install -y \
|
||||||
|
wget build-essential \
|
||||||
|
gcc-aarch64-linux-gnu \
|
||||||
|
binutils-aarch64-linux-gnu binutils-aarch64-linux-gnu-dbg \
|
||||||
|
gcc-arm-linux-gnueabihf \
|
||||||
|
binutils-arm-linux-gnueabihf binutils-arm-linux-gnueabihf-dbg
|
||||||
|
RUN env DEBIAN_FRONTEND=noninteractive \
|
||||||
|
apt install -y qemu-user qemu-user-static
|
||||||
|
|
||||||
|
# Install Golang
|
||||||
|
RUN wget --quiet https://go.dev/dl/go1.18.2.linux-amd64.tar.gz && \
|
||||||
|
rm -rf /usr/local/go && \
|
||||||
|
tar -C /usr/local -xzf go1.18.2.linux-amd64.tar.gz
|
||||||
|
ENV PATH=$PATH:/usr/local/go/bin
|
||||||
|
|
||||||
|
# Copy source code
|
||||||
|
WORKDIR /root/src
|
||||||
|
RUN mkdir /root/out
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Build ARM64
|
||||||
|
RUN env \
|
||||||
|
CC=aarch64-linux-gnu-gcc \
|
||||||
|
CGO_ENABLED=1 \
|
||||||
|
GOOS=linux GOARCH=arm64 \
|
||||||
|
go build \
|
||||||
|
-tags "sqlite_foreign_keys release linux" \
|
||||||
|
-ldflags="-s -w" \
|
||||||
|
-o /root/out/yarr.arm64 src/main.go
|
||||||
|
|
||||||
|
RUN env \
|
||||||
|
CC=arm-linux-gnueabihf-gcc \
|
||||||
|
CGO_ENABLED=1 \
|
||||||
|
GOOS=linux GOARCH=arm GOARM=7 \
|
||||||
|
go build \
|
||||||
|
-tags "sqlite_foreign_keys release linux" \
|
||||||
|
-ldflags="-s -w" \
|
||||||
|
-o /root/out/yarr.arm7 src/main.go
|
||||||
|
|
||||||
|
CMD ["/bin/bash"]
|
23
etc/install-linux.sh
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cat >"$HOME/.local/share/applications/yarr.desktop" <<END
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=yarr
|
||||||
|
Exec=$HOME/.local/bin/yarr -open
|
||||||
|
Icon=yarr
|
||||||
|
Type=Application
|
||||||
|
Categories=Internet;
|
||||||
|
END
|
||||||
|
|
||||||
|
cat >"$HOME/.local/share/icons/yarr.svg" <<END
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-anchor-favicon">
|
||||||
|
<circle cx="12" cy="5" r="3" stroke-width="4" stroke="#ffffff"></circle>
|
||||||
|
<line x1="12" y1="22" x2="12" y2="8" stroke-width="4" stroke="#ffffff"></line>
|
||||||
|
<path d="M5 12H2a10 10 0 0 0 20 0h-3" stroke-width="4" stroke="#ffffff"></path>
|
||||||
|
|
||||||
|
<circle cx="12" cy="5" r="3"></circle>
|
||||||
|
<line x1="12" y1="22" x2="12" y2="8"></line>
|
||||||
|
<path d="M5 12H2a10 10 0 0 0 20 0h-3"></path>
|
||||||
|
</svg>
|
||||||
|
END
|
BIN
etc/promo.png
Before Width: | Height: | Size: 727 KiB After Width: | Height: | Size: 173 KiB |
19
fever.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Fever API support
|
||||||
|
|
||||||
|
Fever API is a kind of RSS HTTP API interface, because the Fever API definition is not very clear, so the implementation of Fever server and Client may have some compatibility problems.
|
||||||
|
|
||||||
|
The Fever API implemented by Yarr is based on the Fever API spec: https://github.com/DigitalDJ/tinytinyrss-fever-plugin/blob/master/fever-api.md.
|
||||||
|
|
||||||
|
Here are some Apps that have been tested to work with yarr. Feel free to test other Clients/Apps and update the list here.
|
||||||
|
|
||||||
|
> Different apps support different URL/Address formats. Please note whether the URL entered has `http://` scheme and `/` suffix.
|
||||||
|
|
||||||
|
| App | Platforms | Config Server URL |
|
||||||
|
|:------------------------------------------------------------------------- | ---------------- |:--------------------------------------------------- |
|
||||||
|
| [Reeder](https://reederapp.com/) | MacOS<br>iOS | 127.0.0.1:7070/fever<br>http://127.0.0.1:7070/fever |
|
||||||
|
| [ReadKit](https://readkit.app/) | MacOS<br>iOS | http://127.0.0.1:7070/fever |
|
||||||
|
| [Fluent Reader](https://github.com/yang991178/fluent-reader) | MacOS<br>Windows | http://127.0.0.1:7070/fever/ |
|
||||||
|
| [Unread](https://apps.apple.com/us/app/unread-an-rss-reader/id1363637349) | iOS | http://127.0.0.1:7070/fever |
|
||||||
|
| [Fiery Feeds](https://voidstern.net/fiery-feeds) | MacOS<br>iOS | http://127.0.0.1:7070/fever |
|
||||||
|
|
||||||
|
If you are having trouble using Fever, please open an issue and @icefed, thanks.
|
10
go.mod
@@ -1,9 +1,11 @@
|
|||||||
module github.com/nkanaev/yarr
|
module github.com/nkanaev/yarr
|
||||||
|
|
||||||
go 1.16
|
go 1.17
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/mattn/go-sqlite3 v1.14.0
|
github.com/mattn/go-sqlite3 v1.14.7
|
||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
|
golang.org/x/net v0.8.0
|
||||||
golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13
|
golang.org/x/sys v0.6.0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
require golang.org/x/text v0.8.0 // indirect
|
||||||
|
48
go.sum
@@ -1,15 +1,39 @@
|
|||||||
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
github.com/mattn/go-sqlite3 v1.14.7 h1:fxWBnXkxfM6sRiuH3bqJ4CfzZojMOLVc0UTsTglEghA=
|
||||||
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
|
github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||||
github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
|
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
|
||||||
|
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||||
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13 h1:5jaG59Zhd+8ZXe8C+lgiAGqkOaZBruqrWclLkgAww34=
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
|
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
|
||||||
|
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
14
makefile
@@ -1,4 +1,4 @@
|
|||||||
VERSION=2.0
|
VERSION=2.4
|
||||||
GITHASH=$(shell git rev-parse --short=8 HEAD)
|
GITHASH=$(shell git rev-parse --short=8 HEAD)
|
||||||
|
|
||||||
CGO_ENABLED=1
|
CGO_ENABLED=1
|
||||||
@@ -11,26 +11,20 @@ build_default:
|
|||||||
go build -tags "sqlite_foreign_keys release" -ldflags="$(GO_LDFLAGS)" -o _output/yarr src/main.go
|
go build -tags "sqlite_foreign_keys release" -ldflags="$(GO_LDFLAGS)" -o _output/yarr src/main.go
|
||||||
|
|
||||||
build_macos:
|
build_macos:
|
||||||
set GOOS=darwin
|
|
||||||
set GOARCH=amd64
|
|
||||||
mkdir -p _output/macos
|
mkdir -p _output/macos
|
||||||
go build -tags "sqlite_foreign_keys release macos" -ldflags="$(GO_LDFLAGS)" -o _output/macos/yarr src/main.go
|
GOOS=darwin GOARCH=amd64 go build -tags "sqlite_foreign_keys release macos" -ldflags="$(GO_LDFLAGS)" -o _output/macos/yarr src/main.go
|
||||||
cp src/platform/icon.png _output/macos/icon.png
|
cp src/platform/icon.png _output/macos/icon.png
|
||||||
go run bin/package_macos.go -outdir _output/macos -version "$(VERSION)"
|
go run bin/package_macos.go -outdir _output/macos -version "$(VERSION)"
|
||||||
|
|
||||||
build_linux:
|
build_linux:
|
||||||
set GOOS=linux
|
|
||||||
set GOARCH=386
|
|
||||||
mkdir -p _output/linux
|
mkdir -p _output/linux
|
||||||
go build -tags "sqlite_foreign_keys release linux" -ldflags="$(GO_LDFLAGS)" -o _output/linux/yarr src/main.go
|
GOOS=linux GOARCH=amd64 go build -tags "sqlite_foreign_keys release linux" -ldflags="$(GO_LDFLAGS)" -o _output/linux/yarr src/main.go
|
||||||
|
|
||||||
build_windows:
|
build_windows:
|
||||||
set GOOS=windows
|
|
||||||
set GOARCH=386
|
|
||||||
mkdir -p _output/windows
|
mkdir -p _output/windows
|
||||||
go run bin/generate_versioninfo.go -version "$(VERSION)" -outfile src/platform/versioninfo.rc
|
go run bin/generate_versioninfo.go -version "$(VERSION)" -outfile src/platform/versioninfo.rc
|
||||||
windres -i src/platform/versioninfo.rc -O coff -o src/platform/versioninfo.syso
|
windres -i src/platform/versioninfo.rc -O coff -o src/platform/versioninfo.syso
|
||||||
go build -tags "sqlite_foreign_keys release windows" -ldflags="$(GO_LDFLAGS) -H windowsgui" -o _output/windows/yarr.exe src/main.go
|
GOOS=windows GOARCH=amd64 go build -tags "sqlite_foreign_keys release windows" -ldflags="$(GO_LDFLAGS) -H windowsgui" -o _output/windows/yarr.exe src/main.go
|
||||||
|
|
||||||
serve:
|
serve:
|
||||||
go run -tags "sqlite_foreign_keys" src/main.go -db local.db
|
go run -tags "sqlite_foreign_keys" src/main.go -db local.db
|
||||||
|
56
readme.md
@@ -3,72 +3,34 @@
|
|||||||
**yarr** (yet another rss reader) is a web-based feed aggregator which can be used both
|
**yarr** (yet another rss reader) is a web-based feed aggregator which can be used both
|
||||||
as a desktop application and a personal self-hosted server.
|
as a desktop application and a personal self-hosted server.
|
||||||
|
|
||||||
It is written in Go with the frontend in Vue.js. The storage is backed by SQLite.
|
The app is a single binary with an embedded database (SQLite).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## usage
|
## usage
|
||||||
|
|
||||||
The latest prebuilt binaries for Linux/MacOS/Windows are available
|
The latest prebuilt binaries for Linux/MacOS/Windows AMD64 are available
|
||||||
[here](https://github.com/nkanaev/yarr/releases/latest).
|
[here](https://github.com/nkanaev/yarr/releases/latest).
|
||||||
|
|
||||||
### macos
|
### macos
|
||||||
|
|
||||||
Download `yarr-*-macos64.zip`, unzip it, place `yarr.app` in `/Applications` folder.
|
Download `yarr-*-macos64.zip`, unzip it, place `yarr.app` in `/Applications` folder, [open the app][macos-open], click the anchor menu bar icon, select "Open".
|
||||||
|
|
||||||
The binaries are not signed, because the author doesn't want to buy a certificate.
|
[macos-open]: https://support.apple.com/en-gb/guide/mac-help/mh40616/mac
|
||||||
Apple hates cheapskate developers, therefore the OS will refuse to run the application.
|
|
||||||
To bypass these measures, you can run the command:
|
|
||||||
|
|
||||||
xattr -d com.apple.quarantine /Applications/yarr.app
|
|
||||||
|
|
||||||
### windows
|
### windows
|
||||||
|
|
||||||
Download `yarr-*-windows32.zip`, unzip it, place wherever you'd like to
|
Download `yarr-*-windows64.zip`, unzip it, open `yarr.exe`, click the anchor system tray icon, select "Open".
|
||||||
(`C:\Program Files` or Recycle Bin). Create a shortcut manually if you'd like to.
|
|
||||||
|
|
||||||
Microsoft doesn't like cheapskate developers too,
|
|
||||||
but might only gently warn you about that, which you can safely ignore.
|
|
||||||
|
|
||||||
### linux
|
### linux
|
||||||
|
|
||||||
The Linux version doesn't come with the desktop environment integration.
|
Download `yarr-*-linux64.zip`, unzip it, place `yarr` in `$HOME/.local/bin`
|
||||||
For easy access on DE it is recommended to create a desktop menu entry by
|
and run [the script](etc/install-linux.sh).
|
||||||
by following the steps below:
|
|
||||||
|
|
||||||
unzip -x yarr*.zip
|
|
||||||
sudo mv yarr /usr/local/bin/yarr
|
|
||||||
sudo nano /usr/local/share/applications/yarr.desktop
|
|
||||||
|
|
||||||
and pasting the content:
|
|
||||||
|
|
||||||
[Desktop Entry]
|
|
||||||
Name=yarr
|
|
||||||
Exec=/usr/local/bin/yarr -open
|
|
||||||
Icon=rss
|
|
||||||
Type=Application
|
|
||||||
Categories=Internet;
|
|
||||||
|
|
||||||
For self-hosting, see `yarr -h` for auth, tls & server configuration flags.
|
For self-hosting, see `yarr -h` for auth, tls & server configuration flags.
|
||||||
|
For building from source code, see [build.md](build.md)
|
||||||
|
|
||||||
## build
|
For Fever API support, see [fever.md](fever.md).
|
||||||
|
|
||||||
Install `Go >= 1.16` and `gcc`. Get the source code:
|
|
||||||
|
|
||||||
git clone https://github.com/nkanaev/yarr.git
|
|
||||||
|
|
||||||
Then run one of the corresponding commands:
|
|
||||||
|
|
||||||
# create an executable for the host os
|
|
||||||
make build_macos # -> _output/macos/yarr.app
|
|
||||||
make build_linux # -> _output/linux/yarr
|
|
||||||
make build_windows # -> _output/windows/yarr.exe
|
|
||||||
|
|
||||||
# ... or start a dev server locally
|
|
||||||
make serve # starts a server at http://localhost:7070
|
|
||||||
|
|
||||||
# ... or build a docker image
|
|
||||||
docker build -t yarr .
|
|
||||||
|
|
||||||
## credits
|
## credits
|
||||||
|
|
||||||
|
@@ -6,6 +6,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -29,9 +30,18 @@ func Template(path string) *template.Template {
|
|||||||
if !found {
|
if !found {
|
||||||
tmpl = template.Must(template.New(path).Delims("{%", "%}").Funcs(template.FuncMap{
|
tmpl = template.Must(template.New(path).Delims("{%", "%}").Funcs(template.FuncMap{
|
||||||
"inline": func(svg string) template.HTML {
|
"inline": func(svg string) template.HTML {
|
||||||
svgfile, _ := FS.Open("graphicarts/" + svg)
|
svgfile, err := FS.Open("graphicarts/" + svg)
|
||||||
content, _ := ioutil.ReadAll(svgfile)
|
// should never happen
|
||||||
svgfile.Close()
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer svgfile.Close()
|
||||||
|
|
||||||
|
content, err := ioutil.ReadAll(svgfile)
|
||||||
|
// should never happen
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
return template.HTML(content)
|
return template.HTML(content)
|
||||||
},
|
},
|
||||||
}).ParseFS(FS, path))
|
}).ParseFS(FS, path))
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
//go:build release
|
||||||
// +build release
|
// +build release
|
||||||
|
|
||||||
package assets
|
package assets
|
||||||
@@ -8,6 +9,7 @@ import "embed"
|
|||||||
//go:embed graphicarts
|
//go:embed graphicarts
|
||||||
//go:embed javascripts
|
//go:embed javascripts
|
||||||
//go:embed stylesheets
|
//go:embed stylesheets
|
||||||
|
//go:embed manifest.json
|
||||||
var embedded embed.FS
|
var embedded embed.FS
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
BIN
src/assets/graphicarts/android/android-launchericon-144-144.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
src/assets/graphicarts/android/android-launchericon-192-192.png
Normal file
After Width: | Height: | Size: 8.3 KiB |
BIN
src/assets/graphicarts/android/android-launchericon-48-48.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
src/assets/graphicarts/android/android-launchericon-512-512.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
src/assets/graphicarts/android/android-launchericon-72-72.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
src/assets/graphicarts/android/android-launchericon-96-96.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-down"><polyline points="6 9 12 15 18 9"></polyline></svg>
|
|
Before Width: | Height: | Size: 269 B |
BIN
src/assets/graphicarts/favicon.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
9
src/assets/graphicarts/favicon.svg
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-anchor-favicon">
|
||||||
|
<circle cx="12" cy="5" r="3" stroke-width="4" stroke="#ffffff"></circle>
|
||||||
|
<line x1="12" y1="22" x2="12" y2="8" stroke-width="4" stroke="#ffffff"></line>
|
||||||
|
<path d="M5 12H2a10 10 0 0 0 20 0h-3" stroke-width="4" stroke="#ffffff"></path>
|
||||||
|
|
||||||
|
<circle cx="12" cy="5" r="3"></circle>
|
||||||
|
<line x1="12" y1="22" x2="12" y2="8"></line>
|
||||||
|
<path d="M5 12H2a10 10 0 0 0 20 0h-3"></path>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 603 B |
Before Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 2.2 KiB |
BIN
src/assets/graphicarts/ios/100.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
src/assets/graphicarts/ios/1024.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
src/assets/graphicarts/ios/114.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
src/assets/graphicarts/ios/120.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
src/assets/graphicarts/ios/128.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
src/assets/graphicarts/ios/144.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
src/assets/graphicarts/ios/152.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
src/assets/graphicarts/ios/16.png
Normal file
After Width: | Height: | Size: 515 B |
BIN
src/assets/graphicarts/ios/167.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
src/assets/graphicarts/ios/180.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
src/assets/graphicarts/ios/192.png
Normal file
After Width: | Height: | Size: 8.3 KiB |
BIN
src/assets/graphicarts/ios/20.png
Normal file
After Width: | Height: | Size: 699 B |
BIN
src/assets/graphicarts/ios/256.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
src/assets/graphicarts/ios/29.png
Normal file
After Width: | Height: | Size: 939 B |
BIN
src/assets/graphicarts/ios/32.png
Normal file
After Width: | Height: | Size: 1010 B |
BIN
src/assets/graphicarts/ios/40.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/assets/graphicarts/ios/50.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
src/assets/graphicarts/ios/512.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
src/assets/graphicarts/ios/57.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
src/assets/graphicarts/ios/58.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
src/assets/graphicarts/ios/60.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
src/assets/graphicarts/ios/64.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
src/assets/graphicarts/ios/72.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
src/assets/graphicarts/ios/76.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
src/assets/graphicarts/ios/80.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
src/assets/graphicarts/ios/87.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-list"><line x1="8" y1="6" x2="21" y2="6"></line><line x1="8" y1="12" x2="21" y2="12"></line><line x1="8" y1="18" x2="21" y2="18"></line><line x1="3" y1="6" x2="3.01" y2="6"></line><line x1="3" y1="12" x2="3.01" y2="12"></line><line x1="3" y1="18" x2="3.01" y2="18"></line></svg>
|
|
Before Width: | Height: | Size: 482 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg>
|
|
Before Width: | Height: | Size: 346 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-more-vertical"><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
|
|
Before Width: | Height: | Size: 341 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-settings"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>
|
|
Before Width: | Height: | Size: 1011 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trash-2"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line></svg>
|
|
Before Width: | Height: | Size: 448 B |
BIN
src/assets/graphicarts/windows11/LargeTile.scale-100.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
src/assets/graphicarts/windows11/LargeTile.scale-125.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
src/assets/graphicarts/windows11/LargeTile.scale-150.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
src/assets/graphicarts/windows11/LargeTile.scale-200.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
src/assets/graphicarts/windows11/LargeTile.scale-400.png
Normal file
After Width: | Height: | Size: 69 KiB |
BIN
src/assets/graphicarts/windows11/SmallTile.scale-100.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
src/assets/graphicarts/windows11/SmallTile.scale-125.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
src/assets/graphicarts/windows11/SmallTile.scale-150.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
src/assets/graphicarts/windows11/SmallTile.scale-200.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
src/assets/graphicarts/windows11/SmallTile.scale-400.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
src/assets/graphicarts/windows11/SplashScreen.scale-100.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
src/assets/graphicarts/windows11/SplashScreen.scale-125.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
src/assets/graphicarts/windows11/SplashScreen.scale-150.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
src/assets/graphicarts/windows11/SplashScreen.scale-200.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
src/assets/graphicarts/windows11/SplashScreen.scale-400.png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
src/assets/graphicarts/windows11/Square150x150Logo.scale-100.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
src/assets/graphicarts/windows11/Square150x150Logo.scale-125.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
src/assets/graphicarts/windows11/Square150x150Logo.scale-150.png
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
src/assets/graphicarts/windows11/Square150x150Logo.scale-200.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
src/assets/graphicarts/windows11/Square150x150Logo.scale-400.png
Normal file
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 602 B |
After Width: | Height: | Size: 715 B |
After Width: | Height: | Size: 722 B |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 602 B |
After Width: | Height: | Size: 715 B |
After Width: | Height: | Size: 722 B |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.1 KiB |