Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
  • b.sullender/vlc
  • hulxv/vlc
  • zyad-ayad/vlc
408 results
Show changes
Showing
with 122 additions and 135 deletions
......@@ -126,13 +126,13 @@ vlc_ml_sorting_criteria_t MLGenreModel::nameToCriteria(QByteArray name) const
QString MLGenreModel::getCover(MLGenre * genre) const
{
return ml()->customCover()->get(genre->getId()
, QSize(MLGENREMODEL_COVER_WIDTH, MLGENREMODEL_COVER_HEIGHT)
, m_coverDefault
, MLGENREMODEL_COVER_COUNTX
, MLGENREMODEL_COVER_COUNTY
, MLGENREMODEL_COVER_BLUR
, true);
return MLCustomCover::url(genre->getId()
, QSize(MLGENREMODEL_COVER_WIDTH, MLGENREMODEL_COVER_HEIGHT)
, m_coverDefault
, MLGENREMODEL_COVER_COUNTX
, MLGENREMODEL_COVER_COUNTY
, MLGENREMODEL_COVER_BLUR
, true);
}
//-------------------------------------------------------------------------------------------------
......
......@@ -358,10 +358,10 @@ void MLPlaylistListModel::setTransactionPending(const bool value)
QString MLPlaylistListModel::getCover(MLPlaylist * playlist) const
{
return ml()->customCover()->get(playlist->getId()
, m_coverSize
, m_coverDefault
, PLAYLIST_COVERX, PLAYLIST_COVERY);
return MLCustomCover::url(playlist->getId()
, m_coverSize
, m_coverDefault
, PLAYLIST_COVERX, PLAYLIST_COVERY);
}
//-------------------------------------------------------------------------------------------------
......
......@@ -83,9 +83,9 @@ QVariant MLVideoFoldersModel::itemRoleData(MLItem * item, const int role) const
return QVariant::fromValue( getFirstSymbol(folder->getTitle()) );
case FOLDER_THUMBNAIL:
{
return ml()->customCover()->get(folder->getId()
, QSize(MLVIDEOFOLDERSMODEL_COVER_WIDTH, MLVIDEOFOLDERSMODEL_COVER_HEIGHT)
, QStringLiteral(":/placeholder/noart_videoCover.svg"));
return MLCustomCover::url(folder->getId()
, QSize(MLVIDEOFOLDERSMODEL_COVER_WIDTH, MLVIDEOFOLDERSMODEL_COVER_HEIGHT)
, QStringLiteral(":/placeholder/noart_videoCover.svg"));
}
case FOLDER_DURATION:
return QVariant::fromValue(folder->getDuration());
......
......@@ -94,9 +94,11 @@ QVariant MLVideoGroupsModel::itemRoleData(MLItem * item, const int role) const /
return QVariant::fromValue(group->getTitle());
case VIDEO_THUMBNAIL:
{
return ml()->customCover()->get(group->getId()
, QSize(MLVIDEOGROUPSMODEL_COVER_WIDTH, MLVIDEOGROUPSMODEL_COVER_HEIGHT)
, QStringLiteral(":/placeholder/noart_videoCover.svg"));
return MLCustomCover::url(
group->getId(),
QSize(MLVIDEOGROUPSMODEL_COVER_WIDTH, MLVIDEOGROUPSMODEL_COVER_HEIGHT),
QStringLiteral(":/placeholder/noart_videoCover.svg")
);
}
case VIDEO_DURATION:
return QVariant::fromValue(group->getDuration());
......
......@@ -45,6 +45,7 @@
#include "dialogs/extended/extended_panels.hpp"
#include "dialogs/systray/systray.hpp"
#include "util/varchoicemodel.hpp"
#include "util/color_scheme_model.hpp"
#include "medialibrary/medialib.hpp"
#include "medialibrary/mlrecentsmodel.hpp"
#include "medialibrary/mlbookmarkmodel.hpp"
......
......@@ -23,6 +23,7 @@
#include "medialibrary/mlbookmarkmodel.hpp"
#include "network/networkdevicemodel.hpp"
#include "network/networkmediamodel.hpp"
#include "player/player_controller.hpp"
#include "playlist/playlist_controller.hpp"
#include "playlist/playlist_model.hpp"
#include "dialogs/dialogs_provider.hpp"
......
......@@ -29,6 +29,7 @@
Q_MOC_INCLUDE("playlist/playlist_controller.hpp")
Q_MOC_INCLUDE("playlist/playlist_model.hpp")
Q_MOC_INCLUDE("player/player_controller.hpp")
Q_MOC_INCLUDE("network/networkdevicemodel.hpp")
Q_MOC_INCLUDE("network/networkmediamodel.hpp")
Q_MOC_INCLUDE("medialibrary/mlplaylistlistmodel.hpp")
......
......@@ -20,6 +20,7 @@
#include "mediatreelistener.hpp"
#include "maininterface/mainctx.hpp"
#include "medialibrary/medialib.hpp"
#include "medialibrary/mlmedia.hpp"
#include "medialibrary/mlmediastore.hpp"
......
......@@ -63,16 +63,13 @@ PlayerControllerPrivate::~PlayerControllerPrivate()
vlc_player_RemoveTimer( m_player, m_player_timer );
}
bool PlayerController::isCurrentItemSynced()
bool PlayerControllerPrivate::isCurrentItemSynced()
{
Q_D(PlayerController);
/* The media can change before the UI gets updated and thus a player
* request can be submitted on the wrong media or worse, no media at
* all. Here d->m_currentItem is read and modified under the player
* lock. */
return d->m_currentItem.get() == vlc_player_GetCurrentMedia( d->m_player );
return m_currentItem.get() == vlc_player_GetCurrentMedia( m_player );
}
......@@ -1017,6 +1014,15 @@ static void on_player_timer_smpte_update(const struct vlc_player_timer_smpte_tim
});
}
static void on_art_fetch_ended_callback(input_item_t *p_item, bool fetched,
void *userdata)
{
PlayerControllerPrivate *me = reinterpret_cast<PlayerControllerPrivate *>(userdata);
me->onArtFetchEnded(p_item, fetched);
}
} //extern "C"
static const struct vlc_player_cbs player_cbs = {
......@@ -1083,6 +1089,15 @@ static const struct vlc_player_timer_smpte_cbs player_timer_smpte_cbs = {
on_player_timer_smpte_update
};
// art fetcher callbacks
static const struct vlc_metadata_cbs art_fetcher_cbs = []{
struct vlc_metadata_cbs cbs{};
cbs.on_art_fetch_ended = on_art_fetch_ended_callback;
return cbs;
}();
PlayerControllerPrivate::PlayerControllerPrivate(PlayerController *playercontroller, qt_intf_t *p_intf)
: q_ptr(playercontroller)
, p_intf(p_intf)
......@@ -1153,8 +1168,6 @@ PlayerController::PlayerController( qt_intf_t *_p_intf )
this, &PlayerController::menusUpdateAudio );
connect( &d_ptr->m_position_timer, &QTimer::timeout, this, &PlayerController::updatePositionFromTimer );
connect( &d_ptr->m_time_timer, &QTimer::timeout, this, &PlayerController::updateTimeFromTimer );
input_preparser_cbs.on_art_fetch_ended = onArtFetchEnded_callback;
}
PlayerController::~PlayerController()
......@@ -1256,7 +1269,7 @@ void PlayerController::setTime(VLCTick new_time)
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
vlc_player_SetTime( d->m_player, new_time );
}
......@@ -1268,7 +1281,7 @@ void PlayerController::setPosition(double position)
return;
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
vlc_player_SetPosition( d->m_player, position );
}
......@@ -1279,7 +1292,7 @@ void PlayerController::jumpFwd()
msg_Dbg( d->p_intf, "jumpFwd");
int i_interval = var_InheritInteger( d->p_intf, "short-jump-size" );
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
vlc_player_JumpTime( d->m_player, vlc_tick_from_sec( i_interval ) );
}
......@@ -1290,7 +1303,7 @@ void PlayerController::jumpBwd()
msg_Dbg( d->p_intf, "jumpBwd");
int i_interval = var_InheritInteger( d->p_intf, "short-jump-size" );
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
vlc_player_JumpTime( d->m_player, vlc_tick_from_sec( -i_interval ) );
}
......@@ -1300,7 +1313,7 @@ void PlayerController::jumpToTime(VLCTick i_time)
Q_D(PlayerController);
msg_Dbg( d->p_intf, "jumpToTime");
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
vlc_player_JumpTime( d->m_player, i_time );
}
......@@ -1310,7 +1323,7 @@ void PlayerController::jumpToPos( double new_pos )
Q_D(PlayerController);
{
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if( vlc_player_IsStarted( d->m_player ) )
vlc_player_SetPosition( d->m_player, new_pos );
......@@ -1322,7 +1335,7 @@ void PlayerController::frameNext()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
vlc_player_NextVideoFrame( d->m_player );
}
......@@ -1333,7 +1346,7 @@ void PlayerController::setAudioDelay(VLCTick delay)
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
vlc_player_SetAudioDelay( d->m_player, delay, VLC_PLAYER_WHENCE_ABSOLUTE );
}
......@@ -1350,7 +1363,7 @@ void PlayerController::setSubtitleDelay(VLCTick delay)
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if(!isCurrentItemSynced() )
if(!d->isCurrentItemSynced() )
return;
vlc_player_SetSubtitleDelay( d->m_player, delay, VLC_PLAYER_WHENCE_ABSOLUTE );
}
......@@ -1367,7 +1380,7 @@ void PlayerController::setSecondarySubtitleDelay(VLCTick delay)
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if (d->m_secondarySpuEsId.get() != NULL)
vlc_player_SetEsIdDelay(d->m_player, d->m_secondarySpuEsId.get(),
......@@ -1419,7 +1432,7 @@ void PlayerController::setSubtitleFPS(float fps)
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
vlc_player_SetAssociatedSubsFPS( d->m_player, fps );
}
......@@ -1430,7 +1443,7 @@ void PlayerController::sectionPrev()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if( vlc_player_IsStarted( d->m_player ) )
{
......@@ -1445,7 +1458,7 @@ void PlayerController::sectionNext()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if( vlc_player_IsStarted( d->m_player ) )
{
......@@ -1460,7 +1473,7 @@ void PlayerController::sectionMenu()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if( vlc_player_IsStarted( d->m_player ) )
vlc_player_Navigate( d->m_player, VLC_PLAYER_NAV_MENU );
......@@ -1470,7 +1483,7 @@ void PlayerController::navigateUp()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if( vlc_player_IsStarted( d->m_player ) )
vlc_player_Navigate( d->m_player, VLC_PLAYER_NAV_UP);
......@@ -1480,7 +1493,7 @@ void PlayerController::navigateDown()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if( vlc_player_IsStarted( d->m_player ) )
vlc_player_Navigate( d->m_player, VLC_PLAYER_NAV_DOWN);
......@@ -1490,7 +1503,7 @@ void PlayerController::navigateLeft()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if( vlc_player_IsStarted( d->m_player ) )
vlc_player_Navigate( d->m_player, VLC_PLAYER_NAV_LEFT);
......@@ -1500,7 +1513,7 @@ void PlayerController::navigateRight()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if( vlc_player_IsStarted( d->m_player ) )
vlc_player_Navigate( d->m_player, VLC_PLAYER_NAV_RIGHT);
......@@ -1510,7 +1523,7 @@ void PlayerController::navigateActivate()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if( vlc_player_IsStarted( d->m_player ) )
vlc_player_Navigate( d->m_player, VLC_PLAYER_NAV_ACTIVATE);
......@@ -1520,7 +1533,7 @@ void PlayerController::chapterNext()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if (vlc_player_IsStarted(d->m_player ))
vlc_player_SelectNextChapter( d->m_player );
......@@ -1530,7 +1543,7 @@ void PlayerController::chapterPrev()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if (vlc_player_IsStarted(d->m_player ))
vlc_player_SelectPrevChapter( d->m_player );
......@@ -1540,7 +1553,7 @@ void PlayerController::titleNext()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if (vlc_player_IsStarted(d->m_player ))
vlc_player_SelectNextTitle( d->m_player );
......@@ -1550,7 +1563,7 @@ void PlayerController::titlePrev()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if (vlc_player_IsStarted(d->m_player ))
vlc_player_SelectPrevTitle( d->m_player );
......@@ -1562,7 +1575,7 @@ void PlayerController::changeProgram( int program )
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if( vlc_player_IsStarted( d->m_player ) )
vlc_player_SelectProgram( d->m_player, program );
......@@ -1575,7 +1588,7 @@ void PlayerController::enableTeletext( bool enable )
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if (vlc_player_IsStarted(d->m_player ))
vlc_player_SetTeletextEnabled( d->m_player, enable );
......@@ -1585,7 +1598,7 @@ void PlayerController::setTeletextPage(int page)
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if (vlc_player_IsTeletextEnabled( d->m_player ))
vlc_player_SelectTeletextPage( d->m_player, page );
......@@ -1595,7 +1608,7 @@ void PlayerController::setTeletextTransparency( bool transparent )
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if( !isCurrentItemSynced() )
if( !d->isCurrentItemSynced() )
return;
if (vlc_player_IsTeletextEnabled( d->m_player ))
vlc_player_SetTeletextTransparency( d->m_player, transparent );
......@@ -1812,7 +1825,7 @@ void PlayerController::restorePlaybackPos()
{
Q_D(PlayerController);
vlc_player_locker lock{ d->m_player };
if (!isCurrentItemSynced())
if (!d->isCurrentItemSynced())
return;
vlc_player_RestorePlaybackPos( d->m_player );
}
......@@ -1960,29 +1973,22 @@ void PlayerController::requestArtUpdate( input_item_t *p_item, bool b_forced )
libvlc_MetadataRequest( vlc_object_instance(d->p_intf), p_item,
(b_forced) ? META_REQUEST_OPTION_FETCH_ANY
: META_REQUEST_OPTION_FETCH_LOCAL,
&input_preparser_cbs, this, 0, NULL );
&art_fetcher_cbs, d, 0, NULL );
}
}
void PlayerController::onArtFetchEnded_callback(input_item_t *p_item, bool fetched,
void *userdata)
{
PlayerController *me = reinterpret_cast<PlayerController *>(userdata);
me->onArtFetchEnded(p_item, fetched);
}
void PlayerController::onArtFetchEnded(input_item_t *p_item, bool)
void PlayerControllerPrivate::onArtFetchEnded(input_item_t *p_item, bool)
{
Q_D(PlayerController);
Q_Q(PlayerController);
vlc_player_locker lock{ d->m_player };
bool b_current_item = (p_item == vlc_player_GetCurrentMedia( d->m_player ));
vlc_player_locker lock{ m_player };
bool b_current_item = (p_item == vlc_player_GetCurrentMedia( m_player ));
/* No input will signal the cover art to update,
* let's do it ourself */
if ( b_current_item )
d->UpdateArt( p_item );
UpdateArt( p_item );
else
emit artChanged( p_item );
emit q->artChanged( p_item );
}
const QString PlayerController::decodeArtURL( input_item_t *p_item )
......
......@@ -479,16 +479,9 @@ private slots:
void menusUpdateAudio( const QString& );
private:
bool isCurrentItemSynced();
Q_DECLARE_PRIVATE(PlayerController)
QScopedPointer<PlayerControllerPrivate> d_ptr;
QSignalMapper *menusAudioMapper; //used by VLCMenuBar
/* updateArt gui request */
struct vlc_metadata_cbs input_preparser_cbs {};
static void onArtFetchEnded_callback(input_item_t *, bool fetched, void *userdata);
void onArtFetchEnded(input_item_t *, bool fetched);
};
#endif
......@@ -49,6 +49,8 @@ public:
void UpdateTrackSelection(vlc_es_id_t *trackid, bool selected);
void UpdateSpuOrder(vlc_es_id_t *es_id, enum vlc_vout_order spu_order);
int interpolateTime(vlc_tick_t system_now);
bool isCurrentItemSynced();
void onArtFetchEnded(input_item_t *, bool fetched);
// SMPTE Timer
void addSMPTETimer();
......
......@@ -346,8 +346,9 @@ static const struct vlc_playlist_callbacks playlist_callbacks = []{
//private API
PlaylistControllerPrivate::PlaylistControllerPrivate(PlaylistController* playlistController)
PlaylistControllerPrivate::PlaylistControllerPrivate(PlaylistController* playlistController, vlc_playlist_t *playlist)
: q_ptr(playlistController)
, m_playlist(playlist)
{
fillSortKeyTitleList();
}
......@@ -363,20 +364,31 @@ PlaylistControllerPrivate::~PlaylistControllerPrivate()
//public API
PlaylistController::PlaylistController(QObject *parent)
PlaylistController::PlaylistController(vlc_playlist_t *playlist, QObject *parent)
: QObject(parent)
, d_ptr( new PlaylistControllerPrivate(this) )
, d_ptr( new PlaylistControllerPrivate(this, playlist) )
{
Q_D(PlaylistController);
assert(playlist);
connect(this, &PlaylistController::itemsMoved, this, &PlaylistController::resetSortKey);
connect(this, &PlaylistController::itemsAdded, this, &PlaylistController::resetSortKey);
connect(this, &PlaylistController::isEmptyChanged, [this](bool isEmpty) {if (isEmpty) emit resetSortKey();});
}
PlaylistController::PlaylistController(vlc_playlist_t *playlist, QObject *parent)
: QObject(parent)
, d_ptr( new PlaylistControllerPrivate(this) )
{
setPlaylist(playlist);
{
vlc_playlist_locker locker(d->m_playlist);
d->m_listener = vlc_playlist_AddListener(d->m_playlist, &playlist_callbacks, d, true);
}
/*
* Queue a playlistInitialized to be sent after the initial state callbacks
* vlc_playlist_AddListener will synchronously call each callback in
* playlist_callbacks, which will in turn queue an async call on the Qt
* main thread
*/
d->callAsync([this, d](){
d->m_initialized = true;
emit initializedChanged();
});
}
PlaylistController::~PlaylistController()
......@@ -705,34 +717,6 @@ Playlist PlaylistController::getPlaylist() const
return Playlist(d->m_playlist);
}
void PlaylistController::setPlaylist(vlc_playlist_t* newPlaylist)
{
Q_D(PlaylistController);
if (d->m_playlist && d->m_listener)
{
vlc_playlist_locker locker(d->m_playlist);
vlc_playlist_RemoveListener(d->m_playlist, d->m_listener);
d->m_playlist = nullptr;
d->m_listener = nullptr;
}
if (newPlaylist)
{
vlc_playlist_locker locker(newPlaylist);
d->m_playlist = newPlaylist;
d->m_listener = vlc_playlist_AddListener(d->m_playlist, &playlist_callbacks, d, true);
/*
* Queue a playlistInitialized to be sent after the initial state callbacks
* vlc_playlist_AddListener will synchronously call each callback in
* playlist_callbacks, which will in turn queue an async call on the Qt
* main thread
*/
d->callAsync([=](){
emit playlistInitialized();
});
}
emit playlistChanged( Playlist(newPlaylist) );
}
void PlaylistController::resetSortKey()
{
Q_D(PlaylistController);
......@@ -740,11 +724,6 @@ void PlaylistController::resetSortKey()
emit sortKeyChanged();
}
void PlaylistController::setPlaylist(const Playlist& playlist)
{
setPlaylist(playlist.m_playlist);
}
PlaylistController::PlaybackRepeat PlaylistController::getRepeatMode() const
{
Q_D(const PlaylistController);
......@@ -854,6 +833,11 @@ QVariantList PlaylistController::getSortKeyTitleList() const
return d->sortKeyTitleList;
}
bool PlaylistController::isInitialized() const
{
Q_D(const PlaylistController);
return d->m_initialized;
}
} // namespace playlist
} // namespace vlc
......@@ -90,9 +90,10 @@ public:
};
Q_ENUM(MediaStopAction)
Q_PROPERTY(bool initialized READ isInitialized NOTIFY initializedChanged FINAL)
Q_PROPERTY(QVariantList sortKeyTitleList READ getSortKeyTitleList CONSTANT FINAL)
Q_PROPERTY(Playlist playlist READ getPlaylist WRITE setPlaylist NOTIFY playlistChanged FINAL)
Q_PROPERTY(Playlist playlist READ getPlaylist CONSTANT FINAL)
Q_PROPERTY(PlaylistItem currentItem READ getCurrentItem NOTIFY currentItemChanged FINAL)
......@@ -141,46 +142,39 @@ public:
Q_INVOKABLE void explore(const PlaylistItem& pItem);
public:
PlaylistController(QObject *parent = nullptr);
PlaylistController(vlc_playlist_t *playlist, QObject *parent = nullptr);
virtual ~PlaylistController();
public slots:
PlaylistItem getCurrentItem() const;
public:
SortKey getSortKey() const;
bool hasNext() const;
bool hasPrev() const;
bool isRandom() const;
void setRandom( bool );
MediaStopAction getMediaStopAction() const;
void setMediaStopAction(MediaStopAction );
PlaybackRepeat getRepeatMode() const;
void setRepeatMode( PlaybackRepeat mode );
bool isEmpty() const;
int count() const;
int currentIndex() const;
SortOrder getSortOrder() const;
bool isInitialized() const;
SortKey getSortKey() const;
public slots:
PlaylistItem getCurrentItem() const;
void setRandom( bool );
void setMediaStopAction(MediaStopAction );
void setRepeatMode( PlaybackRepeat mode );
void setSortKey(SortKey sortKey);
SortOrder getSortOrder() const;
void setSortOrder(SortOrder sortOrder);
void switchSortOrder();
QVariantList getSortKeyTitleList() const;
Playlist getPlaylist() const;
void setPlaylist(const Playlist& playlist);
void setPlaylist(vlc_playlist_t* newPlaylist);
void resetSortKey();
signals:
void playlistChanged( Playlist );
void currentItemChanged( );
void hasNextChanged( bool );
......@@ -201,7 +195,7 @@ signals:
void itemsRemoved(size_t index, size_t count);
void itemsUpdated(size_t index, QVector<PlaylistItem>);
void playlistInitialized();
void initializedChanged();
private:
Q_DECLARE_PRIVATE(PlaylistController)
......
......@@ -33,7 +33,7 @@ public:
PlaylistController * const q_ptr;
public:
PlaylistControllerPrivate(PlaylistController* playlistController);
PlaylistControllerPrivate(PlaylistController* playlistController, vlc_playlist_t *playlist);
PlaylistControllerPrivate() = delete;
~PlaylistControllerPrivate();
......@@ -56,6 +56,7 @@ public:
vlc_playlist_t* m_playlist = nullptr;
vlc_playlist_listener_id* m_listener = nullptr;
bool m_initialized = false;
ssize_t m_currentIndex = -1;
PlaylistItem m_currentItem;
bool m_hasNext= false;
......
......@@ -22,6 +22,7 @@
#include <QFile>
#include <maininterface/mainctx.hpp>
#include <vlc_modules.h>
#include <vlc_picture.h>
namespace {
......