mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 16:47:31 -05:00
#30 - WIP - adds Icecast TCP(v2.3) and HTTP(v2.4) server support. Adds streaming tab and ability to add/delete/change streaming configurations. Adds streaming channel alias id so that aliases can be tagged to stream to one or more stream channels. Adds initial support for broadcastify streaming.
This commit is contained in:
@@ -1,17 +1,17 @@
|
||||
/*******************************************************************************
|
||||
* SDR Trunk
|
||||
* Copyright (C) 2014-2016 Dennis Sheirer
|
||||
*
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
******************************************************************************/
|
||||
@@ -27,6 +27,8 @@ import javax.swing.JTable;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
|
||||
import audio.broadcast.BroadcastModel;
|
||||
import audio.broadcast.BroadcastPanel;
|
||||
import map.MapPanel;
|
||||
import map.MapService;
|
||||
import module.decode.event.CallEventPanel;
|
||||
@@ -56,122 +58,121 @@ public class ControllerPanel extends JPanel
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private AliasController mAliasController;
|
||||
private AudioPanel mAudioPanel;
|
||||
private AudioPanel mAudioPanel;
|
||||
private BroadcastPanel mBroadcastPanel;
|
||||
private CallEventPanel mCallEventPanel;
|
||||
private ChannelController mChannelController;
|
||||
private ChannelController mChannelController;
|
||||
private ChannelList mChannelStateList;
|
||||
private ChannelModel mChannelModel;
|
||||
private ChannelModel mChannelModel;
|
||||
private ChannelSpectrumPanel mChannelSpectrumPanel;
|
||||
private MapPanel mMapPanel;
|
||||
private MapPanel mMapPanel;
|
||||
private MessageActivityPanel mMessageActivityPanel;
|
||||
private TunerViewPanel mTunerManagerPanel;
|
||||
|
||||
private JideTabbedPane mTabbedPane;
|
||||
protected JTable mChannelActivityTable = new JTable();
|
||||
protected JTable mChannelActivityTable = new JTable();
|
||||
|
||||
public ControllerPanel( AudioManager audioManager,
|
||||
AliasModel aliasModel,
|
||||
ChannelModel channelModel,
|
||||
ChannelMapModel channelMapModel,
|
||||
ChannelProcessingManager channelProcessingManager,
|
||||
MapService mapService,
|
||||
SettingsManager settingsManager,
|
||||
SourceManager sourceManager,
|
||||
TunerModel tunerModel )
|
||||
{
|
||||
mChannelModel = channelModel;
|
||||
public ControllerPanel(AudioManager audioManager,
|
||||
AliasModel aliasModel,
|
||||
BroadcastModel broadcastModel,
|
||||
ChannelModel channelModel,
|
||||
ChannelMapModel channelMapModel,
|
||||
ChannelProcessingManager channelProcessingManager,
|
||||
MapService mapService,
|
||||
SettingsManager settingsManager,
|
||||
SourceManager sourceManager,
|
||||
TunerModel tunerModel)
|
||||
{
|
||||
mChannelModel = channelModel;
|
||||
|
||||
mAudioPanel = new AudioPanel( settingsManager, sourceManager, audioManager );
|
||||
mAudioPanel = new AudioPanel(settingsManager, sourceManager, audioManager);
|
||||
|
||||
mMapPanel = new MapPanel( mapService, settingsManager );
|
||||
|
||||
mMessageActivityPanel = new MessageActivityPanel( channelProcessingManager );
|
||||
mMapPanel = new MapPanel(mapService, settingsManager);
|
||||
|
||||
mCallEventPanel = new CallEventPanel( settingsManager, channelProcessingManager );
|
||||
|
||||
mChannelSpectrumPanel = new ChannelSpectrumPanel( settingsManager,
|
||||
channelProcessingManager );
|
||||
mMessageActivityPanel = new MessageActivityPanel(channelProcessingManager);
|
||||
|
||||
mChannelStateList = new ChannelList( channelModel, channelProcessingManager,
|
||||
settingsManager, mAudioPanel );
|
||||
mBroadcastPanel = new BroadcastPanel(broadcastModel);
|
||||
|
||||
mChannelController = new ChannelController( channelModel, channelMapModel,
|
||||
sourceManager, aliasModel );
|
||||
|
||||
mAliasController = new AliasController( aliasModel, settingsManager );
|
||||
|
||||
mTunerManagerPanel = new TunerViewPanel( tunerModel );
|
||||
mCallEventPanel = new CallEventPanel(settingsManager, channelProcessingManager);
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
private void init()
|
||||
{
|
||||
setLayout( new MigLayout( "insets 0 0 0 0 ",
|
||||
"[grow,fill]",
|
||||
"[grow,fill]") );
|
||||
|
||||
//Tabbed View - configuration, calls, messages, map
|
||||
mTabbedPane = new JideTabbedPane();
|
||||
mTabbedPane.setFont( this.getFont() );
|
||||
mTabbedPane.setForeground( Color.BLACK );
|
||||
mTabbedPane.addTab( "Tuners", mTunerManagerPanel );
|
||||
mTabbedPane.addTab( "Channels", mChannelController );
|
||||
mTabbedPane.addTab( "Aliases", mAliasController );
|
||||
mTabbedPane.addTab( "Channel Spectrum", mChannelSpectrumPanel );
|
||||
mTabbedPane.addTab( "Events", mCallEventPanel );
|
||||
mTabbedPane.addTab( "Messages", mMessageActivityPanel );
|
||||
mTabbedPane.addTab( "Map", mMapPanel );
|
||||
mChannelSpectrumPanel = new ChannelSpectrumPanel(settingsManager,
|
||||
channelProcessingManager);
|
||||
|
||||
mChannelStateList = new ChannelList(channelModel, channelProcessingManager,
|
||||
settingsManager, mAudioPanel);
|
||||
|
||||
mChannelController = new ChannelController(channelModel, channelMapModel,
|
||||
sourceManager, aliasModel);
|
||||
|
||||
mAliasController = new AliasController(aliasModel, broadcastModel, settingsManager);
|
||||
|
||||
mTunerManagerPanel = new TunerViewPanel(tunerModel);
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
private void init()
|
||||
{
|
||||
setLayout(new MigLayout("insets 0 0 0 0 ",
|
||||
"[grow,fill]",
|
||||
"[grow,fill]"));
|
||||
|
||||
//Tabbed View - configuration, calls, messages, map
|
||||
mTabbedPane = new JideTabbedPane();
|
||||
mTabbedPane.setFont(this.getFont());
|
||||
mTabbedPane.setForeground(Color.BLACK);
|
||||
mTabbedPane.addTab("Tuners", mTunerManagerPanel);
|
||||
mTabbedPane.addTab("Channels", mChannelController);
|
||||
mTabbedPane.addTab("Aliases", mAliasController);
|
||||
mTabbedPane.addTab("Channel Spectrum", mChannelSpectrumPanel);
|
||||
mTabbedPane.addTab("Events", mCallEventPanel);
|
||||
mTabbedPane.addTab("Map", mMapPanel);
|
||||
mTabbedPane.addTab("Messages", mMessageActivityPanel);
|
||||
mTabbedPane.addTab("Streaming", mBroadcastPanel);
|
||||
|
||||
/**
|
||||
* Change listener to enable/disable the channel spectrum display
|
||||
* only when the tab is visible, and a channel has been selected
|
||||
*/
|
||||
mTabbedPane.addChangeListener(new ChangeListener()
|
||||
{
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent event)
|
||||
{
|
||||
int index = mTabbedPane.getSelectedIndex();
|
||||
|
||||
Component component = mTabbedPane.getComponentAt(index);
|
||||
|
||||
if (component instanceof ChannelSpectrumPanel)
|
||||
{
|
||||
mChannelSpectrumPanel.setEnabled(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
mChannelSpectrumPanel.setEnabled(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Change listener to enable/disable the channel spectrum display
|
||||
* only when the tab is visible, and a channel has been selected
|
||||
*/
|
||||
mTabbedPane.addChangeListener( new ChangeListener()
|
||||
{
|
||||
@Override
|
||||
public void stateChanged( ChangeEvent event )
|
||||
{
|
||||
int index = mTabbedPane.getSelectedIndex();
|
||||
|
||||
Component component = mTabbedPane.getComponentAt( index );
|
||||
|
||||
if( component instanceof ChannelSpectrumPanel )
|
||||
{
|
||||
mChannelSpectrumPanel.setEnabled( true );
|
||||
}
|
||||
else
|
||||
{
|
||||
mChannelSpectrumPanel.setEnabled( false );
|
||||
}
|
||||
}
|
||||
} );
|
||||
|
||||
/* Register each of the components to receive channel events when the
|
||||
* channels are selected or change */
|
||||
mChannelModel.addListener( mCallEventPanel );
|
||||
mChannelModel.addListener( mChannelStateList );
|
||||
mChannelModel.addListener( mChannelSpectrumPanel );
|
||||
mChannelModel.addListener( mMessageActivityPanel );
|
||||
|
||||
JScrollPane channelStateListScroll = new JScrollPane();
|
||||
channelStateListScroll.getViewport().setView( mChannelStateList );
|
||||
channelStateListScroll.setPreferredSize( new Dimension( 400, 500 ) );
|
||||
mChannelModel.addListener(mCallEventPanel);
|
||||
mChannelModel.addListener(mChannelStateList);
|
||||
mChannelModel.addListener(mChannelSpectrumPanel);
|
||||
mChannelModel.addListener(mMessageActivityPanel);
|
||||
|
||||
// JideSplitPane audioChannelListSplit = new JideSplitPane( JideSplitPane.VERTICAL_SPLIT );
|
||||
// audioChannelListSplit.setDividerSize( 5 );
|
||||
// audioChannelListSplit.add( mAudioPanel );
|
||||
// audioChannelListSplit.add( channelStateListScroll );
|
||||
JScrollPane channelStateListScroll = new JScrollPane();
|
||||
channelStateListScroll.getViewport().setView(mChannelStateList);
|
||||
channelStateListScroll.setPreferredSize(new Dimension(400, 500));
|
||||
|
||||
//Set preferred size to influence the split between these panels
|
||||
// audioChannelListSplit.setPreferredSize( new Dimension( 400, 500 ) );
|
||||
mTabbedPane.setPreferredSize( new Dimension( 880, 500 ) );
|
||||
|
||||
JideSplitPane channelSplit = new JideSplitPane( JideSplitPane.HORIZONTAL_SPLIT );
|
||||
channelSplit.setDividerSize( 5 );
|
||||
channelSplit.add( channelStateListScroll );
|
||||
channelSplit.add( mTabbedPane );
|
||||
|
||||
add( channelSplit );
|
||||
}
|
||||
//Set preferred size to influence the split between these panels
|
||||
mTabbedPane.setPreferredSize(new Dimension(880, 500));
|
||||
|
||||
JideSplitPane channelSplit = new JideSplitPane(JideSplitPane.HORIZONTAL_SPLIT);
|
||||
channelSplit.setDividerSize(5);
|
||||
channelSplit.add(channelStateListScroll);
|
||||
channelSplit.add(mTabbedPane);
|
||||
|
||||
add(channelSplit);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +44,12 @@ public class ThreadPoolManager
|
||||
|
||||
public ScheduledExecutorService getScheduledExecutorService()
|
||||
{
|
||||
if( mExecutor == null )
|
||||
{
|
||||
mExecutor = Executors.newScheduledThreadPool( THREAD_POOL_SIZE,
|
||||
new NamingThreadFactory( "sdrtrunk" ) );
|
||||
}
|
||||
|
||||
return mExecutor;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user