Giter Site home page Giter Site logo

imobs / crab-reader Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 0.0 1.42 MB

A typesafe RSS reader in Rust and React-TS

License: MIT License

HTML 0.71% Rust 52.67% TypeScript 44.62% Shell 0.29% JavaScript 0.70% SCSS 1.00%
react rss rust tauri typescript

crab-reader's People

Contributors

dependabot[bot] avatar github-actions[bot] avatar imobs avatar renovate[bot] avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

crab-reader's Issues

Add subscription persistence

The naive approach would be to serialize the subscriptions and stories (maybe as JSON, maybe using bincode) as a file in the app data directory.

The more complex approach would be to instead use SQLite (either through something like sea-orm or the Tauri SQL plugin) and normalize everything into relational structures.

Either way, there are questions about what needs to be saved, what the unique keys would be, and what are the complex relationships between different kinds of data.

Set up UI tests

Not sure if testing-library/jest-dom will just work with vitest or if it's easier to just stick with jest despite using vite to build. The tauri docs also have some helpers for setting up mocks.

Set up Github actions

This should run in a matrix across all OS:

  • eslint (#3)
  • UI tests (#4)
  • clippy-check
  • cargo test
  • build (requires previous to pass)

Dealing with build artifacts will come later when thinking about releases.

Blocked by #3, #4.

Add module to fetch feed(s)

Add a module to handle fetching feeds. This would be a good time to explore libraries like reqwest for getting data. This should all be async and can even see about parallelizing the list of URLs like Promise.all but the rust version. For now, the raw XML string can be returned but in the future maybe it'll be better to use serde-xml.

Add RSS item view

When an entry is clicked on from the list, this will show the whole article.

Potentially blocked by adding a feed, fetching a feed, and caching feeds. Could use mock data before then.

Add component for adding a feed

This will be a simple text input that takes a URL and then sends an IPC command to rust. There it will be added to a vector (for now).

Future considerations

Could use the store plugin to save a config that can be accessed from both FE and BE. There should still be an IPC command to trigger a fetch of the feed.

Ability to mark feed items as read/unread

This might necessitate a more complex storage solution than the store plugin and maybe then it'll be helpful to have something like SQLite. The list of feeds could live in a proper database and be relational to articles. This also plays into how caching could be handled to read the database first, trigger a fetch, and then upsert the results.

Add RSS list view components

This list will pull from all feeds and sort by most recent. It will show the item title, date, and short description.

The list should be paginated or have some kind of infinite scroll (preferred) so that it's not necessary to get all feeds for all time.

Potentially blocked by adding a feed, fetching a feed, and caching feeds. Could use mock data before then.

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

cargo
src-tauri/Cargo.toml
  • tauri 1.5
  • serde 1.0
  • serde_json 1.0
  • log 0.4.20
  • reqwest 0.11.22
  • anyhow 1.0.75
  • thiserror 1.0.50
  • futures 0.3.28
  • rss 2.0.6
  • chrono 0.4.31
  • specta 1.0.5
  • tauri-specta 1.0.2
  • ammonia 3.3.0
  • strum 0.25.0
  • opml 1.1.5
  • mockito 1.2.0
  • tokio 1.33.0
  • tauri-build 1.5
github-actions
.github/workflows/ci.yml
  • actions/checkout v4
  • actions/setup-node v4
  • actions/checkout v4
  • actions/setup-node v4
  • actions/checkout v4
  • Swatinem/rust-cache v2
  • actions/checkout v4
  • Swatinem/rust-cache v2
.github/workflows/release-please.yml
  • google-github-actions/release-please-action v3
  • actions/checkout v4
.github/workflows/release.yml
  • actions/checkout v4
  • actions/setup-node v4
  • Swatinem/rust-cache v2
  • tauri-apps/tauri-action v0
npm
package.json
  • @headlessui/react ^1.7.13
  • @heroicons/react ^2.0.16
  • @hookform/resolvers ^3.0.0
  • @tauri-apps/api ^1.2.0
  • clsx ^2.0.0
  • date-fns ^2.29.3
  • react ^18.2.0
  • react-dom ^18.2.0
  • react-hook-form ^7.43.5
  • zod ^3.21.4
  • @commitlint/cli ^18.0.0
  • @commitlint/config-conventional ^18.0.0
  • @tailwindcss/typography ^0.5.9
  • @tauri-apps/cli ^1.2.2
  • @testing-library/dom ^9.0.1
  • @testing-library/jest-dom ^6.0.0
  • @testing-library/react ^14.0.0
  • @testing-library/user-event ^14.4.3
  • @types/node ^18.7.10
  • @types/react ^18.0.15
  • @types/react-dom ^18.0.6
  • @typescript-eslint/eslint-plugin ^6.0.0
  • @typescript-eslint/parser ^6.0.0
  • @vitejs/plugin-react ^4.0.0
  • @vitest/coverage-v8 ^0.34.1
  • autoprefixer ^10.4.14
  • eslint ^8.36.0
  • eslint-config-prettier ^9.0.0
  • eslint-import-resolver-typescript ^3.5.3
  • eslint-plugin-import ^2.27.5
  • eslint-plugin-jsx-a11y ^6.7.1
  • eslint-plugin-prettier ^5.0.0
  • eslint-plugin-react ^7.32.2
  • eslint-plugin-react-hooks ^4.6.0
  • husky ^8.0.3
  • jsdom ^22.0.0
  • lint-staged ^15.0.0
  • postcss ^8.4.21
  • prettier ^3.0.0
  • sass ^1.59.3
  • tailwindcss ^3.2.7
  • typescript ^5.0.0
  • vite ^4.0.0
  • vitest ^0.34.0

  • Check this box to trigger a request for Renovate to run again on this repository

Explore E2E testing

It might be possible to use selenium (or cypress) to drive E2E testing using tauri-driver. It's still in early development but would be nice to automate the full app experience.

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.