1
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								NEWS
									
									
									
									
									
								
							@@ -7,6 +7,7 @@ ver 0.21.5 (not yet released)
 | 
			
		||||
  - fix assertion failures with mount points
 | 
			
		||||
* storage
 | 
			
		||||
  - udisks: fix "AlreadyMounted" error
 | 
			
		||||
  - udisks: use relative path from mount URI
 | 
			
		||||
* input
 | 
			
		||||
  - buffer: fix crash bug when playing remote WAV file
 | 
			
		||||
* tags
 | 
			
		||||
 
 | 
			
		||||
@@ -46,6 +46,8 @@ class UdisksStorage final : public Storage {
 | 
			
		||||
	const std::string base_uri;
 | 
			
		||||
	const std::string id;
 | 
			
		||||
 | 
			
		||||
	const AllocatedPath inside_path;
 | 
			
		||||
 | 
			
		||||
	std::string dbus_path;
 | 
			
		||||
 | 
			
		||||
	SafeSingleton<ODBus::Glue> dbus_glue;
 | 
			
		||||
@@ -64,10 +66,12 @@ class UdisksStorage final : public Storage {
 | 
			
		||||
	DeferEvent defer_mount, defer_unmount;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	template<typename B, typename I>
 | 
			
		||||
	UdisksStorage(EventLoop &_event_loop, B &&_base_uri, I &&_id)
 | 
			
		||||
	template<typename B, typename I, typename IP>
 | 
			
		||||
	UdisksStorage(EventLoop &_event_loop, B &&_base_uri, I &&_id,
 | 
			
		||||
		      IP &&_inside_path)
 | 
			
		||||
		:base_uri(std::forward<B>(_base_uri)),
 | 
			
		||||
		 id(std::forward<I>(_id)),
 | 
			
		||||
		 inside_path(std::forward<IP>(_inside_path)),
 | 
			
		||||
		 dbus_glue(_event_loop),
 | 
			
		||||
		 defer_mount(_event_loop, BIND_THIS_METHOD(DeferredMount)),
 | 
			
		||||
		 defer_unmount(_event_loop, BIND_THIS_METHOD(DeferredUnmount)) {}
 | 
			
		||||
@@ -137,7 +141,10 @@ private:
 | 
			
		||||
inline void
 | 
			
		||||
UdisksStorage::SetMountPoint(Path mount_point)
 | 
			
		||||
{
 | 
			
		||||
	mounted_storage = CreateLocalStorage(mount_point);
 | 
			
		||||
	mounted_storage = inside_path.IsNull()
 | 
			
		||||
		? CreateLocalStorage(mount_point)
 | 
			
		||||
		: CreateLocalStorage(mount_point / inside_path);
 | 
			
		||||
 | 
			
		||||
	mount_error = {};
 | 
			
		||||
	want_mount = false;
 | 
			
		||||
	cond.broadcast();
 | 
			
		||||
@@ -360,12 +367,17 @@ CreateUdisksStorageURI(EventLoop &event_loop, const char *base_uri)
 | 
			
		||||
	} else {
 | 
			
		||||
		id = {id_begin, relative_path};
 | 
			
		||||
		++relative_path;
 | 
			
		||||
		while (*relative_path == '/')
 | 
			
		||||
			++relative_path;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO: use relative_path
 | 
			
		||||
	auto inside_path = *relative_path != 0
 | 
			
		||||
		? AllocatedPath::FromUTF8Throw(relative_path)
 | 
			
		||||
		: nullptr;
 | 
			
		||||
 | 
			
		||||
	return std::make_unique<UdisksStorage>(event_loop, base_uri,
 | 
			
		||||
					       std::move(id));
 | 
			
		||||
					       std::move(id),
 | 
			
		||||
					       std::move(inside_path));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const StoragePlugin udisks_storage_plugin = {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user