Coder Social home page Coder Social logo

libretime / libretime Goto Github PK

View Code? Open in Web Editor NEW
759.0 61.0 208.0 399.85 MB

LibreTime: Radio Broadcast & Automation Platform

Home Page: http://libretime.org

License: GNU Affero General Public License v3.0

PHP 72.78% HTML 2.36% CSS 3.05% JavaScript 17.03% Makefile 0.08% Smarty 0.01% Shell 0.33% Python 4.20% Jinja 0.07% Dockerfile 0.09%
radio broadcasting airtime liquidsoap broadcast online-radio radio-station libretime audio audio-applications

libretime's Introduction

LibreTime

Financial Contributors on Open Collective

LibreTime makes it easy to run your own online or terrestrial radio station. It is a community managed fork of the AirTime project.

It is managed by a friendly inclusive community of stations from around the globe that use, document and improve LibreTime. Join us in fixing bugs and in defining how we manage the codebase going forward.

Check out the documentation for more information and start broadcasting!

Please note that LibreTime is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

You can find details about our development process in the contributing guide.

Support

To get support for any questions or problems you might have using the software we have a forum at discourse.libretime.org. We are moving towards using the forum to provide community support and reserving the github issue queue for confirmed bugs and well-formed feature requests.

You can also contact us through Matrix (#libretime:matrix.org) where you can talk with other users and developers.

Contributors

Code Contributors

This project exists thanks to all the people who contribute.

Financial Contributors

Become a financial contributor and help us sustain our community on OpenCollective.

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website.

License

LibreTime is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License.

Copyright

Copyright (c) 2011-2017 Sourcefabric z.ΓΊ.

Copyright (c) 2017-2023 LibreTime Community

Please refer to the LEGACY file for more information.

libretime's People

Contributors

asantoni avatar caveman99 avatar codenift avatar danielhjames avatar dependabot[bot] avatar dpsommer avatar drigato avatar farggus avatar frecuencialibre avatar fritzsf avatar hairmare avatar hammyhavoc avatar hj791205 avatar jooola avatar kmahelona avatar lapotor avatar libretime-bot avatar localizer avatar mdritchie avatar mkonecny avatar naomiaro avatar paddatrapper avatar renovate[bot] avatar rgrinberg avatar robbt avatar robertelder avatar ryanrain avatar thnkloud9 avatar weblate avatar zklosko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

libretime's Issues

Problem: Add dialog to prompt user to change the default IceCast password upon install

Since many users will be just rolling this out without much expertise, we should at least try to encourage secure installations.

Taking a queue from the how the setup dialog prompts the user to change their rabbitmq password, we should also include something that asks them to change their icecast password or perhaps handle this via the web interface and then saves it automatically.
Or perhaps it can autogenerate a secure password and seed it into the web interface/icecast config.

Ideally the rabbitmq password prompt would be handled better in the same way as well since most people will likely ignore the prompt and just use the default password thus creating a potential vulnerability.

Problem: Smart Block filter filter includes phrases internal to words on matches

If you say for instance wanted to match on track title contains ID, the smart block would include any words that had the sequence of the letters id anywhere in the track. This would match tracks containing ID as well as tracks containing the word Friday.

This is kind of an annoyance and I'm not sure how easy it is to fix but I wanted to take a stab at it.

Problem: User can't set Source for Master or Show Source under Live Broadcasting Stream Setting

In addition we need to modify the code to pull some functionality from 2.5.x as this interacts with Liquidsoap configuration.

Here are some notes from Taiga.io
The functionality most likely uses Harbor Input via Liquidsoap to work - http://savonet.sourceforge.net/doc-svn/harbor.html

And here is the analysis from the 2.5.x code.

For instance the getters and setters in airtime_mvc/application/models/StreamSetting.php: $settings["dj_live_stream_port"] = self::getDjLiveStreamPort();

The code that was removed was the pypo python app that interfaced with liquidsoap - this function in python_apps/pypo/pypo/pypofetch.py
def regenerate_liquidsoap_conf(self, setting):
has had all functionality stripped out probably because they just have a static liquidsoap configuration for airtime.pro

The next steps is to copy the function from the airtime 2.5.2 codebase and then re-enable the forms to see if this works and troubleshoot away. Seems doable.

Uploading tracks, stops randomly.

When uploading tracks, thru uploader file process stops randomly. It can stop on first file or after upload 20 tracks and stop. Uploading can be resumed only after canceling uploading hanged file.

Got this in zendphp.log

2017-02-19T13:02:12+03:00 INFO (6): ***radio****.com Checking autoplaylist poll
2017-02-19T13:02:20+03:00 ERR (3): ***radio****.com [MediaController.php:140 - postAction()] - chmod(): No such file or directory
#0 [internal function]: exception_error_handler(2, 'chmod(): No suc...', '/usr/share/airt...', 943, Array)
#1 /usr/share/airtime/application/models/StoredFile.php(943): chmod('', 420)
#2 /usr/share/airtime/application/services/MediaService.php(40): Application_Model_StoredFile::moveFileToStor('', 'Quanta - Center...', false)
#3 /usr/share/airtime/application/models/airtime/CcFiles.php(160): Application_Service_MediaService::importFileToLibrary('http://***radio****....', '', 'Quanta - Center...', 1, false)
#4 /usr/share/airtime/application/models/airtime/CcFiles.php(99): CcFiles::createAndImport(Array, '', 'Quanta - Center...')
#5 /usr/share/airtime/application/modules/rest/controllers/MediaController.php(124): CcFiles::createFromUpload(Array)
#6 /usr/share/php/libzend-framework-php/Zend/Controller/Action.php(516): Rest_MediaController->postAction()
#7 /usr/share/php/libzend-framework-php/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('postAction')
#8 /usr/share/php/libzend-framework-php/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#9 /usr/share/php/libzend-framework-php/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#10 /usr/share/php/libzend-framework-php/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#11 /usr/share/airtime/application/airtime-boot.php(88): Zend_Application->run()
#12 /usr/share/airtime/public/index.php(66): require_once('/usr/share/airt...')
#13 {main}

/USR/SHARE/AIRTIME/APPLICATION/MODELS/STOREDFILE.PHP(943): CHMOD('', 420)

Problem: Radio Page player doesn't play sound

The player on the front page before you login doesn't produce sound for me when I click play. The internal listen/preview functionality works so hopefully it is something simple.

Problem: There is no way to identify podcast tracks with ambiguous album metadata to the podcast they originated from

The current implementation of the album podcast album metadata insertion will only add the podcast name as the album for tracks where the id3 tag lacks any information for Album. This should work for most cases where the album id3 tag is already a unique and useful identifier but there are some podcasts that have album metadata that is not useful for identifying the podcast. In this case we need to provide an option to override album metadata even if it exists.

I personally think that overriding should be on by default but we could provide an option that disables it either on a podcast specific setting or a general sitewide setting that applies to every podcast.

This is necessary for my station to produce smart blocks that target specific podcasts and would also be helpful in the automatic creation of smart blocks to coincide with podcasts. If we don't override the album metadata there is no way to link a track back to the podcast it originates from. For this reason alone I think it may make sense to just override the album metadata even if it exists. I know this is also the default behavior of iTunes which is by far the most widely used podcast software and also putting the podcast name in the album is the recommended naming convention as per the iTunes standards for id3 tags.

feature-request: add cloning function in smart blocks/playlists

when I click on the Smart block, pops up only 2 options: preview and remove. It would be nice to add a feature copy/cloning.
For example I have a smart block with certain parameters and duration 1-hour, I need the same block, but the duration of 30 minutes. Now to make it, I need to manually re-fill all parameters.

Error during importing smart block

I found error during importing smart block in current program in time when tracks were chaning
(in old versions of airtime 2.5.1 in that time there was problem, that metainfo were changes back to previous trackname when new track starting)
vlcsnap-2017-03-26-12h42m00s683

Problem: Password Reset does not work for station owners (aka super admins)

This is not coupled to billing so it was not covered in #11. Since station owner users are managed by WHMCS the get to go to a special place to reset their password. On non SaaS deploys this is certainly not what we need, everyone including the owner should be able to reset their password.

Solution: Make the superadmin info on the Password Reset page configurable.

  • ability to deactivate the text block on the page
  • ensure that resetting works for super admins
  • make the link that is shown when WHMCS is active configurable

Problem: Changing the admin's password causes the auto playlist function to fail.

I found bug. If I change admin's password, the autoplaylist stops working and refers to an access permission error.

PHP Fatal error: Call to a member function canSchedule () on a non-object in /usr/share/airtime/php/airtime_mvc/application/models/Scheduler.php on line 142 , referer: http://mysite.domain/schedule
Found a link to errors in Apache2 logs

zendpho.log shows

[Logging.php:166 - loggingShutdownCallback()] - Call to a member function canSchedule() on a non-object at /usr/share/airtime/php/airtime_mvc/application/models/Scheduler.php:142
array (
'type' => 1,
'message' => 'Call to a member function canSchedule() on a non-object',
'file' => '/usr/share/airtime/php/airtime_mvc/application/models/Scheduler.php',
'line' => 142,

After changing password back to admin, it's working again

created new admin user and it works

Run python tests through travis

Currently the available python tests are not getting run regularly.

Travis was configured to run php tests in #14 and python needs to catch up.

Solution: Add python to travis setup and run tests.

This needs a bit of a complex setup since we install python in addition to the already available php.

Travis is on ubuntu10 so I don't see any surprises there. An example of how to install python on a project that is on a different language is at travis-ci/travis-ci#4090 (comment).

  • analyzer
  • pypo (no existing tests)
  • api_clients

Problem: Podcasts failing to download from libsyn due to SSL error

I was trying to download DemocracyNow's podcast and a number of errors cropped up in the log regarding SSL.

From the looks of the log here, there might be something we need to do.

[2017-03-10 15:22:39,352: WARNING/PoolWorker-2] /usr/local/lib/python2.7/dist-packages/requests-2.13.0-py2.7.egg/requests/packages/urllib3/util/ssl_.py:132: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecurePlatformWarning
[2017-03-10 15:22:40,042: ERROR/PoolWorker-2] Certificate did not match expected hostname: traffic.libsyn.com. Certificate: {'notAfter': 'Jan 23 21:04:38 2018 GMT', 'subjectAltName': (('DNS', '.app.libsynpro.com'), ('DNS', 'app.libsynpro.com')), 'subject': ((('organizationalUnitName', u'Domain Control Validated'),), (('commonName', u'.app.libsynpro.com'),))}
[2017-03-10 15:22:40,045: INFO/PoolWorker-2] podcast-download[php_58c30b0e82b7c9.35832819]: Error during file download: hostname 'traffic.libsyn.com' doesn't match either of '.app.libsynpro.com', 'app.libsynpro.com'
[2017-03-10 15:22:40,052: ERROR/PoolWorker-2] Task podcast-download[php_58c30b0e82b7c9.35832819] raised unexpected: TypeError('SSLError(CertificateError("hostname 'traffic.libsyn.com' doesn't match either of '
.app.libsynpro.com', 'app.libsynpro.com'",),) is not JSON serializable',)
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/celery-4.0.2-py2.7.egg/celery/app/trace.py", line 367, in trace_task
R = retval = fun(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery-4.0.2-py2.7.egg/celery/app/trace.py", line 622, in protected_call
return self.run(args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/airtime_celery-0.1-py2.7.egg/airtime-celery/tasks.py", line 173, in podcast_download
return json.dumps(obj)
File "/usr/lib/python2.7/json/init.py", line 243, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: SSLError(CertificateError("hostname 'traffic.libsyn.com' doesn't match either of '
.app.libsynpro.com', 'app.libsynpro.com'",),) is not JSON serializable

Problem: Installer is broken due to missing soundcloud, env and rabbitmq settings

This was introduced by #14 and needs to be fixed. I looks like it needs a multi pronged fix since there are two main failures.

  1. missing soundcloud config
  2. no support for env subdir in conf dir
  3. setup does not create cloud_storage.conf and leaves rabbitmq-analyzer.ini empty

Workaround from #14 (comment)

# after completing setup (ie no error from rabbitmq, but it hangs in the end)
#sudo bash -c 'echo soundcloud_client_id = 0 >> /etc/airtime/airtime.conf'
#sudo bash -c 'echo soundcloud_client_secret = 0 >> /etc/airtime/airtime.conf'
#sudo bash -c 'echo soundcloud_redirect_uri = http://example.org >> /etc/airtime/airtime.conf'

# sudo ln -s /etc/airtime /etc/airtime/production
#sudo cp ./airtime_mvc/tests/conf/testing/cloud_storage.conf /etc/airtime/

# do these before running sudo commands in the last setup step!
sudo bash -c 'cat > /etc/airtime/rabbitmq-analyzer.ini <<EOD
[rabbitmq]
host = 127.0.0.1
port = 5672
user = airtime
password = airtime
vhost = /airtime
EOD'

# start icecast
sudo sed -i -e 's/ENABLE=false/ENABLE=true/' /etc/default/icecast2
sudo service icecast2 start

# reload page and you should be on the default radio page

Solution: Add soundcloud_* defaults to config file during initial generation and make /etc/airtime/<env>/ installer location sane.

  • add soundcloud to default config #25
  • make default production env and symlink it to conf dir in setup (so we catch all python things as well)
  • add a quick and dirty cloud_storage.conf install to the setup script
  • figure out why rabbitmq-analyzer.ini is empty and fix that
  • use upgraded setuptools #32 #33

We can refactor it to fall back on LIBRETIME_CONF_DIR/*.conf if LIBRETIME_CONF_DIR/ENVIRONMENT/*.conf is missing later, I need to read up on how to best do that in python.

Do we want to have nice setup steps for the soundcloud and cloud storage steps? Is anyone currently not using a file backend in cloud_storage.conf that can share an S3 example?

feature-request: Option to repeat auto playlist until a shows schedule is full

When you have a show that uses the auto playlist, my understanding is that the auto playlist will append itself to any already scheduled content in that show.

This works well if you have a smartblock that will add lots of music etc, but in some situations it's a bit restrictive.

For example: I want to completely fill a show with the following repeating pattern of content:

Ident -> Advert - > Ident - > Long-mix

I can do this by using a playlist containing smartblocks (which randomly select one of each item), but it only runs through once, and can leave us with incomplete schedules. If we had another checkbox in the show config underneath 'enable autoplaylist', to enable the looping/repeating of the auto playlist until the shows schedule was full, it would be easy to build these kind of pattern based lineups, regardless of show length etc, etc...

Call for Proposals: Future of LibreTime MVC

Hi all,

The MVC based Web-Interface in airtime_mvc/ is based on Zend Framework 1.x which has recently reached its EOL date on 2016-09-28.

Due to this something needs to be done. We can probably get away with using the framework for a little while longer, but need to start finding a consensus on how to replace it ASAP.

If you have a proposal on how to proceed, please post a new issue with the proposal and link to it from here. I'm going to make a list of the proposals in here and maybe we can use GitHub reactions like πŸ‘ and πŸ‘Ž to vote on them.

Proposals

  • TBD (I'll link to all of them here)

Problem: Add support for SSL into the installation process and/or docs

This is another longer-term priority, but it would be a good best practice addition.
I'm not sure the best way to approach the actual SSL certs etc, but it makes sense for us as a project to make it easy enough for people to figure out how to do this without needing to learn how to configure Apache by trial and error.

ghost tracks

Dear Libretime developpers,

I'm using an old Airtime instance for Radio Campus Clermont-Ferrand, and it appends once every two or three months a strange configuration.

We usually create a show for each hour with a repetition during all the month, then we fill each hour by a playlist containing smart blocks. A large part of the time, this process works correctly. But sometimes, the filling of a shows goes bad: two playlists are played simultaneously. If we remove the playlist contained in the show, it still have some ghost tracks we cannot see or remove. Usually, these ghost tracks are not covering the show, and they stop after 20 or 30 minutes.

Do you know:

  • where this playlist is programmed?
  • how to remove them?

Thank you in advance.

Problem: CORSHelper has hardcoded URLs

In CORSHelper.php#L23-L26 there are some hardcoded URLs that point to various legacy upstream locations.

Solution: make all the URLs in CORSHelper configurable through constants.php and remove legacy upstream URIs.

There should be a config where we can define what origins to allow cross site requests from. This can then be used so whitelist a stations website to make API requests from the site to Libretime work.

Idea: export/import

Hi to all! I want to share an idea and function that I have long dreamed of.
Import and export of radio programs, smart blocks, playlists, users. It would be nice if you could quickly and easily transfer data from an old server / version to a new one and do not spend a lot of time adding everything manually.
How difficult is it to implement?

Problem: Debian install has issues

The docs recommend Debian over Ubuntu but the actual install currently only works on Ubuntu. I think Debian is a better recommendation than Ubuntu since it is a less complex OS. If you ask rms he would go on a tangent about Debian being the more Free πŸ˜‰

Since this was only tested on Ubuntu lately nothing has been done to keep Debian working. Most of the issues are rather small stuff (like Debian not having curl on the CLI per default). Some of the newer python apps like analyzer and celery only have upstart scripts (where in older cases like pypo upstart falls back to the existing SysV scripts).

Solution: Test and fix the installer for Debian, convert init scripts to SysV for maximum compatibility. Fix the version recommendation in the docs.

Ubuntu will still be using upstart to keep the SysV scripts running, I think this offers the best of both worlds. Other distros (ie. CentoOS and Debian testing) will be supported by systemd anyway and we will only need one set of scripts once SysV is completely gone from our support matrix.

Problem: The UI doesn't retain customizations by user from prior logins.

Often times, navigating the track listing requires modifying the columns displayed and sort order. This is retained per session but whenever a user logs in again they need to set this up again. In practice this can be very time consuming and annoying, the alternative I'm proposing is for these settings to be stored per user and thus maintained between logins. This is the first step in improving the usability of the track UI.

Basically the column and sort order of the track UI will need to be saved somewhere in the database besides the session cookie.

Integrate community hacks

Hi all.
There are some hack already created in the AirTime community and in My opinion are very interesting and useful.

The Most important is: Jingles or Spots every xx items
https://forum.sourcefabric.org/discussion/17792/playlists-jingles-or-spots-every-xx-items-updated-new-functionality

And additional good hacks here
https://forum.sourcefabric.org/discussion/17017/several-hacksmods-for-live-metadata-auto-dj-force-deletion-charting-etc-against-2-5-1-ga

This is just a suggestion, fell free to delete if you do not like it.

Problem: Podcast Web UI doesn't confirm track download

Something in the podcast code changes we did made it so podcast downloads aren't confirmed back to the UI. Normally they should have a green check mark when they are done downloading but instead the ongoing download dialog continues to display.

This is probably an issue with the celery task callback.

Problem: Can not connect to the streaming server

After making clean install from clone git I can't connect to icecast server.
screen shot 2017-03-20 at 11 02 10
If i choose

Custom / 3rd Party Streaming
screen shot 2017-03-20 at 11 07 47

If I install from tarball it working fine.
liquidsoap logs are empty, icecast shows no errors too. Please tell me where/how to search the bug.

Problem: Playback rewind

Libretime have old Airtime bug (that was in version 2.5.1)
If you are in current program make editions like moving track in playlist or deleting another one, the current live playing can rewind back playback for several second or even to previous track

2017/03/26 12:16:39 [server:3] New client: localhost.
2017/03/26 12:16:39 [decoder:3] Method "MAD" accepted "/var/tmp/airtime/pypo/cache/scheduler/72.mp3".
2017/03/26 12:16:39 [lang:3] vars.show_name
2017/03/26 12:16:39 [server:3] Client localhost disconnected.
2017/03/26 12:16:39 [s0:3] Prepared "/var/tmp/airtime/pypo/cache/scheduler/72.mp3" (RID 0).
2017/03/26 12:16:39 [amplify_6515:3] Overriding amplification: 1.000000.
2017/03/26 12:16:39 [lang:3] timeout --signal=KILL 45 pyponotify --media-id=93 &
2017/03/26 12:16:39 [lang:3] Using stream_format 0
2017/03/26 12:16:44 [cue_cut_6571:3] Cueing out...
2017/03/26 12:16:44 [s4:3] Finished with "/var/tmp/airtime/pypo/cache/scheduler/68.mp3".
2017/03/26 12:16:44 [amplify_6575:3] End of the current overriding.
2017/03/26 12:16:44 [cross_6578:3] No next track ready yet.
2017/03/26 12:20:24 [server:3] New client: localhost.
2017/03/26 12:20:24 [lang:3] dynamic_source.get_id
2017/03/26 12:20:24 [server:3] Client localhost disconnected.
2017/03/26 12:20:28 [server:3] New client: localhost.
2017/03/26 12:20:28 [decoder:3] Method "MAD" accepted "/var/tmp/airtime/pypo/cache/scheduler/80.mp3".
2017/03/26 12:20:28 [lang:3] vars.show_name
2017/03/26 12:20:28 [server:3] Client localhost disconnected.
2017/03/26 12:20:28 [s4:3] Prepared "/var/tmp/airtime/pypo/cache/scheduler/80.mp3" (RID 1).
2017/03/26 12:20:28 [amplify_6575:3] Overriding amplification: 1.000000.
2017/03/26 12:20:28 [lang:3] timeout --signal=KILL 45 pyponotify --media-id=94 &
2017/03/26 12:20:28 [lang:3] Using stream_format 0
2017/03/26 12:20:28 [lang:3] Using stream_format 0
2017/03/26 12:20:28 [lang:3] Using stream_format 0
2017/03/26 12:20:28 [server:3] New client: localhost.
2017/03/26 12:20:28 [lang:3] dynamic_source.get_id
2017/03/26 12:20:28 [server:3] Client localhost disconnected.
2017/03/26 12:20:31 [server:3] New client: localhost.
2017/03/26 12:20:31 [lang:3] dynamic_source.get_id
2017/03/26 12:20:31 [server:3] Client localhost disconnected.
2017/03/26 12:20:32 [s0:3] Finished with "/var/tmp/airtime/pypo/cache/scheduler/72.mp3".
2017/03/26 12:20:32 [cue_cut_6511:3] End of track before cue-out point.
2017/03/26 12:20:32 [amplify_6515:3] End of the current overriding.
2017/03/26 12:20:43 [server:3] New client: localhost.
2017/03/26 12:20:43 [lang:3] queues.s8_skip
2017/03/26 12:20:43 [s4:3] Finished with "/var/tmp/airtime/pypo/cache/scheduler/80.mp3".
2017/03/26 12:20:43 [server:3] Client localhost disconnected.
2017/03/26 12:20:43 [cue_cut_6571:3] End of track before cue-out point.
2017/03/26 12:20:43 [amplify_6575:3] End of the current overriding.
2017/03/26 12:20:43 [cross_6578:3] No next track ready yet.

As you can see, here is playing 72 track, it chaning to 80, then after changing program playback rewinds to 72

Problem: We need a upgrade path/process from Airtime 2.5.x

This might be tricky but it would be good to document the process for upgrading from Airtime 2.5.x since most of the database update scripts are included this might not be too difficult. This shouldn't be a priority until we get out of alpha though because we don't want people switching their production machines until we've done more testing.

Problem: Smart Block time-based limits fill tracks until they exceed the limit.

If you have a smart block limited to 30 minutes it currently adds tracks until the time of the tracks is more than 30 minutes. For shorter limits for instance PSAs or filler tracks, one longer track can throw off the whole playlist. In my opinion in concordance with the language, tracks that exceed the limit should not be added and the algorithm should instead try to get as close to the limit as possible.

choosing Stream Label: not works

if I want to show only Station name - Show name I go to In settings-streams menu and choosing it.
but on radio page is showing only Artist - Title
Is it hard to make it work?

Problem: ZF1 might not be at its latest version

Since the current install process relies on the OS to install Zend Framework 1 it can sometimes get an an outdated version installed that misses some features (mainly security stuff).

For instance, Debian will be dropping the package with stretchy: debian#831418.

Solution: Use composer to install a vendorized version of the zf1 at version 1.12 and upgrade the code to be compatible with the new framework version.

This way it gets installed the same way as propel1 already does on the master branch.

As far as I can tell the main changes needed are rather small and maybe all we need to do is implement Zend_Rest_Controller::headAction on some controllers in addition to bumping.

I'm not sure why the missing headAction is not throwing errors left and right since debian doesn't seem to have any patches concerning this.

Setup Weblate translations integration

I'm still torn about deciding to integrate 2e9583c from 2.5.x. There absolutely needs to be some automation to keep translation working and up and running, I'm pretty sure we have some russian customers that will greatly appreciate us not breaking this.

While transifex is free for opensource, it looks like http://zanata.org/ from redhat is actually the more libre way to go. I think our setup is pretty close to a podir config as per the zanata docs.

If no one has a better proposal (I would actually prefer a solution that allows github logins) I'll do some testing on my branch with real zanata and then open a pr when it looks ready.

  • configure zanata and push initial strings
  • push new strings to zanata using travis
  • pull translated strings into github repo and/or release tarballs

Fixes #107

Problem: Large music libraries are difficult to navigate and find specific tracks.

This is more of a meta issue than a specific problem, but DJs can sometimes have a difficult time finding the tracks they upload. Finding station IDs and other filler content can be absorbed into the large pool of tracks. Some users have requested folders that divide up the library.

One idea is to create alternative views of the Library tracks filtered by different data. For instance a My Tracks view could only show tracks where the user was marked as the owner. The ability to define Folders that contain tracks that our filtered to a certain criteria could also be useful for DJs and other station production staff.

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.