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
403 results
Show changes
Commits on Source (6)
......@@ -150,6 +150,8 @@ typedef struct vlc_ml_label_list_t
typedef struct vlc_ml_file_t
{
char* psz_mrl;
int64_t i_size;
time_t i_last_modification_date;
vlc_ml_file_type_t i_type;
bool b_external;
bool b_removable;
......
......@@ -296,6 +296,8 @@ bool Convert( const medialibrary::IFile* input, vlc_ml_file_t& output )
vlc_assert_unreachable();
}
output.i_size = input->size();
output.i_last_modification_date = input->lastModificationDate();
output.b_removable = input->isRemovable();
output.b_present = true;
try
......
......@@ -26,16 +26,20 @@
#include "file.h"
#include "util.h"
#include <algorithm>
#include <assert.h>
#include <vector>
#include <system_error>
#include <vlc_common.h>
#include <vlc_url.h>
#include <vlc_input_item.h>
#include <vlc_fs.h>
#include <vlc_input.h>
#include <vlc_threads.h>
#include <vlc_cxx_helpers.hpp>
#include <algorithm>
#include <assert.h>
#include <medialibrary/filesystem/Errors.h>
#include <sys/stat.h>
#include <system_error>
#include <vector>
using InputItemPtr = vlc_shared_data_ptr_type(input_item_t,
input_item_Hold,
......@@ -61,7 +65,7 @@ SDDirectory::mrl() const
const std::vector<std::shared_ptr<IFile>> &
SDDirectory::files() const
{
if (!m_read_done)
if ( !m_read_done )
read();
return m_files;
}
......@@ -69,7 +73,7 @@ SDDirectory::files() const
const std::vector<std::shared_ptr<IDirectory>> &
SDDirectory::dirs() const
{
if (!m_read_done)
if ( !m_read_done )
read();
return m_dirs;
}
......@@ -77,8 +81,8 @@ SDDirectory::dirs() const
std::shared_ptr<IDevice>
SDDirectory::device() const
{
if (!m_device)
m_device = m_fs.createDeviceFromMrl(mrl());
if ( !m_device )
m_device = m_fs.createDeviceFromMrl( mrl() );
return m_device;
}
......@@ -135,13 +139,13 @@ static void onParserSubtreeAdded( input_item_t *, input_item_node_t *subtree,
{
auto req = static_cast<vlc::medialibrary::metadata_request*>( data );
for (int i = 0; i < subtree->i_children; ++i)
for ( int i = 0; i < subtree->i_children; ++i )
{
input_item_node_t *child = subtree->pp_children[i];
input_item_node_t* child = subtree->pp_children[i];
/* this class assumes we always receive a flat list */
assert(child->i_children == 0);
input_item_t *media = child->p_item;
req->children->emplace_back( media );
assert( child->i_children == 0 );
input_item_t* media = child->p_item;
req->children->emplace_back( media );
}
}
......@@ -165,21 +169,20 @@ static bool request_metadata_sync( libvlc_int_t *libvlc, input_item_t *media,
onParserSubtreeAdded,
};
auto inputParser = vlc::wrap_cptr(
input_item_Parse( media, VLC_OBJECT( libvlc ), &cbs, &req ),
&input_item_parser_id_Release );
auto inputParser = vlc::wrap_cptr( input_item_Parse( media, VLC_OBJECT( libvlc ), &cbs, &req ),
&input_item_parser_id_Release );
if ( inputParser== nullptr )
if ( inputParser == nullptr )
return false;
vlc::threads::mutex_locker lock( req.lock );
while ( req.probe == false )
{
auto res = req.cond.timedwait( req.lock, deadline );
if (res != 0 )
if ( res != 0 )
{
throw medialibrary::fs::errors::System( ETIMEDOUT,
"Failed to browse network directory: Network is too slow" );
throw medialibrary::fs::errors::System(
ETIMEDOUT, "Failed to browse directory: Operation timed out" );
}
}
return req.success;
......@@ -188,33 +191,79 @@ static bool request_metadata_sync( libvlc_int_t *libvlc, input_item_t *media,
void
SDDirectory::read() const
{
auto media = vlc::wrap_cptr( input_item_New(m_mrl.c_str(), m_mrl.c_str()),
&input_item_Release );
if (!media)
auto media =
vlc::wrap_cptr( input_item_New( m_mrl.c_str(), m_mrl.c_str() ), &input_item_Release );
if ( !media )
throw std::bad_alloc();
std::vector<InputItemPtr> children;
input_item_AddOption( media.get(), "show-hiddenfiles", VLC_INPUT_OPTION_TRUSTED );
input_item_AddOption( media.get(), "ignore-filetypes=''", VLC_INPUT_OPTION_TRUSTED );
auto status = request_metadata_sync( m_fs.libvlc(), media.get(), &children);
input_item_AddOption( media.get(), "sub-autodetect-fuzzy=2", VLC_INPUT_OPTION_TRUSTED );
auto status = request_metadata_sync( m_fs.libvlc(), media.get(), &children );
if ( status == false )
throw medialibrary::fs::errors::System( EIO,
"Failed to browse network directory: Unknown error" );
throw medialibrary::fs::errors::System(
EIO, "Failed to browse directory: Unknown error" );
for (const InputItemPtr &m : children)
for ( const InputItemPtr& m : children )
{
const char *mrl = m.get()->psz_uri;
const char* mrl = m.get()->psz_uri;
enum input_item_type_e type = m->i_type;
if (type == ITEM_TYPE_DIRECTORY)
m_dirs.push_back(std::make_shared<SDDirectory>(mrl, m_fs));
else if (type == ITEM_TYPE_FILE)
m_files.push_back(std::make_shared<SDFile>(mrl));
if ( type == ITEM_TYPE_DIRECTORY )
{
m_dirs.push_back( std::make_shared<SDDirectory>( mrl, m_fs ) );
}
else if ( type == ITEM_TYPE_FILE )
{
addFile( mrl, IFile::LinkedFileType::None, {} );
for ( auto i = 0; i < m->i_slaves; ++i )
{
const auto* slave = m->pp_slaves[i];
const auto linked_type = slave->i_type == SLAVE_TYPE_AUDIO
? IFile::LinkedFileType::SoundTrack
: IFile::LinkedFileType::Subtitles;
addFile( slave->psz_uri, linked_type, mrl );
}
}
}
m_read_done = true;
}
void
SDDirectory::addFile(std::string mrl, IFile::LinkedFileType fType, std::string linkedFile) const
{
time_t lastModificationDate = 0;
int64_t fileSize = 0;
if ( m_fs.isNetworkFileSystem() == false )
{
const auto path = vlc::wrap_cptr( vlc_uri2path( mrl.c_str() ) );
struct stat stat;
if ( vlc_stat( path.get(), &stat ) != 0 )
{
if ( errno == EACCES )
return;
throw errors::System{ errno, "Failed to get file info" };
}
lastModificationDate = stat.st_mtime;
fileSize = stat.st_size;
}
if ( fType == IFile::LinkedFileType::None )
{
m_files.push_back(
std::make_shared<SDFile>( std::move( mrl ), fileSize, lastModificationDate ) );
}
else
{
m_files.push_back( std::make_shared<SDFile>(
std::move( mrl ), fType, std::move( linkedFile ), fileSize, lastModificationDate ) );
}
}
} /* namespace medialibrary */
} /* namespace vlc */
......@@ -44,6 +44,7 @@ public:
private:
void read() const;
void addFile( std::string mrl, fs::IFile::LinkedFileType, std::string linkedWith ) const;
std::string m_mrl;
SDFileSystemFactory &m_fs;
......
......@@ -28,10 +28,28 @@
namespace vlc {
namespace medialibrary {
SDFile::SDFile(const std::string &mrl)
: m_mrl(mrl)
, m_name(utils::fileName(mrl))
, m_extension(utils::extension(mrl))
SDFile::SDFile( const std::string mrl, const int64_t size, const time_t lastModificationDate )
: m_mrl( std::move( mrl ) )
, m_name( utils::fileName( m_mrl ) )
, m_extension( utils::extension( m_mrl ) )
, m_isNetwork( m_mrl.find( "file://" ) != 0 )
, m_size( size )
, m_lastModificationTime( lastModificationDate )
{
}
SDFile::SDFile( const std::string mrl,
const LinkedFileType fType,
const std::string linkedFile,
const int64_t size,
const time_t lastModificationDate )
: m_mrl( std::move( mrl ) )
, m_name( utils::fileName( m_mrl ) )
, m_extension( utils::extension( m_mrl ) )
, m_linkedFile( std::move( linkedFile ) )
, m_linkedType( fType )
, m_isNetwork( m_mrl.find( "file://" ) != 0 )
, m_size( size )
, m_lastModificationTime( lastModificationDate )
{
}
......@@ -56,18 +74,24 @@ SDFile::extension() const
time_t
SDFile::lastModificationDate() const
{
return 0;
return m_lastModificationTime;
}
bool
SDFile::isNetwork() const
{
return m_isNetwork;
}
int64_t
SDFile::size() const
{
return 0;
return m_size;
}
IFile::LinkedFileType SDFile::linkedType() const
{
return IFile::LinkedFileType::None;
return m_linkedType;
}
const std::string &SDFile::linkedWith() const
......
......@@ -31,22 +31,28 @@ using namespace ::medialibrary::fs;
class SDFile : public IFile
{
public:
explicit SDFile(const std::string &mrl);
SDFile( std::string mrl, int64_t, time_t );
SDFile( std::string mrl, LinkedFileType, std::string linkedFile, int64_t, time_t );
virtual ~SDFile() = default;
const std::string& mrl() const override;
const std::string& name() const override;
const std::string& extension() const override;
time_t lastModificationDate() const override;
int64_t size() const override;
inline bool isNetwork() const override { return true; }
const std::string& linkedWith() const override;
LinkedFileType linkedType() const override;
const std::string &linkedWith() const override;
bool isNetwork() const override;
int64_t size() const override;
time_t lastModificationDate() const override;
private:
std::string m_mrl;
std::string m_name;
std::string m_extension;
std::string m_linkedFile;
LinkedFileType m_linkedType = LinkedFileType::None;
bool m_isNetwork;
int64_t m_size = 0;
time_t m_lastModificationTime = 0;
};
} /* namespace medialibrary */
......
......@@ -60,7 +60,7 @@ SDFileSystemFactory::createDirectory(const std::string &mrl)
std::shared_ptr<fs::IFile>
SDFileSystemFactory::createFile(const std::string& mrl)
{
auto dir = createDirectory(mrl);
auto dir = createDirectory(utils::directory(mrl));
assert(dir != nullptr);
return dir->file(mrl);
}
......
......@@ -52,6 +52,14 @@ fileName(const std::string &filePath)
return filePath.substr(pos + 1);
}
std::string
directory(const std::string &filePath)
{
auto pos = filePath.find_last_of(DIR_SEPARATORS);
if (pos == std::string::npos)
return filePath;
return filePath.substr(0, pos);
}
} /* namespace utils */
} /* namespace medialibrary */
} /* namespace vlc */
......@@ -29,6 +29,7 @@ namespace vlc {
std::string fileName(const std::string& filePath);
std::string extension(const std::string& fileName);
std::string directory(const std::string& fileName);
} /* namespace utils */
} /* namespace medialibrary */
......