[vlmc-devel] [PATCH] Library: Merge m_videoModel and m_audioModel

Hugo Beauzée-Luyssen hugo at beauzee.fr
Wed Mar 8 21:53:49 CET 2017


On 03/08/2017 09:51 PM, yikei lu wrote:
> On Wed, Mar 8, 2017 at 2:48 PM, Hugo Beauzée-Luyssen <hugo at beauzee.fr> wrote:
>> On 03/08/2017 09:41 PM, Yikai Lu wrote:
>>> ---
>>>  src/Gui/library/MediaLibraryView.cpp |  4 +--
>>>  src/Library/Library.cpp              | 55 ++++++------------------------------
>>>  src/Library/Library.h                | 11 ++------
>>>  src/Library/MediaLibraryModel.cpp    | 20 ++++---------
>>>  src/Library/MediaLibraryModel.h      |  4 +--
>>>  5 files changed, 19 insertions(+), 75 deletions(-)
>>>
>>> diff --git a/src/Gui/library/MediaLibraryView.cpp b/src/Gui/library/MediaLibraryView.cpp
>>> index 530cea2..d06e16d 100644
>>> --- a/src/Gui/library/MediaLibraryView.cpp
>>> +++ b/src/Gui/library/MediaLibraryView.cpp
>>> @@ -52,7 +52,7 @@ MediaLibraryView::MediaLibraryView( QWidget* parent )
>>>      m_container->setObjectName( objectName() );
>>>
>>>      auto ctx = view->rootContext();
>>> -    ctx->setContextProperty( QStringLiteral( "mlModel" ), Core::instance()->library()->model( Library::MediaType::Video ) );
>>> +    ctx->setContextProperty( QStringLiteral( "mlModel" ), Core::instance()->library()->model() );
>>>      ctx->setContextProperty( QStringLiteral( "view" ), this );
>>>
>>>      view->setSource( QUrl( QStringLiteral( "qrc:/QML/MediaLibraryView.qml" ) ) );
>>> @@ -90,7 +90,7 @@ MediaLibraryView::onMediaSelected( qint64 mediaId )
>>>  {
>>>      QSharedPointer<Media> media = Core::instance()->library()->media( mediaId );
>>>      if ( media == nullptr ) {
>>> -        media.reset( new Media( Core::instance()->library()->model( Library::MediaType::Video )->findMedia( mediaId ) ) );
>>> +        media.reset( new Media( Core::instance()->library()->model()->findMedia( mediaId ) ) );
>>>          Core::instance()->library()->addMedia( media );
>>>      }
>>>
>>> diff --git a/src/Library/Library.cpp b/src/Library/Library.cpp
>>> index 8168870..5d150d1 100644
>>> --- a/src/Library/Library.cpp
>>> +++ b/src/Library/Library.cpp
>>> @@ -51,8 +51,7 @@ Library::Library( Settings* vlmcSettings, Settings *projectSettings )
>>>      // Setting up the external media library
>>>      m_ml.reset( NewMediaLibrary() );
>>>      m_ml->setVerbosity( medialibrary::LogLevel::Warning );
>>> -    m_videoModel = new MediaLibraryModel( *m_ml, medialibrary::IMedia::Type::Video, this );
>>> -    m_audioModel = new MediaLibraryModel( *m_ml, medialibrary::IMedia::Type::Audio, this );
>>> +    m_model = new MediaLibraryModel( *m_ml, this );
>>>
>>>      auto s = vlmcSettings->createVar( SettingValue::List, QStringLiteral( "vlmc/mlDirs" ), QVariantList(),
>>>                          "Media Library folders", "List of folders VLMC will search for media files",
>>> @@ -141,16 +140,9 @@ Library::mlMedia( qint64 mediaId )
>>>  }
>>>
>>>  MediaLibraryModel*
>>> -Library::model(Library::MediaType type) const
>>> +Library::model() const
>>>  {
>>> -    switch ( type )
>>> -    {
>>> -        case MediaType::Video:
>>> -            return m_videoModel;
>>> -        case MediaType::Audio:
>>> -            return m_audioModel;
>>> -    }
>>> -    Q_UNREACHABLE();
>>> +    return m_model;
>>>  }
>>>
>>>  QSharedPointer<Clip>
>>> @@ -215,17 +207,7 @@ Library::onMediaAdded( std::vector<medialibrary::MediaPtr> mediaList )
>>>  {
>>>      for ( auto m : mediaList )
>>>      {
>>> -        switch ( m->type() )
>>> -        {
>>> -        case medialibrary::IMedia::Type::Video:
>>> -            m_videoModel->addMedia( m );
>>> -            break;
>>> -        case medialibrary::IMedia::Type::Audio:
>>> -            m_audioModel->addMedia( m );
>>> -            break;
>>> -        default:
>>> -            Q_UNREACHABLE();
>>> -        }
>>> +        m_model->addMedia( m );
>>>      }
>>>  }
>>>
>>> @@ -234,17 +216,7 @@ Library::onMediaUpdated( std::vector<medialibrary::MediaPtr> mediaList )
>>>  {
>>>      for ( auto m : mediaList )
>>>      {
>>> -        switch ( m->type() )
>>> -        {
>>> -        case medialibrary::IMedia::Type::Video:
>>> -            m_videoModel->updateMedia( m );
>>> -            break;
>>> -        case medialibrary::IMedia::Type::Audio:
>>> -            m_audioModel->updateMedia( m );
>>> -            break;
>>> -        default:
>>> -            Q_UNREACHABLE();
>>> -        }
>>> +        m_model->updateMedia( m );
>>>      }
>>>  }
>>>
>>> @@ -252,13 +224,7 @@ void
>>>  Library::onMediaDeleted( std::vector<int64_t> mediaList )
>>>  {
>>>      for ( auto id : mediaList )
>>> -    {
>>> -        // We can't know the media type, however ID are unique regardless of the type
>>> -        // so we are sure that we will remove the correct media.
>>> -        if ( m_videoModel->removeMedia( id ) == true )
>>> -            continue;
>>> -        m_audioModel->removeMedia( id );
>>> -    }
>>> +        m_model->removeMedia( id );
>>>  }
>>>
>>>  void
>>> @@ -316,10 +282,7 @@ void
>>>  Library::onDiscoveryCompleted( const std::string& entryPoint )
>>>  {
>>>      if ( entryPoint.empty() == true )
>>> -    {
>>> -        m_videoModel->refresh();
>>> -        m_audioModel->refresh();
>>> -    }
>>> +        m_model->refresh();
>>>
>>>      emit discoveryCompleted( QString::fromStdString( entryPoint ) );
>>>  }
>>> @@ -356,10 +319,10 @@ Library::onReloadCompleted( const std::string& entryPoint )
>>>      if ( entryPoint.empty() == true )
>>>      {
>>>          for ( auto media : m_ml->videoFiles() )
>>> -            m_videoModel->addMedia( media );
>>> +            m_model->addMedia( media );
>>>
>>>          for ( auto media : m_ml->audioFiles() )
>>> -            m_audioModel->addMedia( media );
>>> +            m_model->addMedia( media );
>>>      }
>>>  }
>>>
>>> diff --git a/src/Library/Library.h b/src/Library/Library.h
>>> index 31617b8..2879745 100644
>>> --- a/src/Library/Library.h
>>> +++ b/src/Library/Library.h
>>> @@ -54,12 +54,6 @@ class Library : public QObject, private medialibrary::IMediaLibraryCb
>>>      Q_DISABLE_COPY( Library )
>>>
>>>  public:
>>> -    enum class MediaType
>>> -    {
>>> -        Video,
>>> -        Audio
>>> -    };
>>> -
>>>      Library( Settings* vlmcSettings, Settings* projectSettings );
>>>      virtual ~Library();
>>>      void            addMedia( QSharedPointer<Media> media );
>>> @@ -69,7 +63,7 @@ public:
>>>      //FIXME: This feels rather ugly
>>>      medialibrary::MediaPtr mlMedia( qint64 mediaId);
>>>
>>> -    MediaLibraryModel* model( MediaType type ) const;
>>> +    MediaLibraryModel* model() const;
>>>
>>>      /**
>>>       * @brief clip returns an existing clip
>>> @@ -115,8 +109,7 @@ private:
>>>
>>>  private:
>>>      std::unique_ptr<medialibrary::IMediaLibrary>    m_ml;
>>> -    MediaLibraryModel*                              m_videoModel;
>>> -    MediaLibraryModel*                              m_audioModel;
>>> +    MediaLibraryModel*                              m_model;
>>>      Settings*                                       m_settings;
>>>      bool                                            m_initialized;
>>>      bool                                            m_cleanState;
>>> diff --git a/src/Library/MediaLibraryModel.cpp b/src/Library/MediaLibraryModel.cpp
>>> index 5a52a89..b46ddf3 100644
>>> --- a/src/Library/MediaLibraryModel.cpp
>>> +++ b/src/Library/MediaLibraryModel.cpp
>>> @@ -29,18 +29,15 @@
>>>  #include <QPixmap>
>>>  #endif
>>>
>>> -MediaLibraryModel::MediaLibraryModel( medialibrary::IMediaLibrary& ml, medialibrary::IMedia::Type type, QObject *parent )
>>> +MediaLibraryModel::MediaLibraryModel( medialibrary::IMediaLibrary& ml, QObject *parent )
>>>      : QAbstractListModel(parent)
>>>      , m_ml( ml )
>>> -    , m_mediaType( type )
>>>      , m_rowCount( 0 )
>>>  {
>>>  }
>>>
>>>  void MediaLibraryModel::addMedia( medialibrary::MediaPtr media )
>>>  {
>>> -    if ( media->type() != m_mediaType )
>>> -        return;
>>>      std::lock_guard<std::mutex> lock( m_mediaMutex );
>>>      auto size = m_media.size();
>>>      beginInsertRows( QModelIndex(), size, size );
>>> @@ -143,17 +140,10 @@ void MediaLibraryModel::refresh()
>>>
>>>      beginResetModel();
>>>
>>> -    switch ( m_mediaType )
>>> -    {
>>> -    case medialibrary::IMedia::Type::Audio:
>>> -        m_media = m_ml.audioFiles();
>>> -        break;
>>> -    case medialibrary::IMedia::Type::Video:
>>> -        m_media = m_ml.videoFiles();
>>> -        break;
>>> -    default:
>>> -        Q_UNREACHABLE();
>>> -    }
>>> +    const auto& audioFiles = m_ml.audioFiles();
>>> +    const auto& videoFiles = m_ml.videoFiles();
>>> +    m_media.insert( m_media.end(), audioFiles.begin(), audioFiles.end() );
>>> +    m_media.insert( m_media.end(), videoFiles.begin(), videoFiles.end() );
>>>      m_rowCount = m_media.size();
>>>      endResetModel();
>>>  }
>>> diff --git a/src/Library/MediaLibraryModel.h b/src/Library/MediaLibraryModel.h
>>> index 0add020..7729ff0 100644
>>> --- a/src/Library/MediaLibraryModel.h
>>> +++ b/src/Library/MediaLibraryModel.h
>>> @@ -44,8 +44,7 @@ public:
>>>          Id,
>>>      };
>>>
>>> -    explicit MediaLibraryModel( medialibrary::IMediaLibrary& ml, medialibrary::IMedia::Type type,
>>> -                                QObject *parent = 0 );
>>> +    explicit MediaLibraryModel( medialibrary::IMediaLibrary& ml, QObject *parent = 0 );
>>>
>>>      void addMedia( medialibrary::MediaPtr media );
>>>      medialibrary::MediaPtr findMedia( qint64 mediaId );
>>> @@ -59,7 +58,6 @@ public:
>>>
>>>  private:
>>>      medialibrary::IMediaLibrary& m_ml;
>>> -    const medialibrary::IMedia::Type m_mediaType;
>>>
>>>      // Use an atomic int to avoid locking m_media within rowCount()
>>>      mutable std::mutex m_mediaMutex;
>>>
>>
>> Looks good to me!
>> Although I guess there will be things to change as far as the view is
>> concerned since I expect it to display audio & video all at once no?
> 
> Yeah, it will show audio files but without thumbnails I guess. Except
> that, it will work fine.
> 
>>
>> Regards,
>> _______________________________________________
>> Vlmc-devel mailing list
>> Vlmc-devel at videolan.org
>> https://mailman.videolan.org/listinfo/vlmc-devel
> _______________________________________________
> Vlmc-devel mailing list
> Vlmc-devel at videolan.org
> https://mailman.videolan.org/listinfo/vlmc-devel
> 
Then all fine by me!
I'd like to have a audio/video specific view at some point though, but
this patch makes the code a lot easier, and having a model per type of
entity (audio/video and most likely album/artist/tracks/genre) would be
a pain to maintain, so feel free to push this!

Regards,


More information about the Vlmc-devel mailing list