Tsacdop è un lettore di podcast sviluppato con Flutter, un'app pulita, semplicemente bella e amichevole, che è anche gratuita e open source. https://funkwhale.it
Go to file
ImgBotApp d11fc8c157
[ImgBot] Optimize images
*Total -- 6,247.44kb -> 5,308.08kb (15.04%)

/assets/listennotes.png -- 31.97kb -> 6.51kb (79.65%)
/android/app/src/main/res/mipmap-xxhdpi/ic_splash.png -- 14.98kb -> 5.28kb (64.79%)
/android/app/src/main/res/mipmap-xhdpi/ic_splash.png -- 8.97kb -> 3.79kb (57.77%)
/android/app/src/main/res/mipmap-xxhdpi/text_light.png -- 10.30kb -> 4.67kb (54.64%)
/android/app/src/main/res/mipmap-hdpi/ic_splash.png -- 6.50kb -> 3.13kb (51.91%)
/android/app/src/main/res/mipmap-xhdpi/text_light.png -- 5.29kb -> 2.64kb (50%)
/android/app/src/main/res/mipmap-hdpi/text_light.png -- 4.44kb -> 2.40kb (46.01%)
/assets/logo.png -- 10.37kb -> 5.61kb (45.9%)
/android/app/src/main/res/mipmap-xxxhdpi/ic_notification.png -- 10.37kb -> 5.61kb (45.9%)
/android/app/src/main/res/mipmap-xhdpi/text.png -- 5.41kb -> 2.93kb (45.82%)
/android/app/src/main/res/drawable-xxxhdpi/ic_stat_pause_circle_filled.png -- 2.05kb -> 1.11kb (45.78%)
/android/app/src/main/res/drawable-xxxhdpi/ic_stat_play_circle_filled.png -- 2.43kb -> 1.32kb (45.5%)
/android/app/src/main/res/drawable-xxxhdpi/ic_stat_replay_10.png -- 2.83kb -> 1.55kb (45.22%)
/android/app/src/main/res/mipmap-xxxhdpi/ic_splash.png -- 21.24kb -> 11.93kb (43.85%)
/android/app/src/main/res/drawable-xxxhdpi/ic_stat_forward_30.png -- 2.98kb -> 1.68kb (43.72%)
/android/app/src/main/res/drawable-xxxhdpi/ic_notification.png -- 1.60kb -> 0.90kb (43.36%)
/android/app/src/main/res/mipmap-hdpi/text.png -- 4.65kb -> 2.64kb (43.18%)
/android/app/src/main/res/mipmap-mdpi/ic_splash.png -- 4.10kb -> 2.34kb (42.98%)
/android/app/src/main/res/mipmap-xxhdpi/ic_notification.png -- 7.19kb -> 4.17kb (42.05%)
/preview/banner.png -- 184.21kb -> 107.04kb (41.89%)
/android/app/src/main/res/mipmap-xxxhdpi/text.png -- 14.46kb -> 8.43kb (41.71%)
/assets/buymeacoffee.png -- 4.02kb -> 2.36kb (41.35%)
/assets/localizely_logo.png -- 17.56kb -> 10.48kb (40.32%)
/assets/text_light.png -- 14.09kb -> 8.44kb (40.11%)
/android/app/src/main/res/mipmap-xxxhdpi/text_light.png -- 14.09kb -> 8.44kb (40.11%)
/android/app/src/main/res/mipmap-mdpi/text_light.png -- 2.44kb -> 1.46kb (40.02%)
/android/app/src/main/res/mipmap-xhdpi/ic_notification.png -- 4.57kb -> 2.75kb (39.82%)
/assets/localizely_logo_light.png -- 18.10kb -> 10.98kb (39.34%)
/assets/text.png -- 10.51kb -> 6.42kb (38.9%)
/android/app/src/main/res/mipmap-xxhdpi/text.png -- 10.51kb -> 6.42kb (38.9%)
/android/app/src/main/res/drawable-xxhdpi/ic_stat_forward_30.png -- 2.53kb -> 1.56kb (38.29%)
/android/app/src/main/res/drawable-xxhdpi/ic_stat_replay_10.png -- 2.38kb -> 1.47kb (37.99%)
/android/app/src/main/res/drawable-xxhdpi/ic_stat_play_circle_filled.png -- 2.06kb -> 1.29kb (37.32%)
/android/app/src/main/res/drawable-xxhdpi/ic_stat_pause_circle_filled.png -- 1.77kb -> 1.12kb (36.87%)
/android/app/src/main/res/mipmap-ldpi/ic_splash.png -- 3.05kb -> 1.97kb (35.43%)
/android/app/src/main/res/mipmap-hdpi/ic_notification.png -- 3.27kb -> 2.11kb (35.38%)
/android/app/src/main/res/mipmap-mdpi/text.png -- 2.55kb -> 1.66kb (35.07%)
/assets/shownote.png -- 29.14kb -> 19.01kb (34.77%)
/android/app/src/main/res/drawable-xxhdpi/ic_notification.png -- 1.28kb -> 0.84kb (33.97%)
/android/app/src/main/res/drawable-xhdpi/ic_stat_forward_30.png -- 1.39kb -> 0.94kb (32.12%)
/android/app/src/main/res/drawable-xhdpi/ic_stat_play_circle_filled.png -- 1.10kb -> 0.75kb (31.59%)
/android/app/src/main/res/drawable-xhdpi/ic_stat_replay_10.png -- 1.31kb -> 0.90kb (31.44%)
/android/app/src/main/res/drawable-xhdpi/ic_stat_pause_circle_filled.png -- 0.97kb -> 0.68kb (30.03%)
/android/app/src/main/res/mipmap-mdpi/ic_notification.png -- 2.06kb -> 1.48kb (28.23%)
/assets/listennotes_light.png -- 17.17kb -> 12.47kb (27.41%)
/android/app/src/main/res/drawable-hdpi/ic_stat_replay_10.png -- 1.14kb -> 0.86kb (24.29%)
/android/app/src/main/res/drawable-hdpi/ic_stat_play_circle_filled.png -- 0.93kb -> 0.71kb (23.66%)
/android/app/src/main/res/drawable-hdpi/ic_stat_forward_30.png -- 1.15kb -> 0.89kb (23.1%)
/android/app/src/main/res/drawable-xhdpi/ic_notification.png -- 0.74kb -> 0.58kb (21.77%)
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -- 9.21kb -> 7.24kb (21.37%)
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -- 5.53kb -> 4.36kb (21.26%)
/android/app/src/main/res/drawable-hdpi/ic_stat_pause_circle_filled.png -- 0.83kb -> 0.66kb (20.66%)
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -- 10.99kb -> 8.73kb (20.56%)
/android/app/src/main/res/mipmap-ldpi/ic_notification.png -- 1.57kb -> 1.26kb (19.54%)
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -- 14.99kb -> 12.32kb (17.82%)
/preview/1585893851312.png -- 587.34kb -> 485.60kb (17.32%)
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -- 10.02kb -> 8.37kb (16.55%)
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -- 5.91kb -> 5.00kb (15.28%)
/preview/1585893877702.png -- 700.71kb -> 596.86kb (14.82%)
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -- 4.70kb -> 4.09kb (12.96%)
/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -- 3.14kb -> 2.75kb (12.55%)
/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -- 4.05kb -> 3.57kb (11.89%)
/android/app/src/main/res/drawable-hdpi/ic_notification.png -- 0.62kb -> 0.55kb (11.69%)
/preview/1585894013809.png -- 432.34kb -> 382.24kb (11.59%)
/preview/1585893997451.png -- 451.73kb -> 399.39kb (11.59%)
/preview/1585894051734.png -- 345.19kb -> 305.47kb (11.51%)
/preview/1585893920721.png -- 602.17kb -> 534.17kb (11.29%)
/preview/1585896237809.png -- 1,077.27kb -> 955.92kb (11.26%)
/preview/1585893838840.png -- 617.31kb -> 548.16kb (11.2%)
/android/app/src/main/res/drawable-mdpi/ic_stat_forward_30.png -- 0.65kb -> 0.58kb (11.11%)
/android/app/src/main/res/drawable-mdpi/ic_stat_replay_10.png -- 0.63kb -> 0.56kb (10.94%)
/preview/1585893866457.png -- 416.52kb -> 371.41kb (10.83%)
/preview/1585894026070.png -- 387.12kb -> 346.73kb (10.43%)
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -- 3.56kb -> 3.20kb (10.12%)
/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -- 1.87kb -> 1.69kb (9.45%)
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -- 2.47kb -> 2.25kb (8.67%)
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -- 2.60kb -> 2.37kb (8.65%)
/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -- 2.32kb -> 2.19kb (5.68%)
/android/app/src/main/res/drawable-mdpi/ic_stat_play_circle_filled.png -- 0.51kb -> 0.49kb (4.74%)
/android/app/src/main/res/drawable-mdpi/ic_stat_pause_circle_filled.png -- 0.48kb -> 0.46kb (4.07%)
/assets/fireside.jpg -- 14.86kb -> 14.73kb (0.87%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2020-07-31 18:26:22 +00:00
.circleci Enable R8 2020-07-16 19:30:08 +08:00
android [ImgBot] Optimize images 2020-07-31 18:26:22 +00:00
assets [ImgBot] Optimize images 2020-07-31 18:26:22 +00:00
ios Start to build iOS version 2020-05-10 16:56:04 +08:00
lib Fixed get player height issue. 2020-07-31 16:50:48 +08:00
preview [ImgBot] Optimize images 2020-07-31 18:26:22 +00:00
test Seperate webfeed plugin from app. 2020-07-26 21:48:30 +08:00
tool modified: tool/env.dart 2020-05-19 03:04:04 +08:00
.gitignore Seperate webfeed plugin from app. 2020-07-26 21:48:30 +08:00
.metadata first commit 2020-02-09 20:29:09 +08:00
CHANGELOG.md Effective dart. 2020-07-26 18:20:42 +08:00
LICENSE Create LICENSE 2020-02-12 21:07:52 +08:00
README.md Update README.md 2020-07-31 17:25:31 +08:00
pubspec.yaml Seperate webfeed plugin from app. 2020-07-26 21:48:30 +08:00

README.md

Tsacdop Banner

Build Status - Cirrus GitHub Release Github Downloads Localizely style: effective dart

About

Enjoy podcasts with Tsacdop.

Tsacdop is a podcast player developed with Flutter, a clean, simply beautiful and friendly app, which is also free and open source.

Credit to Flutter team and all involved plugins, especially webfeed and Just_Audio.

The podcast search engine is powered by ListenNotes.

Features

  • Podcast group management
  • Playlist support
  • Sleep timer / speed setting
  • OMPL file export and import
  • Auto syncing in background
  • Listening and subscription history record
  • Dark mode / accent color
  • Download for offline play
  • Auto download new episodes / auto delete outdated downloads
  • Settings backup

More to come...

Preview

Home Page Group Podcast Episode Dark Mode

Localization

Support languages

  • English

  • Chinese Simplified

  • French

    Translator: ppp

Please Email me you'd like to contribute to support more languages!

Credit to Localizely for kind support to open source projects.

License

Tsacdop is licensed under the GPL v3.0 license.

Build

Tsacdop uses ListenNotes API 1.0 pro to search for podcasts, which is not free, so I can not expose the API key in the repo. If you want to build the app, you need to create a new file named .env.dart in lib folder. Add the following code to .env.dart.

final environment = {"apiKey":"APIKEY"};

You can get your own API key on ListenNotes, basic plan is free for everyone. Replace "APIKEY" with it. If no api key is added, the search function in the app won't work. But you can still add podcasts by using an RSS link or importing an OMPL file.

Archetecture

Plugins

  • Local storage
    • sqflite
    • shared_preferences
  • Audio
    • just_audio
    • audio_service
  • State management
    • provider
  • Download
    • flutter_downloader

Directory Structure

UI
src
├──home
   ├──home.dart [Homepage]
   ├──searc_podcast.dart [Search Page]
   ├──playlist.dart [Playlist Page]
├──podcasts
   ├──podcast_manage.dart [Group Page]
   ├──podcast_detail.dart [Podcast Page]
├──episodes
   ├──episode_detail.dart [Episode Page]
├──settings
   ├──setting.dart [Setting Page]

STATE
src
├──state
   ├──audio_state.dart [Audio State]
   ├──download_state.dart [Episode Download]
   ├──podcast_group.dart [Podcast Groups]
   ├──refresh_podcast.dart [Episode Refresh]
   ├──setting_state.dart [Setting]

Known Issue

  • Playlist is unstable

Getting Started

This project is a starting point for a Flutter application.

Here are a few resources to get you started if this is your first Flutter project:

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.