An open API service indexing awesome lists of open source software.

https://github.com/vhscom/lumpen-radio

Mirror of Lumpen Radio on Codeberg. πŸ“» React Native app for WLPN 105.5 FM Lumpen Radio Chicago
https://github.com/vhscom/lumpen-radio

cocoapods javascript objective-c react-native

Last synced: 24 days ago
JSON representation

Mirror of Lumpen Radio on Codeberg. πŸ“» React Native app for WLPN 105.5 FM Lumpen Radio Chicago

Awesome Lists containing this project

README

          

# WLPN 105.5 FM Lumpen Radio Chicago

Never listen to a radio commercial again. The free [Lumpen Radio app](https://appsto.re/us/NedV7.i) is here!

[![Lumpen Radio](https://codeberg.org/vhs/lumpen-radio/raw/branch/trunk/app-cover-fs8.png "Application simulated in iOS 13")](https://vhs.codeberg.page/code/lumpen-radio/assets/5_6226640352183320745.mp4)

And StreamingKit reverse proxy...

[![Skipr](https://codeberg.org/vhs/lumpen-radio/raw/branch/trunk/packages/skipr/skipr-logo-fs8.png)](https:///codeberg.org/vhs/lumpen-radio/src/branch/master/packages/skipr)

## About

- [StreamingKit](https://github.com/tumtumtum/StreamingKit/) iOS audio provider
- Built with [React Native](https://facebook.github.io/react-native/) and [Webpack](https://webpack.js.org/)
- Created using [RN Webpack Starter Kit](https://vhs.codeberg.page/code/react-native-webpack-starter-kit)

## Features

- Streams any `audio/mpeg` stream listed in `Constants.h`
- Includes reverse proxy to update stream without app rebuild
- Background audio playback and lock screen integration
- Gorgeous video loop with AirPlay support
- Intelligent handling of common audio interruptions
- Detailed connection status and play state messaging
- Translations for English, Spanish, Chinese, Korean and German
- Remote control via Bluetooth and compatible headset
- Supports iPad and iPhone with iOS 8+

## Installation

Get the latest version from Apple. [Download it](https://appsto.re/us/NedV7.i) from the App Store now.

## Usage

- Tapping radio button starts and stops the audio
- Long-pressing the radio button restarts the audio
- If the app crashes for any reason please close and reopen it

## Development

Looking to build your own React Native project with ES6/7? Check out my [React Native Starter Kit](https://codeberg.org/vhs/react-native-webpack-starter-kit). Otherwise proceed enthusiastically.

1. Clone this project.
2. Install dependencies.

```sh
npm install
pod install
```

3. Run `npm start` to start the Webpack watcher, Webpack Dev Server and the React Packager in a single shot.

**Note:** The Webpack watcher builds the `index.[platform].js` file expected by React Native.

4. Open `WLPN.xcworkspace` in XCode and run the project.

### Bundling for distribution

1. Execute `npm run bundle` to generate the [offline JS bundle](https://facebook.github.io/react-native/docs/running-on-device-ios.html#using-offline-bundle).
2. For iOS, update `AppDelegate.m` to load from pre-bundled file on disk.
3. Test the application, create an archive and submit to the store.

Learn more about [Submitting to App Store](https://vhs.codeberg.page/reflecting-on-react-native-development/#submitting-to-app-store).

### File structure

β”œβ”€β”€ android # Source code for Android
β”œβ”€β”€ iOS # Source code for iOS
β”‚ β”œβ”€β”€ Classes # Objective-C, Swift classes
β”‚ β”‚ β”œβ”€β”€ AppDelegate # Application initialization and React Native config
β”‚ β”‚ β”œβ”€β”€ AudioManager # Lib to access platform APIs and bridge to JS
β”‚ β”‚ └── RootViewController # RCTRootViewController override to manage Remote Control events
β”‚ β”œβ”€β”€ Images.xcassets # Launch screens and native image assets
β”‚ β”œβ”€β”€ Resources # Other native resources
β”‚ β”œβ”€β”€ Constants.h # Native globals
β”‚ β”œβ”€β”€ Info.plist # Project configuration
β”‚ β”œβ”€β”€ main.jsbundle # React Native placeholder file
β”‚ └── main.m # Application entry point
β”œβ”€β”€ packages/skipr # StreamingKit Reverse Proxy (AGPLv3)
β”œβ”€β”€ src # Source code
β”‚ β”œβ”€β”€ assets # Static resources
β”‚ β”‚ └── videos # Video assets
β”‚ β”œβ”€β”€ components # React Native Components
β”‚ β”œβ”€β”€ lib # JS libraries
β”‚ β”œβ”€β”€ stores # JS persistence with Flux
β”‚ β”œβ”€β”€ actions.es6 # Flux actions
β”‚ β”œβ”€β”€ main.es6 # JS application entry point
β”‚ └── styles.es6 # React Native Style Rules
β”œβ”€β”€ .flowconfig # Facebook flow config file
β”œβ”€β”€ .gitignore # VCS blacklist
β”œβ”€β”€ Podfile # CocoaPods dependency specs
β”œβ”€β”€ Podfile.lock # Native dependency lock file
β”œβ”€β”€ WLPN-Bridging-Header.h # Objective-C, Swift bridge support file
β”œβ”€β”€ ignored-modules.js # RegExp containing modules ignored by watcher
β”œβ”€β”€ npm-shrinkwrap.js # JS dependency lock file
β”œβ”€β”€ package.json # NPM dependency specs
β”œβ”€β”€ webpack-watch.js # Filesystem watcher for JS
└── webpack-config.js # WebPack configuration

Diagram created using [tree](https://mama.indstate.edu/users/ice/tree/) written by Steve Baker and contributors.

## Todo

- [ ] Add [Expo](https://expo.io/) and [TypeScript](https://www.typescriptlang.org/) support

## Ideas

- [ ] Long-press opens modal with stream restart
- [ ] Long-pauses restart stream or select target
- [ ] Show playing metadata from stream headers
- [ ] Stop background animation with disconnect

## Known issues

- [ ] Stream stops playing after a 20s phone call
- [x] Stream buffer timeout on connection restart

## Credits

Designed and developed by VHS.

Splash screen and vectors by [Jermiah Chiu](https://jeremiahchiu.com).

App interface and icon by [VHS](https://vhs.codeberg.page).

Turntable loop video by [Scott Schiller](https://www.scottschiller.com/), BSD and used with permission.

Inspired by [open source work](https://github.com/stetro/domradio-ios/) by Steffen TrΓΆster.

Many thanks to [Public Media Institute](https://www.publicmediainstitute.com/), [Lumpen Radio](https://www.lumpenradio.com) and all the wonderful beta testers for helping make this happen. You are beautiful.

- Ed Marszewski
- Logan Bay
- Eric Olson
- Wayne Wright
- Elizabeth Rossman
- Joseph Alfallah
- Harrison Jones
- Nick Hausman

## Rights

Source code dual-licensed under MIT (Xcode 7, Swift 2) or BSD (Xcode 11, Swift 5). StreamingKit reverse proxy available under AGPLv3 and kept in directory `packages/skipr`. All other creative assets copyright their respective owners. The text of the source code license is included in the file LICENSE in the source.