vlm.cpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:27k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * vlm.cpp : VLM Management
  3.  ****************************************************************************
  4.  * Copyright © 2008 the VideoLAN team
  5.  * $Id: 679eededa5eb67123f8525c836a861c6c0c1e773 $
  6.  *
  7.  * Authors: Jean-Baptiste Kempf <jb@videolan.org>
  8.  *          Jean-François Massol <jf.massol -at- gmail.com>
  9.  *          Clément Sténac <zorglub@videolan.org>
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2 of the License, or
  14.  * ( at your option ) any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 51 Franklin street, Fifth Floor, Boston MA 02110-1301, USA.
  24.  *****************************************************************************/
  25. #ifdef HAVE_CONFIG_H
  26. # include "config.h"
  27. #endif
  28. #include "dialogs/vlm.hpp"
  29. #ifdef ENABLE_VLM
  30. #include "dialogs/open.hpp"
  31. #include "dialogs/sout.hpp"
  32. #include "util/qt_dirs.hpp"
  33. #include <QString>
  34. #include <QComboBox>
  35. #include <QVBoxLayout>
  36. #include <QStackedWidget>
  37. #include <QLabel>
  38. #include <QWidget>
  39. #include <QGridLayout>
  40. #include <QLineEdit>
  41. #include <QCheckBox>
  42. #include <QToolButton>
  43. #include <QGroupBox>
  44. #include <QPushButton>
  45. #include <QHBoxLayout>
  46. #include <QDateTimeEdit>
  47. #include <QDateTime>
  48. #include <QSpinBox>
  49. #include <QHeaderView>
  50. #include <QScrollArea>
  51. #include <QFileDialog>
  52. VLMDialog *VLMDialog::instance = NULL;
  53. VLMDialog::VLMDialog( QWidget *parent, intf_thread_t *_p_intf ) : QVLCDialog( parent, _p_intf )
  54. {
  55.     p_vlm = vlm_New( p_intf );
  56.     if( !p_vlm )
  57.     {
  58.         msg_Warn( p_intf, "Couldn't build VLM object ");
  59.         return;
  60.     }
  61.     vlmWrapper = new VLMWrapper( p_vlm );
  62.     // UI stuff
  63.     ui.setupUi( this );
  64.     ui.saveButton->hide();
  65. #define ADDMEDIATYPES( str, type ) ui.mediaType->addItem( qtr( str ), QVariant( type ) );
  66.     ADDMEDIATYPES( N_("Broadcast"), QVLM_Broadcast );
  67.     ADDMEDIATYPES( N_("Schedule"), QVLM_Schedule );
  68.     ADDMEDIATYPES( N_("Video On Demand ( VOD )"), QVLM_VOD );
  69. #undef ADDMEDIATYPES
  70.     /* Schedule Stuffs */
  71.     QGridLayout *schetimelayout = new QGridLayout( ui.schedBox );
  72.     QLabel *schetimelabel = new QLabel( qtr( "Hours / Minutes / Seconds:" ) );
  73.     schetimelayout->addWidget( schetimelabel, 0, 0 );
  74.     QLabel *schedatelabel = new QLabel( qtr( "Day / Month / Year:" ) );
  75.     schetimelayout->addWidget( schedatelabel, 1, 0 );
  76.     QLabel *scherepeatLabel = new QLabel( qtr( "Repeat:" ) );
  77.     schetimelayout->addWidget( scherepeatLabel, 2, 0 );
  78.     QLabel *scherepeatTimeLabel = new QLabel( qtr( "Repeat delay:" ) );
  79.     schetimelayout->addWidget( scherepeatTimeLabel, 3, 0 );
  80.     time = new QDateTimeEdit( QTime::currentTime() );
  81.     time->setAlignment( Qt::AlignRight );
  82.     time->setDisplayFormat( "hh:mm:ss" );
  83.     schetimelayout->addWidget( time, 0, 1, 1, 3 );
  84.     date = new QDateTimeEdit( QDate::currentDate() );
  85.     date->setAlignment( Qt::AlignRight );
  86.     date->setCalendarPopup( true );
  87. #ifdef WIN32
  88.     date->setDisplayFormat( "dd MM yyyy" );
  89. #else
  90.     date->setDisplayFormat( "dd MMMM yyyy" );
  91. #endif
  92.     schetimelayout->addWidget( date, 1, 1, 1, 3 );
  93.     scherepeatnumber = new QSpinBox;
  94.     scherepeatnumber->setAlignment( Qt::AlignRight );
  95.     schetimelayout->addWidget( scherepeatnumber, 2, 1, 1, 3 );
  96.     repeatDays = new QSpinBox;
  97.     repeatDays->setAlignment( Qt::AlignRight );
  98.     schetimelayout->addWidget( repeatDays, 3, 1, 1, 1 );
  99.     repeatDays->setSuffix( qtr(" days") );
  100.     repeatTime = new QDateTimeEdit;
  101.     repeatTime->setAlignment( Qt::AlignRight );
  102.     schetimelayout->addWidget( repeatTime, 3, 2, 1, 2 );
  103.     repeatTime->setDisplayFormat( "hh:mm:ss" );
  104.     /* scrollArea */
  105.     ui.vlmItemScroll->setFrameStyle( QFrame::NoFrame );
  106.     ui.vlmItemScroll->setWidgetResizable( true );
  107.     vlmItemWidget = new QWidget;
  108.     vlmItemLayout = new QVBoxLayout( vlmItemWidget );
  109.     vlmItemWidget->setLayout( vlmItemLayout );
  110.     ui.vlmItemScroll->setWidget( vlmItemWidget );
  111.     QSpacerItem *spacer =
  112.         new QSpacerItem( 10, 10, QSizePolicy::Minimum, QSizePolicy::Expanding);
  113.     vlmItemLayout->addItem( spacer );
  114.     QPushButton *importButton = new QPushButton( qtr( "I&mport" ) );
  115.     ui.buttonBox->addButton( importButton, QDialogButtonBox::ActionRole );
  116.     QPushButton *exportButton = new QPushButton( qtr( "E&xport" ) );
  117.     ui.buttonBox->addButton( exportButton, QDialogButtonBox::ActionRole );
  118.     QPushButton *closeButton = new QPushButton( qtr( "&Close" ) );
  119.     ui.buttonBox->addButton( closeButton, QDialogButtonBox::AcceptRole );
  120.     showScheduleWidget( QVLM_Broadcast );
  121.     /* Connect the comboBox to show the right Widgets */
  122.     CONNECT( ui.mediaType, currentIndexChanged( int ),
  123.              this, showScheduleWidget( int ) );
  124.     /* Connect the leftList to show the good VLMItem */
  125.     CONNECT( ui.vlmListItem, currentRowChanged( int ),
  126.              this, selectVLMItem( int ) );
  127.     BUTTONACT( closeButton, close() );
  128.     BUTTONACT( exportButton, exportVLMConf() );
  129.     BUTTONACT( importButton, importVLMConf() );
  130.     BUTTONACT( ui.addButton, addVLMItem() );
  131.     BUTTONACT( ui.clearButton, clearWidgets() );
  132.     BUTTONACT( ui.saveButton, saveModifications() );
  133.     BUTTONACT( ui.inputButton, selectInput() );
  134.     BUTTONACT( ui.outputButton, selectOutput() );
  135.     //readSettings( "VLM", QSize( 700, 500 ) );
  136. }
  137. VLMDialog::~VLMDialog()
  138. {
  139.     delete vlmWrapper;
  140.     //writeSettings( "VLM" );
  141.    /* TODO :you have to destroy vlm here to close
  142.     * but we shouldn't destroy vlm here in case somebody else wants it */
  143.     if( p_vlm )
  144.     {
  145.         vlm_Delete( p_vlm );
  146.     }
  147. }
  148. void VLMDialog::showScheduleWidget( int i )
  149. {
  150.     ui.schedBox->setVisible( ( i == QVLM_Schedule ) );
  151.     ui.loopBCast->setVisible( ( i == QVLM_Broadcast ) );
  152.     ui.vodBox->setVisible( ( i == QVLM_VOD ) );
  153. }
  154. void VLMDialog::selectVLMItem( int i )
  155. {
  156.     if( i >= 0 )
  157.         ui.vlmItemScroll->ensureWidgetVisible( vlmItems.at( i ) );
  158. }
  159. bool VLMDialog::isNameGenuine( const QString& name )
  160. {
  161.     for( int i = 0; i < vlmItems.size(); i++ )
  162.     {
  163.         if( vlmItems.at( i )->name == name )
  164.             return false;
  165.     }
  166.     return true;
  167. }
  168. void VLMDialog::addVLMItem()
  169. {
  170.     int vlmItemCount = vlmItems.size();
  171.     /* Take the name and Check it */
  172.     QString name = ui.nameLedit->text();
  173.     if( name.isEmpty() || !isNameGenuine( name ) )
  174.     {
  175.         msg_Err( p_intf, "VLM Name is empty or already exists, I can't do it" );
  176.         return;
  177.     }
  178.     int type = ui.mediaType->itemData( ui.mediaType->currentIndex() ).toInt();
  179.     QString typeShortName;
  180.     QString inputText = ui.inputLedit->text();
  181.     QString outputText = ui.outputLedit->text();
  182.     bool b_checked = ui.enableCheck->isChecked();
  183.     bool b_looped = ui.loopBCast->isChecked();
  184.     QDateTime schetime = time->dateTime();
  185.     QDateTime schedate = date->dateTime();
  186.     int repeatnum = scherepeatnumber->value();
  187.     int repeatdays = repeatDays->value();
  188.     VLMAWidget * vlmAwidget;
  189.     outputText.remove( ":sout=" );
  190.     switch( type )
  191.     {
  192.     case QVLM_Broadcast:
  193.         typeShortName = "Bcast";
  194.         vlmAwidget = new VLMBroadcast( name, inputText, outputText,
  195.                                        b_checked, b_looped, this );
  196.         VLMWrapper::AddBroadcast( name, inputText, outputText, b_checked,
  197.                                   b_looped );
  198.     break;
  199.     case QVLM_VOD:
  200.         typeShortName = "VOD";
  201.         vlmAwidget = new VLMVod( name, inputText, outputText,
  202.                                  b_checked, ui.muxLedit->text(), this );
  203.         VLMWrapper::AddVod( name, inputText, outputText, b_checked );
  204.         break;
  205.     case QVLM_Schedule:
  206.         typeShortName = "Sched";
  207.         vlmAwidget = new VLMSchedule( name, inputText, outputText,
  208.                                       schetime, schedate, repeatnum,
  209.                                       repeatdays, b_checked, this );
  210.         VLMWrapper::AddSchedule( name, inputText, outputText, schetime,
  211.                                  schedate, repeatnum, repeatdays, b_checked);
  212.         break;
  213.     default:
  214.         msg_Warn( p_intf, "Something bad happened" );
  215.         return;
  216.     }
  217.     /* Add an Item of the Side List */
  218.     ui.vlmListItem->addItem( typeShortName + " : " + name );
  219.     ui.vlmListItem->setCurrentRow( vlmItemCount - 1 );
  220.     /* Add a new VLMAWidget on the main List */
  221.     vlmItemLayout->insertWidget( vlmItemCount, vlmAwidget );
  222.     vlmItems.append( vlmAwidget );
  223.     clearWidgets();
  224. }
  225. /* TODO : VOD are not exported to the file */
  226. bool VLMDialog::exportVLMConf()
  227. {
  228.     QString saveVLMConfFileName = QFileDialog::getSaveFileName( this,
  229.                                         qtr( "Save VLM configuration as..." ),
  230.                                         qfu( config_GetHomeDir() ),
  231.                                         qtr( "VLM conf (*.vlm);;All (*)" ) );
  232.     if( !saveVLMConfFileName.isEmpty() )
  233.     {
  234.         vlm_message_t *message;
  235.         QString command = "save "" + saveVLMConfFileName + """;
  236.         vlm_ExecuteCommand( p_vlm , qtu( command ) , &message );
  237.         vlm_MessageDelete( message );
  238.         return true;
  239.     }
  240.     return false;
  241. }
  242. void VLMDialog::mediasPopulator()
  243. {
  244.     if( p_vlm )
  245.     {
  246.         int i_nMedias;
  247.         QString typeShortName;
  248.         int vlmItemCount;
  249.         vlm_media_t ***ppp_dsc = (vlm_media_t ***)malloc( sizeof( vlm_media_t ) );
  250.         /* Get medias informations and numbers */
  251.         vlm_Control( p_vlm, VLM_GET_MEDIAS, ppp_dsc, &i_nMedias );
  252.         /* Loop on all of them */
  253.         for( int i = 0; i < i_nMedias; i++ )
  254.         {
  255.             VLMAWidget * vlmAwidget;
  256.             vlmItemCount = vlmItems.size();
  257.             QString mediaName = qfu( (*ppp_dsc)[i]->psz_name );
  258.             /* It may have several inputs, we take the first one by default
  259.                  - an evolution will be to manage these inputs in the gui */
  260.             QString inputText = qfu( (*ppp_dsc)[i]->ppsz_input[0] );
  261.             QString outputText = qfu( (*ppp_dsc)[i]->psz_output );
  262.             /* Schedule media is a quite especial, maybe there is another way to grab informations */
  263.             if( (*ppp_dsc)[i]->b_vod )
  264.             {
  265.                 typeShortName = "VOD";
  266.                 QString mux = qfu( (*ppp_dsc)[i]->vod.psz_mux );
  267.                 vlmAwidget = new VLMVod( mediaName, inputText, outputText,
  268.                                     (*ppp_dsc)[i]->b_enabled, mux, this );
  269.             }
  270.             else
  271.             {
  272.                 typeShortName = "Bcast";
  273.                 vlmAwidget = new VLMBroadcast( mediaName, inputText, outputText,
  274.                                   (*ppp_dsc)[i]->b_enabled, (*ppp_dsc)[i]->broadcast.b_loop, this );
  275.             }
  276.             /* Add an Item of the Side List */
  277.             ui.vlmListItem->addItem( typeShortName + " : " + mediaName );
  278.             ui.vlmListItem->setCurrentRow( vlmItemCount - 1 );
  279.             /* Add a new VLMAWidget on the main List */
  280.             vlmItemLayout->insertWidget( vlmItemCount, vlmAwidget );
  281.             vlmItems.append( vlmAwidget );
  282.             clearWidgets();
  283.         }
  284.         free( ppp_dsc );
  285.     }
  286. }
  287. bool VLMDialog::importVLMConf()
  288. {
  289.     QString openVLMConfFileName = toNativeSeparators(
  290.             QFileDialog::getOpenFileName(
  291.             this, qtr( "Open VLM configuration..." ),
  292.             qfu( config_GetHomeDir() ),
  293.             qtr( "VLM conf (*.vlm);;All (*)" ) ) );
  294.     if( !openVLMConfFileName.isEmpty() )
  295.     {
  296.         vlm_message_t *message;
  297.         int status;
  298.         QString command = "load "" + openVLMConfFileName + """;
  299.         status = vlm_ExecuteCommand( p_vlm, qtu( command ) , &message );
  300.         vlm_MessageDelete( message );
  301.         if( status == 0 )
  302.         {
  303.             mediasPopulator();
  304.         }
  305.         else
  306.         {
  307.             msg_Warn( p_intf, "Failed to import vlm configuration file : %s", qtu( command ) );
  308.             return false;
  309.         }
  310.         return true;
  311.     }
  312.     return false;
  313. }
  314. void VLMDialog::clearWidgets()
  315. {
  316.     ui.nameLedit->clear();
  317.     ui.inputLedit->clear();
  318.     ui.outputLedit->clear();
  319.     time->setTime( QTime::currentTime() );
  320.     date->setDate( QDate::currentDate() );
  321.     ui.enableCheck->setChecked( true );
  322.     ui.nameLedit->setReadOnly( false );
  323.     ui.loopBCast->setChecked( false );
  324.     ui.muxLedit->clear();
  325.     ui.saveButton->hide();
  326.     ui.addButton->show();
  327. }
  328. void VLMDialog::selectInput()
  329. {
  330.     OpenDialog *o = OpenDialog::getInstance( this, p_intf, false, SELECT, true );
  331.     o->exec();
  332.     ui.inputLedit->setText( o->getMRL() );
  333. }
  334. void VLMDialog::selectOutput()
  335. {
  336.     SoutDialog *s = new SoutDialog( this, p_intf );
  337.     if( s->exec() == QDialog::Accepted )
  338.         ui.outputLedit->setText( s->getMrl() );
  339. }
  340. /* Object Modification */
  341. void VLMDialog::removeVLMItem( VLMAWidget *vlmObj )
  342. {
  343.     int index = vlmItems.indexOf( vlmObj );
  344.     if( index < 0 ) return;
  345.     delete ui.vlmListItem->takeItem( index );
  346.     vlmItems.removeAt( index );
  347.     delete vlmObj;
  348.     /* HERE BE DRAGONS VLM REQUEST */
  349. }
  350. void VLMDialog::startModifyVLMItem( VLMAWidget *vlmObj )
  351. {
  352.     currentIndex = vlmItems.indexOf( vlmObj );
  353.     if( currentIndex < 0 ) return;
  354.     ui.vlmListItem->setCurrentRow( currentIndex );
  355.     ui.nameLedit->setText( vlmObj->name );
  356.     ui.inputLedit->setText( vlmObj->input );
  357.     ui.outputLedit->setText( vlmObj->output );
  358.     ui.enableCheck->setChecked( vlmObj->b_enabled );
  359.     switch( vlmObj->type )
  360.     {
  361.     case QVLM_Broadcast:
  362.         ui.loopBCast->setChecked( (qobject_cast<VLMBroadcast *>(vlmObj))->b_looped );
  363.         break;
  364.     case QVLM_VOD:
  365.         ui.muxLedit->setText( (qobject_cast<VLMVod *>(vlmObj))->mux );
  366.         break;
  367.     case QVLM_Schedule:
  368.         time->setDateTime( ( qobject_cast<VLMSchedule *>(vlmObj))->schetime );
  369.         date->setDateTime( ( qobject_cast<VLMSchedule *>(vlmObj))->schedate );
  370.         break;
  371.     }
  372.     ui.nameLedit->setReadOnly( true );
  373.     ui.addButton->hide();
  374.     ui.saveButton->show();
  375. }
  376. void VLMDialog::saveModifications()
  377. {
  378.     VLMAWidget *vlmObj = vlmItems.at( currentIndex );
  379.     if( vlmObj )
  380.     {
  381.         vlmObj->input = ui.inputLedit->text();
  382.         vlmObj->output = ui.outputLedit->text().remove( ":sout=" );
  383.         vlmObj->setChecked( ui.enableCheck->isChecked() );
  384.         vlmObj->b_enabled = ui.enableCheck->isChecked();
  385.         switch( vlmObj->type )
  386.         {
  387.         case QVLM_Broadcast:
  388.             (qobject_cast<VLMBroadcast *>(vlmObj))->b_looped = ui.loopBCast->isChecked();
  389.             break;
  390.         case QVLM_VOD:
  391.             (qobject_cast<VLMVod *>(vlmObj))->mux = ui.muxLedit->text();
  392.             break;
  393.         case QVLM_Schedule:
  394.             (qobject_cast<VLMSchedule *>(vlmObj))->schetime = time->dateTime();
  395.             (qobject_cast<VLMSchedule *>(vlmObj))->schedate = date->dateTime();
  396.             (qobject_cast<VLMSchedule *>(vlmObj))->rNumber = scherepeatnumber->value();
  397.             (qobject_cast<VLMSchedule *>(vlmObj))->rDays = repeatDays->value();
  398.             break;
  399.            //           vlmObj->
  400.         }
  401.         vlmObj->update();
  402.     }
  403.     clearWidgets();
  404. }
  405. /*********************************
  406.  * VLMAWidget - Abstract class
  407.  ********************************/
  408. VLMAWidget::VLMAWidget( const QString& _name,
  409.                         const QString& _input,
  410.                         const QString& _output,
  411.                         bool _enabled,
  412.                         VLMDialog *_parent,
  413.                         int _type )
  414.                       : QGroupBox( _name, _parent )
  415. {
  416.     parent = _parent;
  417.     name = _name;
  418.     input = _input;
  419.     output = _output;
  420.     b_enabled = _enabled;
  421.     type = _type;
  422.     setCheckable( true );
  423.     setChecked( b_enabled );
  424.     objLayout = new QGridLayout( this );
  425.     setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum );
  426.     nameLabel = new QLabel;
  427.     objLayout->addWidget( nameLabel, 0, 0, 1, 4 );
  428.     /*QLabel *time = new QLabel( "--:--/--:--" );
  429.     objLayout->addWidget( time, 1, 3, 1, 2 );*/
  430.     QToolButton *modifyButton = new QToolButton;
  431.     modifyButton->setIcon( QIcon( QPixmap( ":/settings" ) ) );
  432.     objLayout->addWidget( modifyButton, 0, 5 );
  433.     QToolButton *deleteButton = new QToolButton;
  434.     deleteButton->setIcon( QIcon( QPixmap( ":/quit" ) ) );
  435.     objLayout->addWidget( deleteButton, 0, 6 );
  436.     BUTTONACT( modifyButton, modify() );
  437.     BUTTONACT( deleteButton, del() );
  438.     CONNECT( this, clicked( bool ), this, toggleEnabled( bool ) );
  439. }
  440. void VLMAWidget::modify()
  441. {
  442.     parent->startModifyVLMItem( this );
  443. }
  444. void VLMAWidget::del()
  445. {
  446.     parent->removeVLMItem( this );
  447. }
  448. void VLMAWidget::toggleEnabled( bool b_enable )
  449. {
  450.     VLMWrapper::EnableItem( name, b_enable );
  451. }
  452. /****************
  453.  * VLMBroadcast
  454.  ****************/
  455. VLMBroadcast::VLMBroadcast( const QString& _name, const QString& _input,
  456.                             const QString& _output, bool _enabled,
  457.                             bool _looped, VLMDialog *_parent )
  458.                           : VLMAWidget( _name, _input, _output,
  459.                                         _enabled, _parent, QVLM_Broadcast )
  460. {
  461.     nameLabel->setText( qtr("Broadcast: ") + name );
  462.     type = QVLM_Broadcast;
  463.     b_looped = _looped;
  464.     playButton = new QToolButton;
  465.     playButton->setIcon( QIcon( QPixmap( ":/play" ) ) );
  466.     objLayout->addWidget( playButton, 1, 0 );
  467.     b_playing = true;
  468.     QToolButton *stopButton = new QToolButton;
  469.     stopButton->setIcon( QIcon( QPixmap( ":/stop_b" ) ) );
  470.     objLayout->addWidget( stopButton, 1, 1 );
  471.     loopButton = new QToolButton;
  472.     objLayout->addWidget( loopButton, 1, 2 );
  473.     BUTTONACT( playButton, togglePlayPause() );
  474.     BUTTONACT( stopButton, stop() );
  475.     BUTTONACT( loopButton, toggleLoop() );
  476.     update();
  477. }
  478. void VLMBroadcast::update()
  479. {
  480.     VLMWrapper::EditBroadcast( name, input, output, b_enabled, b_looped );
  481.     if( b_looped )
  482.         loopButton->setIcon( QIcon( QPixmap( ":/repeat_all" ) ) );
  483.     else
  484.         loopButton->setIcon( QIcon( QPixmap( ":/repeat_off" ) ) );
  485. }
  486. void VLMBroadcast::togglePlayPause()
  487. {
  488.     if( b_playing )
  489.     {
  490.         VLMWrapper::ControlBroadcast( name, ControlBroadcastPause );
  491.         playButton->setIcon( QIcon( QPixmap( ":/pause_16px" ) ) );
  492.     }
  493.     else
  494.     {
  495.         VLMWrapper::ControlBroadcast( name, ControlBroadcastPlay );
  496.         playButton->setIcon( QIcon( QPixmap( ":/play_16px" ) ) );
  497.     }
  498.     b_playing = !b_playing;
  499. }
  500. void VLMBroadcast::toggleLoop()
  501. {
  502.     b_enabled = !b_enabled;
  503.     update();
  504. }
  505. void VLMBroadcast::stop()
  506. {
  507.     VLMWrapper::ControlBroadcast( name, ControlBroadcastStop );
  508.     playButton->setIcon( QIcon( QPixmap( ":/play_16px" ) ) );
  509. }
  510. /****************
  511.  * VLMSchedule
  512.  ****************/
  513. VLMSchedule::VLMSchedule( const QString& name, const QString& input,
  514.                           const QString& output, QDateTime _schetime,
  515.                           QDateTime _schedate, int _scherepeatnumber,
  516.                           int _repeatDays, bool enabled, VLMDialog *parent )
  517.             : VLMAWidget( name, input, output, enabled, parent, QVLM_Schedule )
  518. {
  519.     nameLabel->setText( qtr("Schedule: ") + name );
  520.     schetime = _schetime;
  521.     schedate = _schedate;
  522.     rNumber = _scherepeatnumber;
  523.     rDays = _repeatDays;
  524.     type = QVLM_Schedule;
  525.     update();
  526. }
  527. void VLMSchedule::update()
  528. {
  529.    VLMWrapper::EditSchedule( name, input, output, schetime, schedate,
  530.                              rNumber, rDays, b_enabled);
  531. }
  532. /****************
  533.  * VLMVOD
  534.  ****************/
  535. VLMVod::VLMVod( const QString& name, const QString& input, const QString& output,
  536.                 bool enabled, const QString& _mux, VLMDialog *parent)
  537.        : VLMAWidget( name, input, output, enabled, parent, QVLM_VOD )
  538. {
  539.     nameLabel->setText( qtr("VOD: ") + name );
  540.     mux = _mux;
  541.     muxLabel = new QLabel;
  542.     objLayout->addWidget( muxLabel, 1, 0 );
  543.     update();
  544. }
  545. void VLMVod::update()
  546. {
  547.     muxLabel->setText( mux );
  548.     VLMWrapper::EditVod( name, input, output, b_enabled, mux );
  549. }
  550. /*******************
  551.  * VLMWrapper
  552.  *******************/
  553. vlm_t * VLMWrapper::p_vlm = NULL;
  554. VLMWrapper::VLMWrapper( vlm_t *_p_vlm )
  555. {
  556.     p_vlm = _p_vlm;
  557. }
  558. VLMWrapper::~VLMWrapper()
  559. {
  560.     p_vlm = NULL;
  561. }
  562. void VLMWrapper::AddBroadcast( const QString& name, const QString& input,
  563.                                const QString& output,
  564.                                bool b_enabled, bool b_loop  )
  565. {
  566.     vlm_message_t *message;
  567.     QString command = "new "" + name + "" broadcast";
  568.     vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  569.     vlm_MessageDelete( message );
  570.     EditBroadcast( name, input, output, b_enabled, b_loop );
  571. }
  572. void VLMWrapper::EditBroadcast( const QString& name, const QString& input,
  573.                                 const QString& output,
  574.                                 bool b_enabled, bool b_loop  )
  575. {
  576.     vlm_message_t *message;
  577.     QString command;
  578.     command = "setup "" + name + "" inputdel all";
  579.     vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  580.     vlm_MessageDelete( message );
  581.     command = "setup "" + name + "" input "" + input + """;
  582.     vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  583.     vlm_MessageDelete( message );
  584.     if( !output.isEmpty() )
  585.     {
  586.         command = "setup "" + name + "" output "" + output + """;
  587.         vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  588.         vlm_MessageDelete( message );
  589.     }
  590.     if( b_enabled )
  591.     {
  592.         command = "setup "" + name + "" enabled";
  593.         vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  594.         vlm_MessageDelete( message );
  595.     }
  596.     if( b_loop )
  597.     {
  598.         command = "setup "" + name + "" loop";
  599.         vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  600.         vlm_MessageDelete( message );
  601.     }
  602. }
  603. void VLMWrapper::EnableItem( const QString& name, bool b_enable )
  604. {
  605.     vlm_message_t *message;
  606.     QString command = "setup "" + name + ( b_enable ? " enable" : " disable" );
  607.     vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  608.     vlm_MessageDelete( message );
  609. }
  610. void VLMWrapper::ControlBroadcast( const QString& name, int BroadcastStatus,
  611.                                    unsigned int seek )
  612. {
  613.     vlm_message_t *message;
  614.     QString command = "control "" + name + """;
  615.     switch( BroadcastStatus )
  616.     {
  617.     case ControlBroadcastPlay:
  618.         command += " play";
  619.         break;
  620.     case ControlBroadcastPause:
  621.         command += " pause";
  622.         break;
  623.     case ControlBroadcastStop:
  624.         command += " stop";
  625.         break;
  626.     case ControlBroadcastSeek:
  627.         command += " seek" + seek;
  628.         break;
  629.     }
  630.     vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  631.     vlm_MessageDelete( message );
  632. }
  633. void VLMWrapper::AddVod( const QString& name, const QString& input,
  634.                          const QString& output,
  635.                          bool b_enabled, const QString& mux )
  636. {
  637.     vlm_message_t *message;
  638.     QString command = "new "" + name + "" vod";
  639.     vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  640.     vlm_MessageDelete( message );
  641.     EditVod(  name, input, output, b_enabled, mux );
  642. }
  643. void VLMWrapper::EditVod( const QString& name, const QString& input,
  644.                           const QString& output,
  645.                           bool b_enabled,
  646.                           const QString& mux )
  647. {
  648.     vlm_message_t *message;
  649.     QString command = "setup "" + name + "" input "" + input + """;
  650.     vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  651.     vlm_MessageDelete( message );
  652.     if( !output.isEmpty() )
  653.     {
  654.         command = "setup "" + name + "" output "" + output + """;
  655.         vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  656.         vlm_MessageDelete( message );
  657.     }
  658.     if( b_enabled )
  659.     {
  660.         command = "setup "" + name + "" enabled";
  661.         vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  662.         vlm_MessageDelete( message );
  663.     }
  664.     if( !mux.isEmpty() )
  665.     {
  666.         command = "setup "" + name + "" mux "" + mux + """;
  667.         vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  668.         vlm_MessageDelete( message );
  669.     }
  670. }
  671. void VLMWrapper::AddSchedule( const QString& name, const QString& input,
  672.                               const QString& output, QDateTime _schetime,
  673.                               QDateTime _schedate,
  674.                               int _scherepeatnumber, int _repeatDays,
  675.                               bool b_enabled, const QString& mux )
  676. {
  677.     vlm_message_t *message;
  678.     QString command = "new "" + name + "" schedule";
  679.     vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  680.     vlm_MessageDelete( message );
  681.     EditSchedule(  name, input, output, _schetime, _schedate,
  682.             _scherepeatnumber, _repeatDays, b_enabled, mux );
  683. }
  684. void VLMWrapper::EditSchedule( const QString& name, const QString& input,
  685.                                const QString& output, QDateTime _schetime,
  686.                                QDateTime _schedate, int _scherepeatnumber,
  687.                                int _repeatDays, bool b_enabled,
  688.                                const QString& mux )
  689. {
  690.     vlm_message_t *message;
  691.     QString command = "setup "" + name + "" input "" + input + """;
  692.     vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  693.     vlm_MessageDelete( message );
  694.     if( !output.isEmpty() )
  695.     {
  696.         command = "setup "" + name + "" output "" + output + """;
  697.         vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  698.         vlm_MessageDelete( message );
  699.     }
  700.     if( b_enabled )
  701.     {
  702.         command = "setup "" + name + "" enabled";
  703.         vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  704.         vlm_MessageDelete( message );
  705.     }
  706.     if( !mux.isEmpty() )
  707.     {
  708.         command = "setup "" + name + "" mux "" + mux + """;
  709.         vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  710.         vlm_MessageDelete( message );
  711.     }
  712.     command = "setup "" + name + "" date "" +
  713.         _schedate.toString( "yyyy/MM/dd" )+ "-" +
  714.         _schetime.toString( "hh:mm:ss" ) + """;
  715.     vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  716.     vlm_MessageDelete( message );
  717.     if( _scherepeatnumber > 0 )
  718.     {
  719.        command = "setup "" + name + "" repeat "" + _scherepeatnumber + """;
  720.        vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  721.        vlm_MessageDelete( message );
  722.     }
  723.     if( _repeatDays > 0 )
  724.     {
  725.        command = "setup "" + name + "" period "" + _repeatDays + """;
  726.        vlm_ExecuteCommand( p_vlm, qtu( command ), &message );
  727.        vlm_MessageDelete( message );
  728.     }
  729. }
  730. void VLMDialog::toggleVisible()
  731. {
  732.     QList<VLMAWidget *>::iterator it;
  733.     for( it = vlmItems.begin(); it != vlmItems.end(); it++ )
  734.     {
  735.         VLMAWidget *item =  *it;
  736.         delete item;
  737.         item = NULL;
  738.     }
  739.     vlmItems.clear();
  740.     ui.vlmListItem->clear();
  741.     mediasPopulator();
  742.     QVLCDialog::toggleVisible();
  743. }
  744. #endif