Metadata-Version: 2.1
Name: eisenradio
Version: 2.2
Summary: Play radio. Style your App.
Author: René Horn
Author-email: rene_horn@gmx.net
License: MIT License
        ===========
        
        Copyright (c) [2022] [René Horn]
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
        
Keywords: audio,aac repair,aacp repair
Classifier: Framework :: Flask
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: OS Independent
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: Android
Classifier: Development Status :: 5 - Production/Stable
Classifier: Topic :: Multimedia :: Sound/Audio :: Capture/Recording
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Provides-Extra: testing
License-File: LICENSE.rst

Eisenradio - a Web radio expandable collection
==============================================

   ![alt logo of eisenradio](https://github.com/44xtc44/EisenRadio/raw/dev/docs/source/aircraft_logo.png)
   ![Tests](https://github.com/44xtc44/eisenradio/actions/workflows/tests.yml/badge.svg?branch=dev)
  
Info
----
 * Organize your web radios; delete and update, backup and restore
 * Style your app with pictures, write a comment or import a poem, song or study text to have a good time
 * Create a shuffled playlist within a local audio files folder in seconds
 * grab radio content until ISP bandwidth limit hits, with my professional aacPlus repair
 
Links
----
newest version on GitHub dev branch, then PyPi Package, Android or Snap, Docker
 * Android: download to mobile (link below .-apk), rename *WHL to *ZIP, extract with Android file manager
 * Android: https://pypi.org/project/eisenradio-apk/
 * Snap: https://snapcraft.io/eisenradio
 * GitHub: https://github.com/44xtc44/eisenradio

Eisenradio - the boring details 
-------------------------------
 * REST API app on blueprints and ApplicationFactory of the Flask microframework with a SQLite database
 * First Internet Radio App that can run a Spectrum Analyser in a Web browser (Feb,2022)
 * A local Python Flask Web Server connects to the radio server in behalf of you. Your browser connects to Flask
   * Backend (server) opens the connection, buffers the radio stream and presents it to localhost IP: 127.0.0.1
   * Frontend (browser) controls the backend, plays internet and local audio playlists
   * Browser audio element connects `http://localhost:5050/sound/classic` that streams `http://37.251.146.169:8000/streamHD`
   * Closing the browser does not disconnect the server listen (buffer discarded) nor streaming connections
 * Plays and repairs aac plus files; play (1.3), repairs since version (1.4); 
 * Backup and restore are easy work with the help of an optional ex/imported human-readable *ini file
 * Blacklist feature for recorded files (titles); delete only once 
   * lists can be ex/imported via a json dictionary file to other devices
 * playing local audio uses the web server multiple file upload feature
 * Multithreading allows you an unlimited number of radio connections at the same time, until the ISP Bandwidth limit hits
 * Android APK Package uses Python Kivy for multi-touch and promotes the app to "foreground service" (to not get killed)

    
         """ sketch """  

         |B |               |S | Flask web server, Header[Werkzeug/2.0.2 Python/3.10.1]
         |r |listen         |e |-------> starRadio
         |o |------->   <-- |r |
         |w |GhettoRecorder |v |-------> planetRadio
         |s |--->    <----- |e |
         |e |               |r |-------> satteliteRadio
         |r |               |  |
         net: localhost     net: internet
         CORS: accept       CORS: deny
         audioNode: 1,-1    audioNode: 0, 0
         JavaScript,CSS     Python,SQL

    Cross-Origin Resource Sharing mechanism (CORS) 
    i.a. prevents a Browser from analysing audio from internet
    
command line 
------------
Eisenradio is using the 'GhettoRecorder' package https://pypi.org/project/GhettoRecorder/

    echo "call the command line main menu:" 
    $ ghettorecorder

You can export your ``settings.ini and blacklist.json`` 
via "Tools/Export/Names and URL's" menu from your database.
Updated ``blacklist.json`` can be imported to your database.

pip install
-----------
    """ xxs Linux xxs """
    $ pip3 install eisenradio
    $ python3 -m eisenradio.wsgi  # watch flask

    """ xxm Windows xxm """
    > pip install eisenradio
    > python -m eisenradio.wsgi

    """ xxl big company xxl """
    $$$ pip3 install eisenradio
    $$$ python3 -m eisenradio.app  # serve flask
    """ for the sake of completeness, a python
        production server 'waitress' is started """

Pytest
---
Shows how to init a flask instance and perform some tests on it. More hints in the test comments.

    > ~ ... /eisenradio $ pytest -s    # -s print to console

Is now part of the testautomation with flake8 and tox on GitHub.

Uninstall
---
Python user:

* find the module location
* uninstall and then remove remnants

>$ pip3 show eisenradio

>$ pip3 uninstall eisenradio

Location: ... /python310/site-packages
