medialibrary issueshttps://code.videolan.org/videolan/medialibrary/-/issues2020-05-12T15:18:00Zhttps://code.videolan.org/videolan/medialibrary/-/issues/253External network file are not correctly tagged2020-05-12T15:18:00ZHugo Beauzée-LuyssenExternal network file are not correctly taggedThe logic is inverted, causing local files to be tagged as network, and network files to be tagged as "non-network"
The fix is easy, but also needs a migration to correct itThe logic is inverted, causing local files to be tagged as network, and network files to be tagged as "non-network"
The fix is easy, but also needs a migration to correct itHugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/252Allow removable devices to be flushed by the application2020-05-12T14:58:10ZHugo Beauzée-LuyssenAllow removable devices to be flushed by the applicationIn order to circumvent problems from external device listers, the applications need to be able to flush removable storages that were previously insertedIn order to circumvent problems from external device listers, the applications need to be able to flush removable storages that were previously insertedHugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/251MediaGroup media count should only reflect present media2020-05-12T11:09:51ZHugo Beauzée-LuyssenMediaGroup media count should only reflect present mediaOtherwise nbVideo/nbAudio/nbUnknown will return values that differ from the media listing query.
This also implies that we need a media count that doesn't take into account the presence of the media, which will be used for automatically...Otherwise nbVideo/nbAudio/nbUnknown will return values that differ from the media listing query.
This also implies that we need a media count that doesn't take into account the presence of the media, which will be used for automatically delete empty groups.
* [x] Add a new field to count media regardless of their type and presence
* [x] Update the nb_video/audio/unknown trigger to ignore updates on missing media
* [x] Add a new trigger to increment/decrement the nb_video/audio/unknown when media presence changesHugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/250Playback from local playlist files fails due to invalid URL encoding2020-12-20T17:48:17ZFelix Paul Kühnefkuehne@videolan.orgPlayback from local playlist files fails due to invalid URL encodingSynchronize a file (such as http://www.feepk.net/testing/nonrestricted/iptv.m3u) which includes URLs including ports. Note that downloading such a file will be rejected, so you need to use WiFi sharing to sync.
Try to open a stream from ...Synchronize a file (such as http://www.feepk.net/testing/nonrestricted/iptv.m3u) which includes URLs including ports. Note that downloading such a file will be rejected, so you need to use WiFi sharing to sync.
Try to open a stream from the Playlist tab.
Playback will fail without a meaningful error message.
Logging reveals that VLC tries to open "udp://%40224.10.50.10%3A5004" instead of "udp://@224.10.50.10:5004".
This is an often-complained about regression from 3.2.7.Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/249.vob and .mpg files are ignored2020-05-12T15:38:44ZFelix Paul Kühnefkuehne@videolan.org.vob and .mpg files are ignoredStarting with the 3.2.8 release, .vob and .mpg files are systematically ignored when synchronized and never show. The files are correctly synchronized of course.
Note: the problem is not the file extension. If you rename mp4 files to mp...Starting with the 3.2.8 release, .vob and .mpg files are systematically ignored when synchronized and never show. The files are correctly synchronized of course.
Note: the problem is not the file extension. If you rename mp4 files to mpg or vob, those WILL BE recognized!Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/247SIGABRT: Request [UPDATE Media SET type = ? WHERE id_media = ?] aborted due t...2020-05-11T10:22:55ZHugo Beauzée-LuyssenSIGABRT: Request [UPDATE Media SET type = ? WHERE id_media = ?] aborted due to constraint violation (FOREIGN KEY constraint failed)```
medialibrary::sqlite::errors::mapToException(char const*, char const*, int) SqliteErrors.h:619
medialibrary::sqlite::Statement::row() SqliteTools.h:206
void medialibrary::sqlite::Tools::executeRequestLocked<medialibrary::...```
medialibrary::sqlite::errors::mapToException(char const*, char const*, int) SqliteErrors.h:619
medialibrary::sqlite::Statement::row() SqliteTools.h:206
void medialibrary::sqlite::Tools::executeRequestLocked<medialibrary::IMedia::Type&, long long&>(medialibrary::sqlite::Connection*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, medialibrary::IMedia::Type&&&, long long&&&) SqliteTools.h:438
bool medialibrary::sqlite::Tools::executeDelete<medialibrary::IMedia::Type&, long long&>(medialibrary::sqlite::Connection*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, medialibrary::IMedia::Type&&&, long long&&&) SqliteTools.h:333
medialibrary::Media::setType(medialibrary::IMedia::Type) SqliteTools.h:353
medialibrary::parser::MetadataAnalyzer::refreshMedia(medialibrary::parser::IItem&) const MetadataParser.cpp:687
medialibrary::parser::MetadataAnalyzer::refreshFile(medialibrary::parser::IItem&) const MetadataParser.cpp:646
medialibrary::parser::MetadataAnalyzer::run(medialibrary::parser::IItem&) MetadataParser.cpp:124
medialibrary::parser::Worker::mainloop() ParserWorker.cpp:242
void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (medialibrary::parser::Worker::*)(), medialibrary::parser::Worker*> >(void*) type_traits:4302
_pthread_start
```Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/246SIGABRT: Failed to run request [COMMIT]: cannot commit - no transaction is ac...2021-09-07T15:19:28ZHugo Beauzée-LuyssenSIGABRT: Failed to run request [COMMIT]: cannot commit - no transaction is active(1)```
medialibrary::sqlite::errors::mapToException(char const*, char const*, int) SqliteErrors.h:673
medialibrary::sqlite::Statement::row() SqliteTools.h:206
medialibrary::sqlite::Transaction::~Transaction() SqliteTransaction.c...```
medialibrary::sqlite::errors::mapToException(char const*, char const*, int) SqliteErrors.h:673
medialibrary::sqlite::Statement::row() SqliteTools.h:206
medialibrary::sqlite::Transaction::~Transaction() SqliteTransaction.cpp:80
medialibrary::parser::MetadataAnalyzer::run(medialibrary::parser::IItem&) memory:2339
medialibrary::parser::Worker::mainloop() ParserWorker.cpp:242
void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (medialibrary::parser::Worker::*)(), medialibrary::parser::Worker*> >(void*) type_traits:4302
_pthread_start
```
https://appcenter.ms/orgs/videolan/apps/VLC-for-iOS-production/crashes/errors/717274047u/overviewHugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/245Unhandled exception when fetching folder MRL2020-05-11T16:18:20ZHugo Beauzée-LuyssenUnhandled exception when fetching folder MRL```
#00 pc 00000000000225f4 /system/lib64/libc.so (abort+116)
#01 pc 000000000009e8e8 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/lib/arm64/libc++_shared.so
#02 pc 000000000009eadc /data/app/org.videolan.vlc-xm2yI3iMfSOF...```
#00 pc 00000000000225f4 /system/lib64/libc.so (abort+116)
#01 pc 000000000009e8e8 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/lib/arm64/libc++_shared.so
#02 pc 000000000009eadc /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/lib/arm64/libc++_shared.so
#03 pc 00000000000b0530 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/lib/arm64/libc++_shared.so
#04 pc 00000000000afb5c /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/lib/arm64/libc++_shared.so
#05 pc 00000000000afab8 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/lib/arm64/libc++_shared.so (__cxa_throw+112)
#06 pc 0000000000234418 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/lib/arm64/libmla.so (medialibrary::Folder::mrl() const+568)
#07 pc 00000000000e5380 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/lib/arm64/libmla.so (entryPoints(_JNIEnv*, _jobject*)+792)
#08 pc 00000000000fd7ac /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/oat/arm64/base.odex (offset 0xfc000) (org.videolan.medialibrary.MedialibraryImpl.nativeDevices [DEDUPED]+124)
#09 pc 0000000000301cac /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/oat/arm64/base.odex (offset 0xfc000) (org.videolan.medialibrary.MedialibraryImpl.getFoldersList+92)
#10 pc 00000000002ed398 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/oat/arm64/base.odex (offset 0xfc000) (org.videolan.vlc.gui.helpers.MedialibraryUtils.isScanned+184)
#11 pc 000000000036f140 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/oat/arm64/base.odex (offset 0xfc000) (org.videolan.vlc.gui.browser.FileBrowserFragment$onPrepareOptionsMenu$1$1$isScanned$1.invokeSuspend+160)
#12 pc 000000000025aa20 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/oat/arm64/base.odex (offset 0xfc000) (kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith+240)
#13 pc 00000000002fbdb8 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/oat/arm64/base.odex (offset 0xfc000) (kotlinx.coroutines.DispatchedTask.run+1464)
#14 pc 00000000002d6e08 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/oat/arm64/base.odex (offset 0xfc000) (kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely+56)
#15 pc 00000000002d2648 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/oat/arm64/base.odex (offset 0xfc000) (kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker+1016)
#16 pc 00000000002d3b38 /data/app/org.videolan.vlc-xm2yI3iMfSOFPz_Eedmn2w==/oat/arm64/base.odex (offset 0xfc000) (kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run+40)
```
From the vlc-android crash console.
Most likely trying to access a removable folder that was removed.Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/243iOS: SIGABRT: mutex lock failed: Invalid argument2021-09-07T15:19:33ZSoomin LeeiOS: SIGABRT: mutex lock failed: Invalid argumentReports received with the 3.2.8 release based on 244c21b10b0130f6cda3b7293ad94beb47ce92da.
https://appcenter.ms/orgs/videolan/apps/VLC-for-iOS-production/crashes/errors/753022876u/overviewReports received with the 3.2.8 release based on 244c21b10b0130f6cda3b7293ad94beb47ce92da.
https://appcenter.ms/orgs/videolan/apps/VLC-for-iOS-production/crashes/errors/753022876u/overviewhttps://code.videolan.org/videolan/medialibrary/-/issues/242SIGABRT: Request [INSERT INTO Show(title) VALUES(?)] aborted due to constrain...2020-05-11T09:51:44ZSoomin LeeSIGABRT: Request [INSERT INTO Show(title) VALUES(?)] aborted due to constraint violation (constraint failed)With the 3.2.8 release based on 244c21b10b0130f6cda3b7293ad94beb47ce92da, we are seeing new reports on startup.
```
medialibrary::sqlite::errors::mapToException(char const*, char const*, int) SqliteErrors.h:627
medialibrary::sqlite::Sta...With the 3.2.8 release based on 244c21b10b0130f6cda3b7293ad94beb47ce92da, we are seeing new reports on startup.
```
medialibrary::sqlite::errors::mapToException(char const*, char const*, int) SqliteErrors.h:627
medialibrary::sqlite::Statement::row() SqliteTools.h:206
void medialibrary::sqlite::Tools::executeRequestLocked<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(medialibrary::sqlite::Connection*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&&&) SqliteTools.h:438
long long medialibrary::sqlite::Tools::executeInsert<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(medialibrary::sqlite::Connection*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&&&) SqliteTools.h:370
medialibrary::Show::create(medialibrary::MediaLibrary const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) DatabaseHelpers.h:128
medialibrary::parser::MetadataAnalyzer::parseVideoFile(medialibrary::parser::IItem&) const MetadataParser.cpp:456
medialibrary::parser::MetadataAnalyzer::run(medialibrary::parser::IItem&) MetadataParser.cpp:212
medialibrary::parser::Worker::mainloop() ParserWorker.cpp:242
void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (medialibrary::parser::Worker::*)(), medialibrary::parser::Worker*> >(void*) type_traits:4302
_pthread_start
```
https://appcenter.ms/orgs/videolan/apps/VLC-for-iOS-production/crashes/errors/3735290513u/overview
Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/241Sorting integers should be more clever2022-08-08T06:24:02ZFelix Paul Kühnefkuehne@videolan.orgSorting integers should be more cleverWhen sorting 001.mp3, 002.mp3, ..., 011.mp3, the order will be 001, 011, 002, which doesn't play well with the content.When sorting 001.mp3, 002.mp3, ..., 011.mp3, the order will be 001, 011, 002, which doesn't play well with the content.https://code.videolan.org/videolan/medialibrary/-/issues/238Do not delete media when their parent folder gets removed2021-05-04T13:04:35ZHugo Beauzée-LuyssenDo not delete media when their parent folder gets removedIn order to preserve known information, we need to switch from cascading the deletion of a folder (when removed from the indexed folder list) to converting any media that would be removed into an external media.
This would allow to:
* K...In order to preserve known information, we need to switch from cascading the deletion of a folder (when removed from the indexed folder list) to converting any media that would be removed into an external media.
This would allow to:
* Keep the media in any playlists without ugly kludges
* Preserve the user provided information
When converting a media from "internal" to "external", we still need to remove it from any album/artist/show it was linked to.Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/237When grouping multiple medias, the created group has no name2020-04-22T16:28:47ZNicolas PomepuyWhen grouping multiple medias, the created group has no nameIt should be the smallest common denominator of the medias.
Maybe it can fallback to the first media name if no common denominator is found?It should be the smallest common denominator of the medias.
Maybe it can fallback to the first media name if no common denominator is found?Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/236Allow uncompleted playback to be fetched2020-06-30T11:57:36ZHugo Beauzée-LuyssenAllow uncompleted playback to be fetchedIn order to implement a "Continue watching" feature from the UIs, we need to be able to return a list of media that have not been marked as completed, or that have a progress set.
The main issue is that the progress is a media meta, mea...In order to implement a "Continue watching" feature from the UIs, we need to be able to return a list of media that have not been marked as completed, or that have a progress set.
The main issue is that the progress is a media meta, meaning it's application defined, and the media library doesn't know what the stored value means. For example, iOS uses the playback position, ie. a float in [0;1] range (https://code.videolan.org/videolan/vlc-ios/-/blob/master/SharedSources/MediaLibraryService.swift#L379) while vlc-android uses the current playback time (https://code.videolan.org/videolan/vlc-android/-/blob/master/application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt#L444)
This prevents us from providing a way for the application to get the (most recent?) uncompleted playbacks.
We need to expose the progress as a full blown media field, and enforce a common representation for it
* [x] Add a progress field, holding a `REAL`, defaulting to -1
* [x] Index that field since we will be querying media filtering with this field
* [x] Remove `IMedia::MetadataType::Progress`, be sure to assign 51 to the `Speed` enum member
* [x] Replace 'increasePlayCount` by a `setProgress` function, which will take the new progress, and update the play count accordingly
* [x] Handle migration from Android & iOS previous meta
* [x] Add a `uncompleteMedia` accessor to `IMediaLibrary`
Not sure if we should enforce filtering out audio media when accessing uncomplete media.
Not sure `uncompleteMedia` is the best name, suggestions welcome :)Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/234MediaGroups: Creation of groups by appending2020-04-09T11:53:59ZSoomin LeeMediaGroups: Creation of groups by appendingIn a context where we have two non-userInteracted groups(G1, G2) created by the import of media, it seems that appending G2 into G1 doesn't seem to behave as expected.
The expected scenario would be:
- Import two videos, creation of G1...In a context where we have two non-userInteracted groups(G1, G2) created by the import of media, it seems that appending G2 into G1 doesn't seem to behave as expected.
The expected scenario would be:
- Import two videos, creation of G1 and G2 by the medialibrary
- Append G2 into G1
- G1 is now `userInteracted` with nbMedia of two
- G2 is automatically silently destroyed
Note: The append action works as expected if a `userInteracted` group is present either as a source or destination group.Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/231Migration: Audio title no preserved2020-03-27T13:44:39ZSoomin LeeMigration: Audio title no preservedMigrating from 0.6.x to master doesn't seem to preserve the custom titles set by the user for audio tracks.
No issues for videos.Migrating from 0.6.x to master doesn't seem to preserve the custom titles set by the user for audio tracks.
No issues for videos.https://code.videolan.org/videolan/medialibrary/-/issues/229src/Media.cpp:94 assert failed after updating to latest medialibrary and vlc2020-03-11T18:46:00ZChristopher Degawasrc/Media.cpp:94 assert failed after updating to latest medialibrary and vlc![image](/uploads/59cfba7ce9f8650d107b2c4053bdd811/image.png)
```c++
Media::Media( MediaLibraryPtr ml, sqlite::Row& row )
: m_ml( ml )
// DB field extraction:
, m_id( row.load<decltype(m_id)>( 0 ) )
, m_type( row.load<dec...![image](/uploads/59cfba7ce9f8650d107b2c4053bdd811/image.png)
```c++
Media::Media( MediaLibraryPtr ml, sqlite::Row& row )
: m_ml( ml )
// DB field extraction:
, m_id( row.load<decltype(m_id)>( 0 ) )
, m_type( row.load<decltype(m_type)>( 1 ) )
, m_subType( row.load<decltype(m_subType)>( 2 ) )
, m_duration( row.load<decltype(m_duration)>( 3 ) )
, m_playCount( row.load<decltype(m_playCount)>( 4 ) )
, m_lastPlayedDate( row.load<decltype(m_lastPlayedDate)>( 5 ) )
// skip real_last_played_date as we don't need it in memory
, m_insertionDate( row.load<decltype(m_insertionDate)>( 7 ) )
, m_releaseDate( row.load<decltype(m_releaseDate)>( 8 ) )
, m_title( row.load<decltype(m_title)>( 9 ) )
, m_filename( row.load<decltype(m_filename)>( 10 ) )
, m_isFavorite( row.load<decltype(m_isFavorite)>( 11 ) )
// Skip is_present
, m_deviceId( row.load<decltype(m_deviceId)>( 13 ) )
, m_nbPlaylists( row.load<unsigned int>( 14 ) )
, m_folderId( row.load<decltype(m_folderId)>( 15 ) )
, m_importType( row.load<decltype(m_importType)>( 16 ) )
, m_groupId( row.load<decltype(m_groupId)>( 17 ) )
, m_forcedTitle( row.load<decltype(m_forcedTitle)>( 18 ) )
// End of DB fields extraction
, m_metadata( m_ml, IMetadata::EntityType::Media )
, m_changed( false )
{
assert( row.nbColumns() == 19 );
}
```
Nothing is particularly printed when running vlc through gdb
This occurred with and without the patches in #225https://code.videolan.org/videolan/medialibrary/-/issues/227Automatically handle nested transactions2021-09-09T15:54:20ZHugo Beauzée-LuyssenAutomatically handle nested transactionsWe start to have a lot of code like
```
std::unique_ptr<sqlite::Transaction> t;
if ( sqlite::Transaction::transactionInProgress() == false )
t = m_ml->getConn()->newTransaction();
// Do stuff
if ( t != nullptr )
...We start to have a lot of code like
```
std::unique_ptr<sqlite::Transaction> t;
if ( sqlite::Transaction::transactionInProgress() == false )
t = m_ml->getConn()->newTransaction();
// Do stuff
if ( t != nullptr )
t->commit();
```
It would be easier and less bug prone to do this automatically when instantiating the transaction, and either have a no-op transaction implementation, or be fancy and have a `SAVEPOINT` / `RELEASE` transactio instead of `BEGIN` / `COMMIT`Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/225src/discoverer/FsDiscoverer.cpp:453 assert fails when a folder is in a networ...2020-05-12T14:58:21ZChristopher Degawasrc/discoverer/FsDiscoverer.cpp:453 assert fails when a folder is in a network share Windows 10```c++
bool FsDiscoverer::addFolder( std::shared_ptr<fs::IDirectory> folder,
Folder* parentFolder,
const IInterruptProbe& interruptProbe ) const
{
auto deviceFs = folder->de...```c++
bool FsDiscoverer::addFolder( std::shared_ptr<fs::IDirectory> folder,
Folder* parentFolder,
const IInterruptProbe& interruptProbe ) const
{
auto deviceFs = folder->device();
// We are creating a folder, there has to be a device containing it.
assert( deviceFs != nullptr );
```
assert fails in vlc when a user folder is located on an smb share
In my case, I have an E:\ drive that is mapped to a samba share and under it, I have moved my `Videos` folder to E:\Videos so going to videos in the Quick Access in explorer goes to E:\Videos instead
running vlc produces an assertion failure and running with gdb prints
```none
...
warning: medialibrary medialibrary debug: ../src/discoverer/DiscovererWorker.cpp:582 runDiscover Running discover on: file:///E:/Videos/
warning: medialibrary medialibrary warning: ../src/Folder.cpp:466 fromMrl Failed to get device containing an existing folder: file:///E:/Videos/
...
```Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/223IMedia: removeFromGroup success behaviour2020-03-05T16:08:18ZSoomin LeeIMedia: removeFromGroup success behaviourCurrently, after a successful removal of media from a group, there isn't a group that is automatically created for each medium.
Is this a behaviour we want on the medialibrary side or should this behaviour be integrated on the app side?Currently, after a successful removal of media from a group, there isn't a group that is automatically created for each medium.
Is this a behaviour we want on the medialibrary side or should this behaviour be integrated on the app side?