/*
- Copyright (C) 2012-2020 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
*/
+
#include "cross.h"
#include "compose.hpp"
#include "dcpomatic_log.h"
DCPOMATIC_DISABLE_WARNINGS
#include <libxml++/libxml++.h>
DCPOMATIC_ENABLE_WARNINGS
+#include <boost/algorithm/string.hpp>
#include <iostream>
#include "i18n.h"
+
using std::string;
+using std::vector;
+using boost::optional;
+
Drive::Drive (string xml)
{
Drive::as_xml () const
{
xmlpp::Document doc;
- xmlpp::Element* root = doc.create_root_node ("Drive");
+ auto root = doc.create_root_node ("Drive");
root->add_child("Device")->add_child_text(_device);
for (auto i: _mount_points) {
root->add_child("MountPoint")->add_child_text(i.string());
return String::compose(_("%1 (%2 GB) [%3]"), name, gb, _device);
}
+
string
Drive::log_summary () const
{
_device, mp, _size, _vendor.get_value_or("[none]"), _model.get_value_or("[none]")
);
}
+
+
+
+/* This is in _common so we can use it in unit tests */
+optional<OSXMediaPath>
+analyse_osx_media_path (string path)
+{
+ using namespace boost::algorithm;
+
+ if (path.find("/IOHDIXController") != string::npos) {
+ /* This is a disk image, so we completely ignore it */
+ LOG_DISK_NC("Ignoring this as it seems to be a disk image");
+ return {};
+ }
+
+ OSXMediaPath mp;
+ if (starts_with(path, "IODeviceTree:")) {
+ mp.real = true;
+ } else if (starts_with(path, "IOService:")) {
+ mp.real = false;
+ } else {
+ return {};
+ }
+
+ vector<string> bits;
+ split(bits, path, boost::is_any_of("/"));
+ for (auto i: bits) {
+ if (starts_with(i, "PRT")) {
+ mp.prt = i;
+ }
+ }
+
+ return mp;
+}
+
+