+XMLNode&
+Diskstream::get_state ()
+{
+ XMLNode* node = new XMLNode ("Diskstream");
+ char buf[64];
+ LocaleGuard lg (X_("POSIX"));
+
+ node->add_property ("flags", enum_2_string (_flags));
+ node->add_property ("playlist", _playlist->name());
+ node->add_property("name", _name);
+ id().print (buf, sizeof (buf));
+ node->add_property("id", buf);
+ snprintf (buf, sizeof(buf), "%f", _visible_speed);
+ node->add_property ("speed", buf);
+ node->add_property ("capture-alignment", enum_2_string (_alignment_choice));
+
+ if (_extra_xml) {
+ node->add_child_copy (*_extra_xml);
+ }
+
+ return *node;
+}
+
+int
+Diskstream::set_state (const XMLNode& node, int /*version*/)
+{
+ const XMLProperty* prop;
+
+ if ((prop = node.property ("name")) != 0) {
+ _name = prop->value();
+ }
+
+ if (deprecated_io_node) {
+ set_id (*deprecated_io_node);
+ } else {
+ set_id (node);
+ }
+
+ if ((prop = node.property ("flags")) != 0) {
+ _flags = Flag (string_2_enum (prop->value(), _flags));
+ }
+
+ if ((prop = node.property (X_("capture-alignment"))) != 0) {
+ set_align_choice (AlignChoice (string_2_enum (prop->value(), _alignment_choice)), true);
+ } else {
+ set_align_choice (Automatic, true);
+ }
+
+ if ((prop = node.property ("playlist")) == 0) {
+ return -1;
+ }
+
+ if (find_and_use_playlist (prop->value())) {
+ return -1;
+ }
+
+ if ((prop = node.property ("speed")) != 0) {
+ double sp = atof (prop->value().c_str());
+
+ if (realtime_set_speed (sp, false)) {
+ non_realtime_set_speed ();