Skip to content

Commit c541249

Browse files
committed
- implementing recording (no monitoring at the moment)
for mplayer and vlc - zero size recordings will be deleted when player stops
1 parent 0739d80 commit c541249

File tree

2 files changed

+61
-22
lines changed

2 files changed

+61
-22
lines changed

pyradio/player.py

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,12 @@ def _is_in_playback_token(self, a_string):
620620
return True
621621
return False
622622

623+
def _clear_empty_mkv(self):
624+
if self.recording > 0 and self.recording_filename:
625+
if os.path.exists(self.recording_filename):
626+
if os.path.getsize(self.recording_filename) == 0:
627+
os.remove(self.recording_filename)
628+
623629
def updateStatus(self, *args):
624630
stop = args[0]
625631
process = args[1]
@@ -649,7 +655,7 @@ def updateStatus(self, *args):
649655
continue
650656
subsystemOut = subsystemOut.strip()
651657
subsystemOut = subsystemOut.replace('\r', '').replace('\n', '')
652-
logger.error('DE subsystemOut = "{0}"'.format(subsystemOut))
658+
# logger.error('DE subsystemOut = "{0}"'.format(subsystemOut))
653659

654660
if self.oldUserInput['Input'] != subsystemOut:
655661
if (logger.isEnabledFor(logging.DEBUG)):
@@ -836,7 +842,10 @@ def updateStatus(self, *args):
836842
if detect_if_player_exited():
837843
if logger.isEnabledFor(logging.INFO):
838844
logger.info('----==== player disappeared! ====----')
839-
stop_player(from_update_thread=True)
845+
stop_player(
846+
from_update_thread=True,
847+
player_disappeared=True
848+
)
840849
else:
841850
if logger.isEnabledFor(logging.INFO):
842851
logger.info('Crash detection is off; waiting to timeout')
@@ -845,12 +854,16 @@ def updateStatus(self, *args):
845854
if detect_if_player_exited():
846855
if logger.isEnabledFor(logging.INFO):
847856
logger.info('----==== player disappeared! ====----')
848-
stop_player(from_update_thread=True)
857+
stop_player(
858+
from_update_thread=True,
859+
player_disappeared = True
860+
)
849861
else:
850862
if logger.isEnabledFor(logging.INFO):
851863
logger.info('Crash detection is off; waiting to timeout')
852864
if (logger.isEnabledFor(logging.INFO)):
853865
logger.info('updateStatus thread stopped.')
866+
self._clear_empty_mkv()
854867

855868
def updateMPVStatus(self, *args):
856869
stop = args[0]
@@ -953,6 +966,7 @@ def updateMPVStatus(self, *args):
953966
logger.info('Crash detection is off; waiting to timeout')
954967
if (logger.isEnabledFor(logging.INFO)):
955968
logger.info('MPV updateStatus thread stopped.')
969+
self._clear_empty_mkv()
956970

957971
def _close_pipe(self, sock):
958972
if platform.startswith('win'):
@@ -1174,6 +1188,7 @@ def do_crash_detection(detect_if_player_exited, stop):
11741188
fp.close()
11751189
except:
11761190
pass
1191+
self._clear_empty_mkv()
11771192

11781193
def _request_mpv_info_data(self, sock):
11791194
with self.status_update_lock:
@@ -2340,17 +2355,20 @@ def _buildStartOpts(self, streamUrl, playList=False):
23402355
if self.USE_PROFILE == -1:
23412356
self.USE_PROFILE = self._configHasProfile()
23422357

2343-
if self.USE_PROFILE == 1:
2344-
opts.append('-profile')
2345-
opts.append(self.profile_name)
2346-
if (logger.isEnabledFor(logging.INFO)):
2347-
logger.info('Using profile: "[{}]"'.format(self.profile_name))
2358+
if self._recording == self.RECORD_WITH_SILENCE:
2359+
opts.append('--profile=silent')
23482360
else:
2349-
if (logger.isEnabledFor(logging.INFO)):
2350-
if self.USE_PROFILE == 0:
2351-
logger.info('Profile "[{}]" not found in config file!!!'.format(self.profile_name))
2352-
else:
2353-
logger.info('No usable profile found')
2361+
if self.USE_PROFILE == 1:
2362+
opts.append('-profile')
2363+
opts.append(self.profile_name)
2364+
if (logger.isEnabledFor(logging.INFO)):
2365+
logger.info('Using profile: "[{}]"'.format(self.profile_name))
2366+
else:
2367+
if (logger.isEnabledFor(logging.INFO)):
2368+
if self.USE_PROFILE == 0:
2369+
logger.info('Profile "[{}]" not found in config file!!!'.format(self.profile_name))
2370+
else:
2371+
logger.info('No usable profile found')
23542372

