Skip to content

Commit

Permalink
#1124 Another refactoring: Use only one SendMidiDestination type
Browse files Browse the repository at this point in the history
  • Loading branch information
helgoboss committed Aug 26, 2024
1 parent a4bd94a commit 9af95f2
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 90 deletions.
40 changes: 31 additions & 9 deletions api/src/persistence/target.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1014,7 +1014,7 @@ pub struct SendMidiTarget {
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub destination: Option<MidiDestination>,
pub destination: Option<SendMidiDestination>,
}

#[derive(Eq, PartialEq, Default, Serialize, Deserialize)]
Expand Down Expand Up @@ -2265,19 +2265,41 @@ impl Default for PlaytimeRowDescriptor {
}
}

#[derive(Eq, PartialEq, Serialize, Deserialize)]
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Default,
Serialize,
Deserialize,
EnumIter,
TryFromPrimitive,
IntoPrimitive,
Display,
)]
#[repr(usize)]
#[serde(tag = "kind")]
pub enum MidiDestination {
pub enum SendMidiDestination {
#[serde(alias = "fx-output")]
#[display(fmt = "FX output")]
#[default]
FxOutput,
#[serde(alias = "feedback-output")]
#[display(fmt = "Feedback output")]
FeedbackOutput,
DeviceInput,
#[serde(alias = "device-input")]
#[display(fmt = "Same device input")]
SameDeviceInput,
// #[display(fmt = "Explicit device input")]
// ExplicitDeviceInput(ExplicitDeviceInputMidiDestination),
}

impl Default for MidiDestination {
fn default() -> Self {
Self::FeedbackOutput
}
}
// #[derive(Copy, Clone, Eq, PartialEq, Debug, Serialize, Deserialize)]
// pub struct ExplicitDeviceInputMidiDestination {
// pub input_device_id: u32,
// }

#[derive(Eq, PartialEq, Serialize, Deserialize)]
#[serde(tag = "kind")]
Expand Down
42 changes: 21 additions & 21 deletions main/src/application/target_model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,26 +23,26 @@ use crate::domain::{
ExpressionEvaluator, ExtendedProcessorContext, FeedbackResolution, FxDescriptor, FxDisplayType,
FxParameterDescriptor, GroupId, MappingId, MappingKey, MappingRef, MappingSnapshotId,
MouseActionType, OscDeviceId, PotFilterItemsTargetSettings, ProcessorContext,
QualifiedMappingId, RealearnTarget, ReaperTarget, ReaperTargetType, SeekOptions,
SendMidiDestination, SoloBehavior, Tag, TagScope, TouchedRouteParameterType,
TouchedTrackParameterType, TrackDescriptor, TrackExclusivity, TrackGangBehavior,
TrackRouteDescriptor, TrackRouteSelector, TrackRouteType, TransportAction,
UnresolvedActionTarget, UnresolvedAllTrackFxEnableTarget, UnresolvedAnyOnTarget,
UnresolvedAutomationModeOverrideTarget, UnresolvedBrowseFxsTarget, UnresolvedBrowseGroupTarget,
UnresolvedBrowsePotFilterItemsTarget, UnresolvedBrowsePotPresetsTarget,
UnresolvedBrowseTracksTarget, UnresolvedCompartmentParameterValueTarget,
UnresolvedCompoundMappingTarget, UnresolvedDummyTarget, UnresolvedEnableInstancesTarget,
UnresolvedEnableMappingsTarget, UnresolvedFxEnableTarget, UnresolvedFxOnlineTarget,
UnresolvedFxOpenTarget, UnresolvedFxParameterTarget, UnresolvedFxParameterTouchStateTarget,
UnresolvedFxPresetTarget, UnresolvedFxToolTarget, UnresolvedGoToBookmarkTarget,
UnresolvedLastTouchedTarget, UnresolvedLoadFxSnapshotTarget,
UnresolvedLoadMappingSnapshotTarget, UnresolvedLoadPotPresetTarget, UnresolvedMidiSendTarget,
UnresolvedModifyMappingTarget, UnresolvedMouseTarget, UnresolvedOscSendTarget,
UnresolvedPlayrateTarget, UnresolvedPreviewPotPresetTarget, UnresolvedReaperTarget,
UnresolvedRouteAutomationModeTarget, UnresolvedRouteMonoTarget, UnresolvedRouteMuteTarget,
UnresolvedRoutePanTarget, UnresolvedRoutePhaseTarget, UnresolvedRouteTouchStateTarget,
UnresolvedRouteVolumeTarget, UnresolvedSeekTarget, UnresolvedTakeMappingSnapshotTarget,
UnresolvedTempoTarget, UnresolvedTrackArmTarget, UnresolvedTrackAutomationModeTarget,
QualifiedMappingId, RealearnTarget, ReaperTarget, ReaperTargetType, SeekOptions, SoloBehavior,
Tag, TagScope, TouchedRouteParameterType, TouchedTrackParameterType, TrackDescriptor,
TrackExclusivity, TrackGangBehavior, TrackRouteDescriptor, TrackRouteSelector, TrackRouteType,
TransportAction, UnresolvedActionTarget, UnresolvedAllTrackFxEnableTarget,
UnresolvedAnyOnTarget, UnresolvedAutomationModeOverrideTarget, UnresolvedBrowseFxsTarget,
UnresolvedBrowseGroupTarget, UnresolvedBrowsePotFilterItemsTarget,
UnresolvedBrowsePotPresetsTarget, UnresolvedBrowseTracksTarget,
UnresolvedCompartmentParameterValueTarget, UnresolvedCompoundMappingTarget,
UnresolvedDummyTarget, UnresolvedEnableInstancesTarget, UnresolvedEnableMappingsTarget,
UnresolvedFxEnableTarget, UnresolvedFxOnlineTarget, UnresolvedFxOpenTarget,
UnresolvedFxParameterTarget, UnresolvedFxParameterTouchStateTarget, UnresolvedFxPresetTarget,
UnresolvedFxToolTarget, UnresolvedGoToBookmarkTarget, UnresolvedLastTouchedTarget,
UnresolvedLoadFxSnapshotTarget, UnresolvedLoadMappingSnapshotTarget,
UnresolvedLoadPotPresetTarget, UnresolvedMidiSendTarget, UnresolvedModifyMappingTarget,
UnresolvedMouseTarget, UnresolvedOscSendTarget, UnresolvedPlayrateTarget,
UnresolvedPreviewPotPresetTarget, UnresolvedReaperTarget, UnresolvedRouteAutomationModeTarget,
UnresolvedRouteMonoTarget, UnresolvedRouteMuteTarget, UnresolvedRoutePanTarget,
UnresolvedRoutePhaseTarget, UnresolvedRouteTouchStateTarget, UnresolvedRouteVolumeTarget,
UnresolvedSeekTarget, UnresolvedTakeMappingSnapshotTarget, UnresolvedTempoTarget,
UnresolvedTrackArmTarget, UnresolvedTrackAutomationModeTarget,
UnresolvedTrackMonitoringModeTarget, UnresolvedTrackMuteTarget, UnresolvedTrackPanTarget,
UnresolvedTrackParentSendTarget, UnresolvedTrackPeakTarget, UnresolvedTrackPhaseTarget,
UnresolvedTrackSelectionTarget, UnresolvedTrackShowTarget, UnresolvedTrackSoloTarget,
Expand All @@ -65,7 +65,7 @@ use helgobox_api::persistence::{
MappingModification, MappingSnapshotDescForLoad, MappingSnapshotDescForTake, MonitoringMode,
MouseAction, MouseButton, PlaytimeColumnAction, PlaytimeColumnDescriptor, PlaytimeMatrixAction,
PlaytimeRowAction, PlaytimeRowDescriptor, PlaytimeSlotDescriptor, PlaytimeSlotManagementAction,
PlaytimeSlotTransportAction, PotFilterKind, SeekBehavior,
PlaytimeSlotTransportAction, PotFilterKind, SeekBehavior, SendMidiDestination,
SetTargetToLastTouchedMappingModification, TargetTouchCause, TrackDescriptorCommons,
TrackFxChain, TrackScope, TrackToolAction, VirtualControlElementCharacter,
};
Expand Down
32 changes: 0 additions & 32 deletions main/src/domain/reaper_target.rs
Original file line number Diff line number Diff line change
Expand Up @@ -162,38 +162,6 @@ pub enum ReaperTarget {
CompartmentParameterValue(CompartmentParameterValueTarget),
}

#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Serialize,
Deserialize,
EnumIter,
TryFromPrimitive,
IntoPrimitive,
Display,
)]
#[repr(usize)]
pub enum SendMidiDestination {
#[serde(rename = "fx-output")]
#[display(fmt = "FX output")]
FxOutput,
#[serde(rename = "feedback-output")]
#[display(fmt = "Feedback output")]
FeedbackOutput,
#[serde(rename = "device-input")]
#[display(fmt = "Device input")]
DeviceInput,
}

