Skip to content

[.mdr] 匯入後設定欄位是空的:MacroDroid 的 option key 沒有轉換 #6

Description

@ADSFAaron

問題

MdrToFlowConverter 目前把 MacroDroid 的 options 原封不動塞進 NexFlow 的 config:

// MdrToFlowConverter.kt
return TriggerJson(
    id = ...,
    type = mappedType ?: "MANUAL",
    config = trigger.options,   // ← 直接沿用,沒有做 key 對應
)

但兩邊的欄位名稱完全不同。以時間觸發為例,NexFlow 的 TIME 期待的 key 是
time / repeat / days(見 app/.../config/TriggerConfig.kt),
MacroDroid 匯出的則是自己的一套(m_hourm_minute 之類)。

結果:即使 class type 有對照、匯入時看起來成功,打開流程會發現設定欄位是空的,
使用者得自己重填一次。而且因為沒有警告,這是靜默的。

要做什麼

需要一層 option key 的對應。可能的做法(歡迎提出更好的):

  1. 每個 type 一個 Map<String, String> 的 key 對照表 —— 簡單,但處理不了值的格式差異
    (例如 MacroDroid 分開存 hour/minute,NexFlow 存 "HH:mm" 字串)
  2. 每個 type 一個轉換 function((JsonObject) -> JsonObject)—— 彈性夠,程式碼多一點
  3. 折衷:多數用對照表,少數需要格式轉換的寫 function

也要決定轉不出來的欄位怎麼辦:丟掉?留著並加警告?

為什麼標 help wanted 而不是 good first issue

範圍比「加一行對照」大,而且需要先做設計決策。但每個 type 可以獨立進行 ——
先做 TIME 一種、把架構立起來,剩下的可以拆成後續的 good first issue。

驗收標準(以第一個 PR 為例)

  • 選一到兩個 type(建議 TIMEBATTERY)做完整的 option 轉換
  • 架構讓後續新增 type 只要加一筆對照,不用改核心邏輯
  • MdrToFlowConverterTest 有「匯入後的 config key 是 NexFlow 期待的 key、值也正確」的測試
  • 轉不出來的欄位有對應的 warning,不要靜默丟掉

動手前先在這串留言講一下你打算怎麼做,避免方向不合白做工。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp wanted歡迎社群認領,需要一點研究或設計決策macrodroidMacroDroid .mdr 匯入相容性

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions