mirror of
https://github.com/RSSNext/Folo.git
synced 2026-10-19 14:31:44 +08:00
a993acb754
Long articles often failed to start: the stream had to produce decodable
audio within a fixed 10 s, while tts.folo.is takes several seconds to send
the first bytes of a long text. The timeout didn't stop the WebView, which
kept downloading and later played audio the app no longer tracked, and
playEntryTts fell back to downloading the whole file, which could start
playing over a newer stream minutes later.
- The start timeout is a 15 s stall timer that WebView progress events
(response headers, then chunks) restart, and it stops the WebView.
- Bridge events carry the request id, so events of a replaced or stopped
request are ignored, and a play command always starts over instead of
toggling the entry that is playing.
- Each WebView playback is isolated, so work left over from a replaced one
can't stop or report on the one that replaced it.
- A superseded or stopped request never falls back and its fallback
download is aborted. The player's stop button cancels a loading request.
- Segments start after the audio already queued (desktop got this in
4ab06f42b), a paused stream stays paused while more audio decodes, and
the last decode of a stream is no longer dropped.
- TTS and native playback no longer overlap: a starting stream pauses the
native player, and native playback (a podcast, the lock screen) stops
TTS unless that TTS request is the newer one.
- A stream whose download stalls after it started reports an error once
its queued audio ran out, and a WebView whose content process the system
killed is recreated instead of swallowing every later request.
- Cached TTS files are pruned once the player is set up and before each
fallback download, keeping the file the player still holds.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Folo Mobile App 📱
This is the mobile client for Folo, built with Expo. Folo organizes content into one timeline, keeping you updated on what matters, noise-free.
Features
- Customized information hub for content discovery
- AI-powered features like translation and summary
- Dynamic content support (articles, videos, images, audio)
- $POWER integration for creator economy
- Cross-platform support (iOS & Android [WIP])
- Modern UI design with native feel
Getting Started
-
Enable Corepack (if not already enabled)
corepack enable -
Install dependencies
pnpm install -
Start the development server
pnpm run dev
You can run the app on:
- iOS Simulator (
pnpm run ios) - iOS Device (
pnpm run ios:device) - Android Emulator (
pnpm run android) - Development build for full native feature testing
Project Structure
src/
├── modules/ # Feature-specific modules
│ ├── discover/ # Discovery feed features
│ └── ...
├── screens/ # App screens using file-based routing
└── ...
Development
- Built with Expo SDK [>=52]
- Uses Expo Router for navigation
- Styling with NativeWind
- State management with Jotai and Zustand
- API integration with Tanstack Query
- Full TypeScript support
Useful Resources
Need Help?
License
This project is licensed under the GNU Affero General Public License version 3. See the main project repository for full license details.