impl Default for SendMidiDestination {
fn default() -> Self {
Self::FxOutput
}
}

#[derive(Clone, Copy, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SeekOptions {
Expand Down
9 changes: 5 additions & 4 deletions main/src/domain/targets/midi_send_target.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,16 @@ use crate::domain::{
ExtendedProcessorContext, FeedbackAudioHookTask, FeedbackOutput, FeedbackRealTimeTask,
HitResponse, LogOptions, MappingControlContext, MidiDestination, MidiEvent,
MidiTransformationContainer, RealTimeReaperTarget, RealearnTarget, ReaperTarget,
ReaperTargetType, SendMidiDestination, TargetCharacter, TargetSection, TargetTypeDef,
UnresolvedReaperTargetDef, DEFAULT_TARGET,
ReaperTargetType, TargetCharacter, TargetSection, TargetTypeDef, UnresolvedReaperTargetDef,
DEFAULT_TARGET,
};
use base::{NamedChannelSender, SenderToNormalThread, SenderToRealTimeThread};
use helgoboss_learn::{
create_raw_midi_events_singleton, AbsoluteValue, ControlType, ControlValue, Fraction,
MidiSourceValue, RawMidiPattern, Target, UnitValue,
};
use helgobox_allocator::permit_alloc;
use helgobox_api::persistence::SendMidiDestination;
use reaper_high::MidiOutputDevice;
use reaper_medium::SendMidiTime;
use std::convert::TryInto;
Expand Down Expand Up @@ -132,7 +133,7 @@ impl MidiSendTarget {
}
};
}
SendMidiDestination::DeviceInput => {
SendMidiDestination::SameDeviceInput => {
if let Some(container) = transformation_container {
container.push(raw_midi_event);
}
Expand Down Expand Up @@ -247,7 +248,7 @@ impl RealearnTarget for MidiSendTarget {
let resolved_destination =
match self.destination {
SendMidiDestination::FxOutput => MidiDestination::FxOutput,
SendMidiDestination::DeviceInput => return Err(
SendMidiDestination::SameDeviceInput => return Err(
"sending to device input is only possible in response to a MIDI source event coming from a MIDI device",
),
SendMidiDestination::FeedbackOutput => {
Expand Down
15 changes: 3 additions & 12 deletions main/src/infrastructure/api/convert/from_data/target.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ use crate::application::{
};
use crate::domain::{
ActionInvocationType, AnyOnParameter, Exclusivity, FeedbackResolution, FxDisplayType,
ReaperTargetType, SendMidiDestination, SoloBehavior, TouchedRouteParameterType,
TouchedTrackParameterType, TrackExclusivity, TrackRouteType, TransportAction,
ReaperTargetType, SoloBehavior, TouchedRouteParameterType, TouchedTrackParameterType,
TrackExclusivity, TrackRouteType, TransportAction,
};
use crate::infrastructure::api::convert::from_data::{
convert_control_element_id, convert_osc_argument, convert_tags, ConversionStyle,
Expand Down Expand Up @@ -358,16 +358,7 @@ fn convert_real_target(
SendMidi => T::SendMidi(SendMidiTarget {
commons,
message: style.required_value(data.raw_midi_pattern),
destination: {
use persistence::MidiDestination as T;
use SendMidiDestination::*;
let dest = match data.send_midi_destination {
FxOutput => T::FxOutput,
FeedbackOutput => T::FeedbackOutput,
DeviceInput => T::DeviceInput,
};
style.required_value(dest)
},
destination: style.required_value(data.send_midi_destination),
}),
Dummy => T::Dummy(DummyTarget { commons }),
BrowseTracks => T::BrowseTracks(BrowseTracksTarget {
Expand Down
8 changes: 4 additions & 4 deletions main/src/infrastructure/api/convert/to_data/target.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use crate::application::{
};
use crate::domain::{
ActionInvocationType, Exclusivity, FxDisplayType, ReaperTargetType, SeekOptions,
SendMidiDestination, TouchedRouteParameterType, TrackRouteType,
TouchedRouteParameterType, TrackRouteType,
};
use crate::infrastructure::api::convert::to_data::{
convert_control_element_id, convert_osc_arg_type, convert_osc_value_range, convert_tags,
Expand Down Expand Up @@ -816,9 +816,9 @@ pub fn convert_target(t: Target) -> ConversionResult<TargetModelData> {
r#type: ReaperTargetType::SendMidi,
raw_midi_pattern: d.message.unwrap_or_default(),
send_midi_destination: match d.destination.unwrap_or_default() {
MidiDestination::FxOutput => SendMidiDestination::FxOutput,
MidiDestination::FeedbackOutput => SendMidiDestination::FeedbackOutput,
MidiDestination::DeviceInput => SendMidiDestination::DeviceInput,
SendMidiDestination::FxOutput => SendMidiDestination::FxOutput,
SendMidiDestination::FeedbackOutput => SendMidiDestination::FeedbackOutput,
SendMidiDestination::SameDeviceInput => SendMidiDestination::SameDeviceInput,
},
..init(d.commons)
},
Expand Down
9 changes: 4 additions & 5 deletions main/src/infrastructure/data/target_model_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@ use crate::application::{
use crate::domain::{
get_fx_chains, ActionInvocationType, AnyOnParameter, CompartmentKind, Exclusivity,
ExtendedProcessorContext, FxDisplayType, GroupKey, MappingKey, OscDeviceId, ReaperTargetType,
SeekOptions, SendMidiDestination, SoloBehavior, Tag, TouchedRouteParameterType,
TouchedTrackParameterType, TrackExclusivity, TrackGangBehavior, TrackRouteType,
TransportAction, VirtualTrack,
SeekOptions, SoloBehavior, Tag, TouchedRouteParameterType, TouchedTrackParameterType,
TrackExclusivity, TrackGangBehavior, TrackRouteType, TransportAction, VirtualTrack,
};
use crate::infrastructure::data::common::OscValueRange;
use crate::infrastructure::data::{
Expand All @@ -27,8 +26,8 @@ use helgoboss_learn::{AbsoluteValue, Fraction, OscTypeTag, UnitValue};
use helgobox_api::persistence::{
ActionScope, Axis, BrowseTracksMode, FxToolAction, LearnableTargetKind,
MappingSnapshotDescForLoad, MappingSnapshotDescForTake, MonitoringMode, MouseAction,
PotFilterKind, SeekBehavior, TargetTouchCause, TargetValue, TrackScope, TrackToolAction,
VirtualControlElementCharacter,
PotFilterKind, SeekBehavior, SendMidiDestination, TargetTouchCause, TargetValue, TrackScope,
TrackToolAction, VirtualControlElementCharacter,
};
use reaper_high::{BookmarkType, Fx, Guid};
use std::collections::HashSet;
Expand Down
6 changes: 3 additions & 3 deletions main/src/infrastructure/ui/mapping_panel.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ use helgobox_api::persistence::{
PlaytimeColumnDescriptorKind, PlaytimeMatrixAction, PlaytimeRowAction, PlaytimeRowDescriptor,
PlaytimeRowDescriptorKind, PlaytimeSlotDescriptor, PlaytimeSlotDescriptorKind,
PlaytimeSlotManagementAction, PlaytimeSlotTransportAction, PotFilterKind, SeekBehavior,
TrackToolAction, VirtualControlElementCharacter,
SendMidiDestination, TrackToolAction, VirtualControlElementCharacter,
};
use swell_ui::{
DeviceContext, DialogUnits, Point, SharedView, SwellStringArg, View, ViewContext, WeakView,
Expand All @@ -60,8 +60,8 @@ use crate::domain::ui_util::{
use crate::domain::{
control_element_domains, AnyOnParameter, Backbone, ControlContext, Exclusivity,
FeedbackSendBehavior, KeyStrokePortability, MouseActionType, PortabilityIssue, ReaperTarget,
ReaperTargetType, SendMidiDestination, SimpleExclusivity, SourceFeedbackEvent,
TargetControlEvent, TouchedRouteParameterType, TrackGangBehavior, WithControlContext,
ReaperTargetType, SimpleExclusivity, SourceFeedbackEvent, TargetControlEvent,
TouchedRouteParameterType, TrackGangBehavior, WithControlContext,
};
use crate::domain::{
get_non_present_virtual_route_label, get_non_present_virtual_track_label,
Expand Down

0 comments on commit 9af95f2

Please sign in to comment.