@@ -211,8 +211,9 @@ newDynamicField :: (MonadIO m) => DynamicField -> m (Field DynamicField Unique)
211211newDynamicField output =
212212 newField
213213 ( case output of
214- DynamicFieldNumber {} -> FieldTypeNumber
215214 DynamicFieldText {} -> FieldTypeText
215+ DynamicFieldNumber {} -> FieldTypeNumber
216+ DynamicFieldRfc2397 {} -> FieldTypeImage
216217 )
217218 output
218219 inspectDynamicField
@@ -221,8 +222,9 @@ newDynamicFieldId :: DynamicField -> Field DynamicField Identity
221222newDynamicFieldId output =
222223 newFieldId
223224 ( case output of
224- DynamicFieldNumber {} -> FieldTypeNumber
225225 DynamicFieldText {} -> FieldTypeText
226+ DynamicFieldNumber {} -> FieldTypeNumber
227+ DynamicFieldRfc2397 {} -> FieldTypeImage
226228 )
227229 inspectDynamicField
228230 output
@@ -237,31 +239,37 @@ newDynamicTitleField =
237239data DynamicField
238240 = DynamicFieldText Unicode
239241 | DynamicFieldNumber Rational
242+ | DynamicFieldRfc2397 (Maybe Unicode ) Rfc2397
240243 deriving stock (Eq , Ord , Show , Data , Generic )
241244 deriving (Binary ) via GenericType DynamicField
242245
243246parseDynamicField :: Field DynamicField Unique -> Maybe DynamicField
244247parseDynamicField value =
245- case value ^. # fieldType of
246- FieldTypeNumber -> DynamicFieldNumber <$> parseRatio str
247- FieldTypePercent -> DynamicFieldNumber <$> parseRatio str
248- _ -> Just $ DynamicFieldText str
249- where
250- str = value ^. # fieldInput . # uniqueValue
248+ parseDynamic value $ value ^. # fieldInput . # uniqueValue
251249
252250parseDynamicFieldId :: Field DynamicField Identity -> Maybe DynamicField
253251parseDynamicFieldId value =
252+ parseDynamic value $ value ^. # fieldInput . # runIdentity
253+
254+ parseDynamic :: Field DynamicField f -> Unicode -> Maybe DynamicField
255+ parseDynamic value str =
254256 case value ^. # fieldType of
255257 FieldTypeNumber -> DynamicFieldNumber <$> parseRatio str
256258 FieldTypePercent -> DynamicFieldNumber <$> parseRatio str
257- _ -> Just $ DynamicFieldText str
258- where
259- str = value ^. # fieldInput . # runIdentity
259+ FieldTypeImage -> do
260+ let mVal = decodeRfc2397 str
261+ let mRef = case value ^. # fieldOutput of
262+ DynamicFieldRfc2397 ref val | mVal == Just val -> ref
263+ _ -> Nothing
264+ fmap (DynamicFieldRfc2397 mRef) mVal <|> Just (DynamicFieldText str)
265+ _ ->
266+ Just $ DynamicFieldText str
260267
261268inspectDynamicField :: DynamicField -> Unicode
262269inspectDynamicField = \ case
263270 DynamicFieldText x -> x
264271 DynamicFieldNumber x -> inspectRatioDef x
272+ DynamicFieldRfc2397 _ x -> encodeRfc2397 x
265273
266274data FieldType
267275 = -- Rational
0 commit comments