23552373
if playList:
23562374
opts.append('-playlist')
@@ -2366,6 +2384,14 @@ def _buildStartOpts(self, streamUrl, playList=False):
23662384
#opts.append('-dumpfile')
23672385
#opts.append('/home/spiros/.config/pyradio/recordings/rec.mkv')
23682386
## opts.append(r'C:\Users\Spiros\AppData\Roaming\pyradio\recordings\rec.mkv')
2387+
logger.error('\n\nself._recording = {}'.format(self._recording))
2388+
if self._recording > 0:
2389+
self.recording_filename = self.getrecording_filename(self.name, '.mkv')
2390+
opts.append('-dumpstream')
2391+
opts.append('-dumpfile')
2392+
opts.append(self.recording_filename)
2393+
if logger.isEnabledFor(logging.DEBUG):
2394+
logger.debug('---=== Starting Recording: "{}" ===---',format(self.recording_filename))
23692395
return opts
23702396

23712397
def _mute(self):
@@ -2608,6 +2634,14 @@ def _buildStartOpts(self, streamUrl, playList=False):
26082634
#opts.append('--sout')
26092635
#opts.append('file/ts:/home/spiros/.config/pyradio/recordings/rec.mkv')
26102636
## opts.append(r'file/ts:C:\Users\Spiros\AppData\Roaming\pyradio\recordings\rec.mkv')
2637+
logger.error('\n\nself._recording = {}'.format(self._recording))
2638+
if self._recording > 0:
2639+
self.recording_filename = self.getrecording_filename(self.name, '.mkv')
2640+
opts.append('--sout')
2641+
opts.append(r'file/ts:' + self.recording_filename)
2642+
opts.append(self.recording_filename)
2643+
if logger.isEnabledFor(logging.DEBUG):
2644+
logger.debug('---=== Starting Recording: "{}" ===---',format(self.recording_filename))
26112645
return opts
26122646

26132647
def _mute(self):

pyradio/radio.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3335,6 +3335,7 @@ def _show_extra_commands_help(self):
33353335
r ||R|ename current playlist.
33363336
C ||C|lear all registers.
33373337
u |Show |U|nnamed Register.
3338+
o ||O|pen config dir in file manager.
33383339
33393340
|Any other key exits current mode.
33403341
'''
@@ -3348,6 +3349,7 @@ def _show_extra_commands_help(self):
33483349
c |Clear |c|urrent register.
33493350
C ||C|lear all registers.
33503351
u |Show |U|nnamed Register.
3352+
o ||O|pen config dir in file manager.
33513353
33523354
|Any other key exits current mode.
33533355
'''
@@ -3356,6 +3358,7 @@ def _show_extra_commands_help(self):
33563358
p ||P|aste to current playlist.
33573359
r ||R|ename current playlist.
33583360
u |Show |U|nnamed Register.
3361+
o ||O|pen config dir in file manager.
33593362
33603363
|Any other key exits current mode.
33613364
'''
@@ -4470,6 +4473,7 @@ def _show_recording_status_in_header(
44704473
from_header_update=False,
44714474
player_disappeared=False
44724475
):
4476+
logger.error('\n\n')
44734477
if self._limited_height_mode or \
44744478
self._limited_width_mode:
44754479
return
@@ -4497,6 +4501,7 @@ def _show_recording_status_in_header(
44974501
self.outerBodyWin.addstr(w_header, curses.color_pair(4))
44984502
self.outerBodyWin.addstr(']', curses.color_pair(13))
44994503
if player_disappeared:
4504+
logger.error('with refreshBody')
45004505
self.refreshBody()
45014506

45024507
def _open_playlist(self, a_url=None):
@@ -8610,17 +8615,17 @@ def keypress(self, char):
86108615
if self.ws.operation_mode == self.ws.NORMAL_MODE:
86118616
if char == ord('|'):
86128617
self._reset_status_bar_right()
8613-
if self.player.PLAYER_NAME == 'mpv':
8614-
self.player.recording = 1 if self.player.recording == 0 else 0
8615-
if self.player.recording > 0:
8616-
if self.player.isPlaying():
8617-
self.player.already_playing = True
8618-
else:
8619-
self.player.already_playing = False
8618+
# if self.player.PLAYER_NAME == 'mpv':
8619+
self.player.recording = 1 if self.player.recording == 0 else 0
8620+
if self.player.recording > 0:
8621+
if self.player.isPlaying():
8622+
self.player.already_playing = True
86208623
else:
86218624
self.player.already_playing = False
8622-
self._show_recording_status_in_header()
8623-
self._show_recording_toggle_window()
8625+
else:
8626+
self.player.already_playing = False
8627+
self._show_recording_status_in_header()
8628+
self._show_recording_toggle_window()
86248629

86258630
elif char == curses.ascii.BEL:
86268631
''' ^G - show groups '''

0 commit comments

Comments
 (0)