diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 210e33e..aee6c82 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,13 +4,12 @@
-
-
-
-
-
-
+
+
+
+
+
@@ -21,36 +20,89 @@
-
+ {
+ "customColor": "",
+ "associatedIndex": 3
+}
- {
+ "keyToString": {
+ "RunOnceActivity.OpenProjectViewOnStart": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "RunOnceActivity.go.formatter.settings.were.checked": "true",
+ "RunOnceActivity.go.migrated.go.modules.settings": "true",
+ "RunOnceActivity.go.modules.automatic.dependencies.download": "true",
+ "RunOnceActivity.go.modules.go.list.on.any.changes.was.set": "true",
+ "WebServerToolWindowFactoryState": "false",
+ "git-widget-placeholder": "master",
+ "go.import.settings.migrated": "true",
+ "go.sdk.automatically.set": "true",
+ "last_opened_file_path": "/Users/kevin",
+ "node.js.detected.package.eslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "settings.editor.selected.configurable": "preferences.pluginManager"
}
-}]]>
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
true
diff --git a/domain/anki_operator.go b/domain/anki_operator.go
index 115b5a5..939390c 100644
--- a/domain/anki_operator.go
+++ b/domain/anki_operator.go
@@ -12,29 +12,26 @@ func NewOperatorGenerate(gpter GPTer, textToSpeecher TextToSpeecher, ankier Anki
return &OperatorGenerate{gpter: gpter, textToSpeecher: textToSpeecher, ankier: ankier}
}
-func (g *OperatorGenerate) GetByNote(note AnkiNote) (o Operator, err error) {
+func (g *OperatorGenerate) GetByNote(note AnkiNote, rememberVocabularyList []string) (o Operator, err error) {
switch note.ModelName {
case "Japanese (recognition&recall) 動詞篇":
o = &VerbOperator{
- Note: note,
- gpter: g.gpter,
- textToSpeecher: g.textToSpeecher,
- ankier: g.ankier,
+ Note: note,
+ gpter: g.gpter,
+ textToSpeecher: g.textToSpeecher,
+ ankier: g.ankier,
+ rememberVocabularyList: rememberVocabularyList,
}
case "Japanese (recognition&recall) 形容詞":
o = &AdjOperator{
- Note: note,
- gpter: g.gpter,
- textToSpeecher: g.textToSpeecher,
- ankier: g.ankier,
+ Note: note,
+ gpter: g.gpter,
+ textToSpeecher: g.textToSpeecher,
+ ankier: g.ankier,
+ rememberVocabularyList: rememberVocabularyList,
}
case "Japanese (recognition&recall)":
- o = &NormalOperator{
- Note: note,
- gpter: g.gpter,
- textToSpeecher: g.textToSpeecher,
- ankier: g.ankier,
- }
+ o = NewNormalOperator(note, g.gpter, g.textToSpeecher, g.ankier, rememberVocabularyList)
default:
err = fmt.Errorf("don't support for this modelType: %s", note.ModelName)
}
@@ -42,5 +39,5 @@ func (g *OperatorGenerate) GetByNote(note AnkiNote) (o Operator, err error) {
}
type OperatorGenerator interface {
- GetByNote(note AnkiNote) (o Operator, err error)
+ GetByNote(note AnkiNote, rememberVoculary []string) (o Operator, err error)
}
diff --git a/domain/anki_operator_test.go b/domain/anki_operator_test.go
index 8caabc8..835605b 100644
--- a/domain/anki_operator_test.go
+++ b/domain/anki_operator_test.go
@@ -28,15 +28,15 @@ func (t *AnkiOperationSuite) Test_get_correct_modal_type_operator() {
ModelName: "Japanese (recognition&recall)",
}
generator := OperatorGenerate{}
- normalOperator, _ := generator.GetByNote(note)
- _, ok := normalOperator.(*NormalOperator)
- t.True(ok, "type is not *NormalOperator")
+ normalOperator, _ := generator.GetByNote(note, nil)
+ _, ok := normalOperator.(*NormalJapaneseOperator)
+ t.True(ok, "type is not *NormalJapaneseOperator")
note = AnkiNote{
ModelName: "Japanese (recognition&recall) 動詞篇",
}
generator = OperatorGenerate{}
- verbOperator, _ := generator.GetByNote(note)
+ verbOperator, _ := generator.GetByNote(note, nil)
_, ok = verbOperator.(*VerbOperator)
t.True(ok, "type is not *VerbOperator")
@@ -44,7 +44,7 @@ func (t *AnkiOperationSuite) Test_get_correct_modal_type_operator() {
ModelName: "Japanese (recognition&recall) 形容詞",
}
generator = OperatorGenerate{}
- adjOperator, _ := generator.GetByNote(note)
+ adjOperator, _ := generator.GetByNote(note, nil)
_, ok = adjOperator.(*AdjOperator)
t.True(ok, "type is not *AdjOperator")
}
diff --git a/domain/operator.go b/domain/operator.go
index 5a6e3b2..1d4bea6 100644
--- a/domain/operator.go
+++ b/domain/operator.go
@@ -1,25 +1,123 @@
package domain
+import "fmt"
+
type Operator interface {
Do() error
}
-type NormalOperator struct {
- Note AnkiNote
- gpter GPTer
- textToSpeecher TextToSpeecher
- ankier Ankier
+type NormalJapaneseOperator struct {
+ originNote AnkiNote
+ noteFields struct {
+ express string
+ meaning string
+ reading string
+ japaneseToSound string
+ japaneseSentence string
+ japaneseSentenceToSound string
+ japaneseSentenceToChinese string
+ japaneseNote string
+ japaneseToChineseNote string
+ answerNote string
+ }
+ gpter GPTer
+ textToSpeecher TextToSpeecher
+ ankier Ankier
+ rememberVocabularyList []string
+}
+
+type normalNoteField struct {
+ express string
+ meaning string
+ reading string
+ japaneseToSound string
+ japaneseSentence string
+ japaneseSentenceToSound string
+ japaneseSentenceToChinese string
+ japaneseNote string
+ japaneseToChineseNote string
+ answerNote string
+}
+
+func (f normalNoteField) FieldDataMap() map[string]FieldData {
+ return map[string]FieldData{
+ "Expression": {f.express, 0},
+ "Meaning": {f.meaning, 1},
+ "Reading": {f.reading, 2},
+ "Japanese-ToSound": {f.japaneseToSound, 3},
+ "JapaneseSentence": {f.japaneseSentence, 4},
+ "JapaneseSentence-ToSound": {f.japaneseSentenceToSound, 5},
+ "JapaneseSentence-ToChinese": {f.japaneseSentenceToChinese, 6},
+ "Japanese-Note": {f.japaneseNote, 7},
+ "Japanese-ToChineseNote": {f.japaneseToChineseNote, 8},
+ "Answer-Note": {f.answerNote, 9},
+ }
+}
+
+func NewNormalOperator(note AnkiNote, gpter GPTer, textToSpeecher TextToSpeecher, ankier Ankier, rememberVocabularyList []string) *NormalJapaneseOperator {
+
+ noteFields := normalNoteField{
+ express: note.Fields["Expression"].Value,
+ meaning: note.Fields["Meaning"].Value,
+ reading: note.Fields["Reading"].Value,
+ japaneseToSound: note.Fields["Japanese-ToSound"].Value,
+ japaneseSentence: note.Fields["JapaneseSentence"].Value,
+ japaneseSentenceToSound: note.Fields["JapaneseSentence-ToSound"].Value,
+ japaneseSentenceToChinese: note.Fields["JapaneseSentence-ToChinese"].Value,
+ japaneseNote: note.Fields["Japanese-Note"].Value,
+ japaneseToChineseNote: note.Fields["Japanese-ToChineseNote"].Value,
+ answerNote: note.Fields["Answer-Note"].Value,
+ }
+ return &NormalJapaneseOperator{
+ originNote: note,
+ noteFields: noteFields,
+ gpter: gpter,
+ textToSpeecher: textToSpeecher,
+ ankier: ankier,
+ rememberVocabularyList: rememberVocabularyList,
+ }
}
-func (n *NormalOperator) Do() error {
+func (n *NormalJapaneseOperator) Do() error {
+ expressFilePath, _ := n.textToSpeecher.GetJapaneseSound(n.noteFields.express)
+ sentence, hiraganaSentence, chineseSentence, _ := n.gpter.MakeJapaneseSentence(n.noteFields.express, n.noteFields.meaning, n.rememberVocabularyList)
+ sentenceFilePath, _ := n.textToSpeecher.GetJapaneseSound(sentence)
+ field := normalNoteField{
+ express: n.noteFields.express,
+ meaning: n.noteFields.meaning,
+ reading: n.noteFields.reading,
+ japaneseToSound: fmt.Sprintf("[sound:%s.mp3]", n.noteFields.express),
+ japaneseSentence: hiraganaSentence,
+ japaneseSentenceToSound: fmt.Sprintf("[sound:%s.mp3]", sentence),
+ japaneseSentenceToChinese: chineseSentence,
+ japaneseNote: n.noteFields.japaneseNote,
+ japaneseToChineseNote: n.noteFields.japaneseToChineseNote,
+ answerNote: n.noteFields.answerNote,
+ }
+ n.originNote.Fields = field.FieldDataMap()
+ _ = n.ankier.UpdateNoteById(n.originNote.Id, n.originNote, []Audio{
+ {
+ Path: expressFilePath,
+ Filename: fmt.Sprintf("%s.mp3", n.noteFields.express),
+ Fields: []string{"Japanese-ToSound"},
+ },
+ {
+ Path: sentenceFilePath,
+ Filename: fmt.Sprintf("%s.mp3", sentence),
+ Fields: []string{"JapaneseSentence-ToSound"},
+ },
+ })
+ n.ankier.AddNoteTagFromNoteId(n.originNote.Id, AnkiDoneTagName)
+ n.ankier.DeleteNoteTagFromNoteId(n.originNote.Id, AnkiTodoTagName)
return nil
}
type VerbOperator struct {
- Note AnkiNote
- gpter GPTer
- textToSpeecher TextToSpeecher
- ankier Ankier
+ Note AnkiNote
+ gpter GPTer
+ textToSpeecher TextToSpeecher
+ ankier Ankier
+ rememberVocabularyList []string
}
func (v *VerbOperator) Do() error {
@@ -28,10 +126,11 @@ func (v *VerbOperator) Do() error {
}
type AdjOperator struct {
- Note AnkiNote
- gpter GPTer
- textToSpeecher TextToSpeecher
- ankier Ankier
+ Note AnkiNote
+ gpter GPTer
+ textToSpeecher TextToSpeecher
+ ankier Ankier
+ rememberVocabularyList []string
}
func (a *AdjOperator) Do() error {
diff --git a/domain/operator_test.go b/domain/operator_test.go
index 75d824b..f90db68 100644
--- a/domain/operator_test.go
+++ b/domain/operator_test.go
@@ -34,19 +34,19 @@ func (t *OperatorSuite) TearDownTest() {
func (t *OperatorSuite) Test_normal_operator() {
fields := map[string]FieldData{
- "Expression": {Value: "test expression value"},
- "Meaning": {Value: "test meaning value"},
- "Reading": {Value: "test reading value"},
- "Japanese-ToSound": {Value: "test japanese to sound value"},
- "JapaneseSentence": {Value: "test japanese hiragana sentence value"},
- "JapaneseSentence-ToSound": {Value: "test japanese sentence to sound value"},
- "JapaneseSentence-ToChinese": {Value: "test japanese sentence to chinese value"},
- "Japanese-Note": {Value: "test japanese note value"},
- "Japanese-ToChineseNote": {Value: "test japanese to chinese note value"},
- "Answer-Note": {Value: "test answer note value"},
+ "Expression": {"test expression value", 0},
+ "Meaning": {"test meaning value", 1},
+ "Reading": {"test reading value", 2},
+ "Japanese-ToSound": {"[sound:test expression value.mp3]", 3},
+ "JapaneseSentence": {"test japanese hiragana sentence value", 4},
+ "JapaneseSentence-ToSound": {"[sound:test japanese sentence.mp3]", 5},
+ "JapaneseSentence-ToChinese": {"test japanese sentence to chinese value", 6},
+ "Japanese-Note": {"test japanese note value", 7},
+ "Japanese-ToChineseNote": {"test japanese to chinese note value", 8},
+ "Answer-Note": {"test answer note value", 9},
}
note := AnkiNote{
- Id: 123,
+ Id: int64(123),
ModelName: "Japanese (recognition&recall)",
Fields: fields,
Tags: []string{"anki-helper-vocabulary-todo"},
@@ -72,12 +72,12 @@ func (t *OperatorSuite) Test_normal_operator() {
UpdateNoteById(note.Id, note, []Audio{
{
Path: expressionVoicePath,
- Filename: fmt.Sprintf("[Sound:%s.mp3]", fields["Meaning"].Value),
+ Filename: fmt.Sprintf("%s.mp3", fields["Expression"].Value),
Fields: []string{"Japanese-ToSound"},
},
{
Path: japaneseSentenceVoicePath,
- Filename: fmt.Sprintf("[Sound:%s.mp3]", japaneseSentence),
+ Filename: fmt.Sprintf("%s.mp3", japaneseSentence),
Fields: []string{"JapaneseSentence-ToSound"},
},
}).
@@ -94,16 +94,16 @@ func (t *OperatorSuite) Test_normal_operator() {
"Expression": fields["Expression"],
"Meaning": fields["Meaning"],
"Reading": fields["Reading"],
- "Japanese-ToSound": {Value: ""},
- "JapaneseSentence": {Value: ""},
- "JapaneseSentence-ToSound": {Value: ""},
- "JapaneseSentence-ToChinese": {Value: ""},
- "Japanese-Note": {Value: "test japanese note value"},
- "Japanese-ToChineseNote": {Value: "test japanese to chinese note value"},
- "Answer-Note": {Value: "test answer note value"},
+ "Japanese-ToSound": {"", 3},
+ "JapaneseSentence": {"", 4},
+ "JapaneseSentence-ToSound": {"", 5},
+ "JapaneseSentence-ToChinese": {"", 6},
+ "Japanese-Note": {"test japanese note value", 7},
+ "Japanese-ToChineseNote": {"test japanese to chinese note value", 8},
+ "Answer-Note": {"test answer note value", 9},
},
Tags: []string{"anki-helper-vocabulary-todo"},
- })
+ }, rememberVocabularyList)
t.NoError(err)
err = operator.Do()
t.NoError(err)