Commit Graph

39 Commits

Author SHA1 Message Date
Jim Broadus d041da18cc Handle case where a lister adds a device before loaded from database.
There is a small chance that a device lister is able to discover and add a
previously known device before it is added by the database loader thread.
In this case, copy the data that is user-settable to the existing DeviceInfo
object and destroy the object created from the database query.

This adds and utilizes a new FindEquivalentDevice method that compares the
device unique IDs. This could probably be made more robust as the unique
IDs for some listers may change. However, this is a problem with the database
storage implementation in general.
2019-02-24 00:05:18 -08:00
Jim Broadus a62062127e Fix thread-safety issues when initially loading devices from the database.
When DeviceManager initializes, it creates a thread to load device information
from the database. Part of this process includes use of QPixMap for icons which
produced a warning message:

22:32:53.763 WARN  unknown                          QPixmap: It is not safe to use pixmaps outside the GUI thread

In addition, the device is added to the view using beginInsertRows and
endInsertRows. This could contend with a device added by a lister signaling
PhysicalDeviceAdded.

To solve these problems, this change moves the icon loading and insertion to the
main thread. LoadAllDevices reads the data from the database and creates the
DeviceInfo object, then sends a signal to the main thread. In the signal
handler, the icon is loaded and the device is added to the master list and view.
2019-02-24 00:03:45 -08:00
Jonas Kvinge ed3d462674 Fix memory leak and use ItemToIndex / IndexToItem (#6262) 2019-01-21 21:38:46 +00:00
Jonas Kvinge 7e25a7c7e4 Convert devices manager(model) to QAbstractItemModel (#6260) 2019-01-21 09:06:48 +00:00
Jim Broadus 6c159481ed Handle MTP connection failures more gracefully. (#6256)
Currently, the failure to connect to an MTP device results in the UI displaying
an open device that appears empty. This change introduces a method
ConnectedDevice::ConnectAsync() that is expected to handle any connecting tasks
that could block asynchronously. Upon completion, this emits a ConnectFinished
signal that indicates success or failure. The row in the UI is only updated
after the successful response is received. Upon failure, DeviceManager will
clean up and the row in UI is left in the pre-connect state.

Currently, only the MtpDevice utilizes this mechanism. All other devices use a
default implementation that immediately reports success.
2019-01-15 21:10:05 +00:00
John Maguire 5146bcdebc Some more NULL -> nullptr conversions. 2014-02-21 17:30:46 +01:00
John Maguire 192b60d965 Use nullptr as parent parameter default everywhere 2014-02-10 16:03:54 +01:00
John Maguire 3323c2d094 Convert all instances of foreach() to a C++11 for
find ext src -name '*.cpp' -exec \
    sed -i -e 's/foreach(\([^,]\+\),/for (\1 :/' {} \;
2014-02-10 14:43:32 +01:00
John Maguire bebd781fdf Reformat all non-3rd-party C/C++/Objective-C++.
Command line:
find src ext -regex '.*\.\(h\|cpp\|mm\)' -exec clang-format -i
 -style='{BasedOnStyle: Google, DerivePointerBinding: false}' {} \;
2014-02-07 16:34:20 +01:00
John Maguire d309d4ab27 Use c++11 instead of boost where possible. 2014-02-06 16:51:39 +01:00
John Maguire 58a3a6831a Move loading of devices from the database onto a different thread. 2012-06-29 16:56:17 +02:00
David Sansome 48f15c9fc7 Refactoring: instead of passing individual pointers to useful core classes (like TaskManager or LibraryBackend) to each class that uses them, pass one singleton-like Application instance everywhere. 2012-02-26 14:40:51 +00:00
David Sansome ed1a25693c Add missing licenses to debian/copyright, and add copyright information to each source file 2010-11-20 13:27:10 +00:00
David Sansome c2ac3f8f32 Don't mount GIO devices automatically, instead put them in a "not mounted" state in the GUI and mount them when double-clicked on. Fixes issue #719. Probably fixes issue #723. 2010-09-11 12:29:44 +00:00
David Sansome e4efa8a93e Show the total song count on each device, instead of the mountpoint 2010-08-30 14:45:27 +00:00
David Sansome 4b381e00fd Transcode files when copying them to devices 2010-08-29 19:22:21 +00:00
David Sansome d8ea4660e7 Store the device's transcode preference in the database 2010-08-29 15:32:36 +00:00
David Sansome 78db71c02c Semi-working WMDM device lister 2010-08-15 23:26:04 +00:00
David Sansome 6faa1aa1a6 Merge iLister devices with GIO devices 2010-08-01 11:55:01 +00:00
David Sansome 02783b1d5d Unmount devices from the main thread instead of the organiser thread - fixes a crash when unmounting after copying 2010-08-01 11:01:07 +00:00
David Sansome eeafce66bc Show devices in the organise dialog that are connected but not open 2010-07-25 09:27:41 +00:00
David Sansome a9d75e628b Remove the connect/disconnect actions and replace them with an eject device action. Implement eject on devicekit and gio. 2010-07-25 01:07:51 +00:00
David Sansome 94a9d520b5 Show the mount path of connected devices 2010-07-24 23:20:34 +00:00
David Sansome 81a1a9926e Disable the "copy to device" action if there are no devices connected 2010-07-24 18:31:05 +00:00
David Sansome 62616304d8 Add a MusicStorage interface that can be used to abstract away the details of copying a file to a device. 2010-07-19 19:56:29 +00:00
David Sansome d704680579 Show some more information for GIO devices 2010-07-17 22:06:19 +00:00
David Sansome a2fe094bbe Improve device icon loading slightly 2010-07-17 21:48:09 +00:00
David Sansome 43a73555db Implement the rest of the GIO backend. Devices are now keyed off "mount URLs" as well as backend-specific device IDs, if two or more devices share the same mount URL then the metadata gets taken from the most reliable backend. 2010-07-17 17:18:02 +00:00
David Sansome 0dcdf36535 Start of work on a GIO/GVFS device backend. 2010-07-17 14:22:07 +00:00
David Sansome e9525e8ec3 Very basic support for reading iPods with libgpod. Uses a hardcoded ~/.gvfs path for now. 2010-07-04 20:52:45 +00:00
David Sansome 2762d80722 Show the scanning progress in the device view 2010-07-04 15:56:08 +00:00
David Sansome aa49082952 Save changes made in the device properties dialog 2010-07-04 15:18:37 +00:00
David Sansome b3af9fa7d7 Add a device properties dialog 2010-07-04 15:01:24 +00:00
David Sansome a892489de7 Add a menu option to forget a device, and add some helpful information dialogs 2010-07-04 12:56:49 +00:00
David Sansome 88474551d5 Make the device view prettier 2010-07-04 11:34:25 +00:00
David Sansome 71a1cf3c41 Disconnecting devices works 2010-07-04 00:33:34 +00:00
David Sansome db5409b66b Store devices in the main database 2010-07-03 23:00:07 +00:00
David Sansome 6654182032 Don't connect new devices automatically, put them in a list model. Add icons for ipods, android phones and USB memory sticks. 2010-07-03 21:05:55 +00:00
David Sansome 2deca7fd61 Add a DeviceManager which holds all the listers and connected devices. Make FilesystemDevices use their own LibraryWatcher. 2010-06-26 12:41:18 +00:00