Skip to content

Commit

Permalink
Save the repeated fields on send
Browse files Browse the repository at this point in the history
  • Loading branch information
rogchap committed Aug 25, 2020
1 parent 8e23554 commit fb3fa28
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 11 deletions.
56 changes: 47 additions & 9 deletions internal/model/mapping.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,22 +34,27 @@ func MapMessage(dm *dynamic.Message) *Message {
typeName := strings.ToLower(descriptorpb.FieldDescriptorProto_Type_name[int32(ft)][5:])
field.SetType(typeName)

field.SetValue(stringValue(dm, fd))
v, _ := dm.TryGetField(fd)
field.SetValue(stringValue(v, fd))

switch ft {
case descriptorpb.FieldDescriptorProto_TYPE_MESSAGE:
val, _ := dm.TryGetField(fd)
enabled := true
var mdm *dynamic.Message
switch val.(type) {
switch v.(type) {
case *dynamic.Message:
mdm = val.(*dynamic.Message)
mdm = v.(*dynamic.Message)
case proto.Message:
mdm, _ = dynamic.AsDynamicMessage(val.(proto.Message))
mdm, _ = dynamic.AsDynamicMessage(v.(proto.Message))
}
if mdm == nil {
enabled = false
mdm = dynamic.NewMessage(fd.GetMessageType())

}
field.SetMessage(MapMessage(mdm))
msg := MapMessage(mdm)
msg.SetEnabled(enabled)
field.SetMessage(msg)
field.SetDelegate("message")
case descriptorpb.FieldDescriptorProto_TYPE_ENUM:
e := fd.GetEnumType()
Expand Down Expand Up @@ -77,6 +82,40 @@ func MapMessage(dm *dynamic.Message) *Message {
field.SetDelegate(field.Delegate() + "_repeated")
vl := NewRepeatedValues(nil)
vl.ref = fd.GetMessageType()
// TODO: populate any repeated fields that in the store
var rVals []*RepeatedValue
lg, _ := dm.TryFieldLength(fd)
for i := 0; i < lg; i++ {
rval := NewRepeatedValue(nil)
val, _ := dm.TryGetRepeatedField(fd, i)
rval.SetValue(stringValue(val, fd))

if ft == descriptorpb.FieldDescriptorProto_TYPE_MESSAGE {

enabled := true
var mdm *dynamic.Message
switch val.(type) {
case *dynamic.Message:
mdm = val.(*dynamic.Message)
case proto.Message:
mdm, _ = dynamic.AsDynamicMessage(val.(proto.Message))
}
if mdm == nil {
enabled = false
mdm = dynamic.NewMessage(fd.GetMessageType())

}
msg := MapMessage(mdm)
msg.SetEnabled(enabled)
rval.SetMsgValue(msg)

}

rVals = append(rVals, rval)
}

vl.SetValues(rVals)
vl.SetCount(lg)
field.SetValueListModel(vl)
}

Expand All @@ -87,9 +126,8 @@ func MapMessage(dm *dynamic.Message) *Message {
return msg
}

func stringValue(dm *dynamic.Message, fd *desc.FieldDescriptor) string {
v, err := dm.TryGetField(fd)
if err != nil {
func stringValue(v interface{}, fd *desc.FieldDescriptor) string {
if v == nil {
return ""
}

Expand Down
6 changes: 4 additions & 2 deletions qml/views/MessageFields.qml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ ListView {
id: textField
hintText: type
labelLeftMargin: 21
text: value
onTextChanged: valueListModel.editValueAt(index, text)
}

Expand All @@ -95,6 +96,7 @@ ListView {
text: label
anchors.left: parent.left
anchors.leftMargin: 16
checked: value == "true" ? true : false

onCheckedChanged: valueListModel.editValueAt(index, checked)
}
Expand Down Expand Up @@ -122,8 +124,8 @@ ListView {
labelText: label
labelLeftMargin: 21
model: enumListModel
currentIndex: enumListModel.idxForVal(value)
onDisplayTextChanged: valueListModel.editValueAt(index, enumListModel.valAt(currentIndex))

}

CrossButton {
Expand All @@ -148,7 +150,7 @@ ListView {
labelText: label
labelLeftMargin: 21
hintText: type

text: value
onTextChanged: valueListModel.editValueAt(index, text)
}

Expand Down

0 comments on commit fb3fa28

Please sign in to comment.