Git Product home page Git Product logo

fourviere / fourviere-podcast Goto Github PK

View Code? Open in Web Editor NEW
17.0 1.0 4.0 47.29 MB

The feed editor for the open podcasting Fourviere is an opensource Podcast RSS feed editor that supports all the podcasting 2.0 tags and allow to publish the feed and the episode via FTP or Amazon S3 ecc...

Home Page: https://www.fourviere.io

License: MIT License

HTML 0.11% JavaScript 0.41% Rust 16.73% TypeScript 77.45% CSS 1.69% Shell 0.04% Astro 3.57%
podcast rss

fourviere-podcast's Issues

Design a image resize solution

iTunes requires episode and podcast image with a fixed size of 2000 * 2000.

Rust: Use photon.rs for creating a command that given a local file resize the file to a given size creating a new temp file and returning the size

Typescript: integrate the frontend addin a little confirmation before uploading a file, if accepted resize the file and upload the resized one otherwise upload the other.

Important: frontend have to pass the landing resolution, format and compression.

[APP - RUST] - Unit test Rust code

Tauri commands included in fs, ftp and network modules are very easy to test with minimal effort.
S3 unit testing requires a major rewriting to use s3s as a stub
I will prepare a PR for fs, ftp and network testing

Episode guid / id

If episode has not a guid create a new one while importing, and replace the routing based on the episode index with a more stable routing that uses the guid

[APP - TS] Improve form performance

Is your feature request related to a problem? Please describe.

  • The form lags, improve the performance of the Formik form.
  • Improve the quality of the form code making it more readable

Describe the solution you'd like
No proposal

Describe alternatives you've considered
NA

Notes
Some performance issues are noticed on itunes category field

Off page upload

The media upload works also in off peace condition:
When an uploaded is started and the trigger field/progress component is unmounted.

Check if this flows works: the expected behaviour is that when you display back the component te update is applied

Verify it for the s3 case and the ftp one.

Debounce disk writes

Each state change triggers a write in the disk.
Debounce it to reduce the Disk I/O load

[CI] - Pipeline does not catch ts npm package error

CI does not catch problem with the types.

Add ts typecheck for validation

Steps for reproduce:
A wrong package (a link instead npm package) was shipped and the dependence was not in the node_modules, but no error was spotted at the pipeline level

[APP - TS] Broken boolean import in edit-feed module

Describe the bug
Broken import Boolean from "@fourviere/ui/lib/form/fields/Boolean";
Should be import Boolean from "@fourviere/ui/lib/form/fields/boolean";

To Reproduce
Steps to reproduce the behavior:

  1. npm run dev

Expected behavior
App starts

Screenshots
image

BUG - debounce function undefined when displaying code

Describe the bug
debounce function undefined when displaying code

To Reproduce
Steps to reproduce the behavior:

  1. build app on linux arch
  2. open the page show code the app crashes

Expected behavior
The app should continue working

Screenshots
n/a

[APP - TS RUST] - State validation

Validate the app state, if there is a schema mismatch prefix the current app.json file with app_<datetime>_bak.json and create a new one

[APP] - Add item list

Add new tab with episodes, when a click is done over the episode a form with the following fields is displayed.
The form also contains the update logic.

  • title
  • link (href)
  • description
  • guid (#text + isPermaLink)
  • pubDate
  • enclosure
  • itunes:author
  • itunes:subtitle
  • itunes:summary
  • itune:duration
  • itunes:explicit
  • itunes:image (href)
  • itunes:season
  • itunes:episode (should be prepopulated by previous episode + 1)
  • itunes:episodeType

Verify of those fields are available in the core/schema and if missing add it

[App] Add support for specific Itunes tags

All these channel tags should to be showed in the itunes tab

  • <itunes:title>
  • <itunes:image>
  • <itunes:category>
  • <itunes:explicit>
  • <itunes:author>
  • <itunes:owner>
  • <itunes:type>
  • <itunes:new-feed-url>
  • <itunes:block>
  • <itunes:complete>

0 showed before component

When uploading an image, when the upload start a 0 is displayed before the upload component.

This number should be not displayed

[APP - TS] - State persistence

Right now we are persisting the state on every state change.
This solution is not performant because generates a huge amount of disk IO.
We want to adopt a more performant persistence strategy

Acceptance Criteria

  • Persist the state every X seconds (=~30)
  • Persist the state before closing the application

Could be nice to rely on these tauri events

  • WINDOW_CLOSE_REQUESTED - tauri://close-requested
  • WINDOW_DESTROYED - tauri://destroyed

[ts - perf] - When there are feeds with a lots of episode all operations are delayed

Describe the bug
The current implementation has some performance issues when a feed has lots of episodes. The actions like episode creation, deletion or feed changes take a huge amount of time.
Find a way to optimize for this usecase.

Examples:

  • split projects in single file
  • use a more performant serializer / deserializer
  • improve the rendering of the episode list paginating / infinite scrolling / virtual scroll

To Reproduce
Steps to reproduce the behavior:

  1. Import 2 or 3 podcast with an huge number of episodes (ex.joe rogan show)
  2. Should see performance degradation on creating and deleting episodes

[APP - RUST] - Simplify Error management in commands

We can avoid converting each error to String in commands using thiserror from macro and deriving Serialize for the newer Error enum.
See this discussion for the implementation details.
It may be useful to introduce logging to see from which error, the newer one are derived using fmt::Debug

[APP TS] - Force fields to array

Converting from xml to jsobject we lose the information about what is an object or what is an array of object, use the podcast feed documentation to undersand which field is an array and convert it to array before the validation.

  • If field does not exist skip the conversion
  • remove some validation done to accept single values instead an array

The feature should be incapsulated inside one function that uses jsonpath for patch it and the array fields should be grouped in an array constant

[APP -TS] Create a feed configuration view

According the project state data structure a project can have some configuration informations.
Create a window that shows this configuration and allow tho change it.

  • Use views/edit-feed/general as reference.
  • It should be saved on change
  • the selection between ftp or s3 should show or hide the specific part of the form
  • the form should show this data structure:
interface Configuration {
  remotes: {
    remote: "s3" | "ftp" | "none";
    s3?: {
      bucket_name: string;
      region: string;
      endpoint: string;
      access_key: string;
      secret_key: string;
      http_host: string;
      https: boolean;
      path: string;
    };
    ftp?: {
      host: string;
      port: number;
      user: string;
      password: string;
      path: string | null;
      http_host: string;
      https: boolean;
    };
  };
}

[APP] S3 uploads problems

  1. Configuration form don't save https as boolean, but save it as array and when passing to rust it complains because receiving sequence instead boolean
  2. When uploading file to cloudflare s3 api fix the path composition, when folder is null, it creates a path with 2 slashes like https://pub-eb06f0ba8d794aff9e9cdea1c28b71e3.r2.dev//593016e8-78b8-46b2-957f-aadd4cbca816.jpg , verify if uploading with ftp generates the same error.

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.