diff --git a/kernel/model/file.go b/kernel/model/file.go index 925e5581c..5833b3c2c 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -19,7 +19,6 @@ package model import ( "errors" "fmt" - "math" "os" "path" "path/filepath" @@ -93,35 +92,10 @@ func (box *Box) docFromFileInfo(fileInfo *FileInfo, ial map[string]string) (ret } ret.Mtime = mTime.Unix() - ret.HMtime = HumanizeTime(mTime) + ret.HMtime = util.HumanizeTime(mTime, Conf.Lang) return } -func HumanizeTime(then time.Time) string { - labels := util.TimeLangs[Conf.Lang] - - defaultMagnitudes := []humanize.RelTimeMagnitude{ - {time.Second, labels["now"].(string), time.Second}, - {2 * time.Second, labels["1s"].(string), 1}, - {time.Minute, labels["xs"].(string), time.Second}, - {2 * time.Minute, labels["1m"].(string), 1}, - {time.Hour, labels["xm"].(string), time.Minute}, - {2 * time.Hour, labels["1h"].(string), 1}, - {humanize.Day, labels["xh"].(string), time.Hour}, - {2 * humanize.Day, labels["1d"].(string), 1}, - {humanize.Week, labels["xd"].(string), humanize.Day}, - {2 * humanize.Week, labels["1w"].(string), 1}, - {humanize.Month, labels["xw"].(string), humanize.Week}, - {2 * humanize.Month, labels["1M"].(string), 1}, - {humanize.Year, labels["xM"].(string), humanize.Month}, - {18 * humanize.Month, labels["1y"].(string), 1}, - {2 * humanize.Year, labels["2y"].(string), 1}, - {humanize.LongTime, labels["xy"].(string), humanize.Year}, - {math.MaxInt64, labels["max"].(string), 1}, - } - return humanize.CustomRelTime(then, time.Now(), labels["albl"].(string), labels["blbl"].(string), defaultMagnitudes) -} - func (box *Box) docIAL(p string) (ret map[string]string) { name := strings.ToLower(filepath.Base(p)) if !strings.HasSuffix(name, ".sy") { diff --git a/kernel/model/flashcard.go b/kernel/model/flashcard.go index bf6e1214a..2e1645c99 100644 --- a/kernel/model/flashcard.go +++ b/kernel/model/flashcard.go @@ -29,7 +29,6 @@ import ( "github.com/88250/gulu" "github.com/88250/lute/ast" "github.com/88250/lute/parse" - "github.com/dustin/go-humanize" "github.com/siyuan-note/logging" "github.com/siyuan-note/riff" "github.com/siyuan-note/siyuan/kernel/cache" @@ -207,7 +206,7 @@ func GetTreeDueFlashcards(rootID string) (ret []*Flashcard, err error) { nextDues := map[riff.Rating]string{} for rating, due := range card.NextDues() { - nextDues[rating] = strings.TrimSpace(humanize.RelTime(due, now, "", "")) + nextDues[rating] = strings.TrimSpace(util.HumanizeRelTime(due, now, Conf.Lang)) } ret = append(ret, &Flashcard{ @@ -285,7 +284,7 @@ func GetDueFlashcards(deckID string) (ret []*Flashcard, err error) { nextDues := map[riff.Rating]string{} for rating, due := range card.NextDues() { - nextDues[rating] = strings.TrimSpace(humanize.RelTime(due, now, "", "")) + nextDues[rating] = strings.TrimSpace(util.HumanizeRelTime(due, now, Conf.Lang)) } ret = append(ret, &Flashcard{ @@ -317,7 +316,7 @@ func getAllDueFlashcards() (ret []*Flashcard, err error) { nextDues := map[riff.Rating]string{} for rating, due := range card.NextDues() { - nextDues[rating] = strings.TrimSpace(humanize.RelTime(due, now, "", "")) + nextDues[rating] = strings.TrimSpace(util.HumanizeRelTime(due, now, Conf.Lang)) } ret = append(ret, &Flashcard{ diff --git a/kernel/util/time.go b/kernel/util/time.go index 433dd2c55..457eba976 100644 --- a/kernel/util/time.go +++ b/kernel/util/time.go @@ -17,7 +17,11 @@ package util import ( + "math" + "strings" "time" + + "github.com/dustin/go-humanize" ) func Millisecond2Time(t int64) time.Time { @@ -33,3 +37,37 @@ func CurrentTimeMillis() int64 { func CurrentTimeSecondsStr() string { return time.Now().Format("20060102150405") } + +func HumanizeRelTime(a time.Time, b time.Time, lang string) string { + _, magnitudes := humanizeTimeMagnitudes(lang) + return strings.TrimSpace(humanize.CustomRelTime(a, b, "", "", magnitudes)) +} + +func HumanizeTime(then time.Time, lang string) string { + labels, magnitudes := humanizeTimeMagnitudes(lang) + return strings.TrimSpace(humanize.CustomRelTime(then, time.Now(), labels["albl"].(string), labels["blbl"].(string), magnitudes)) +} + +func humanizeTimeMagnitudes(lang string) (labels map[string]interface{}, magnitudes []humanize.RelTimeMagnitude) { + labels = TimeLangs[lang] + magnitudes = []humanize.RelTimeMagnitude{ + {time.Second, labels["now"].(string), time.Second}, + {2 * time.Second, labels["1s"].(string), 1}, + {time.Minute, labels["xs"].(string), time.Second}, + {2 * time.Minute, labels["1m"].(string), 1}, + {time.Hour, labels["xm"].(string), time.Minute}, + {2 * time.Hour, labels["1h"].(string), 1}, + {humanize.Day, labels["xh"].(string), time.Hour}, + {2 * humanize.Day, labels["1d"].(string), 1}, + {humanize.Week, labels["xd"].(string), humanize.Day}, + {2 * humanize.Week, labels["1w"].(string), 1}, + {humanize.Month, labels["xw"].(string), humanize.Week}, + {2 * humanize.Month, labels["1M"].(string), 1}, + {humanize.Year, labels["xM"].(string), humanize.Month}, + {18 * humanize.Month, labels["1y"].(string), 1}, + {2 * humanize.Year, labels["2y"].(string), 1}, + {humanize.LongTime, labels["xy"].(string), humanize.Year}, + {math.MaxInt64, labels["max"].(string), 1}, + } + return +}