本文整理匯總了Golang中github.com/hiroapp/cli/db.DB.CategoryPath方法的典型用法代碼示例。如果您正苦於以下問題:Golang DB.CategoryPath方法的具體用法?Golang DB.CategoryPath怎麽用?Golang DB.CategoryPath使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/hiroapp/cli/db.DB
的用法示例。
在下文中一共展示了DB.CategoryPath方法的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: cmdStart
func cmdStart(d db.DB, resume bool, categoryS string) {
entries, err := active(d)
if err != nil {
fatal(err)
}
now := time.Now()
path, err := d.CategoryPath(ParseCategory(categoryS), true)
if err != nil {
fatal(err)
}
entry := &db.Entry{CategoryID: path.CategoryID(), Start: now}
if resume {
last, err := Last(d)
if err != nil {
fatal(err)
}
if !last.End.IsZero() {
entry.Start = last.End
}
if entry.CategoryID == "" {
entry.CategoryID = last.CategoryID
}
}
if err := d.SaveEntry(entry); err != nil {
fatal(err)
}
FprintEntry(os.Stdout, entry, path, PrintHideDuration|PrintHideEnd)
if err := endAt(d, entries, now); err != nil {
fatal(err)
}
}
示例2: cmdLs
func cmdLs(d db.DB, categoryS string, asc bool) {
if categories, err := d.Categories(); err != nil {
fatal(err)
} else if path, err := d.CategoryPath(ParseCategory(categoryS), false); err != nil {
fatal(err)
} else if itr, err := d.Query(db.Query{Asc: asc, CategoryID: path.CategoryID()}); err != nil {
fatal(err)
} else {
FprintIterator(os.Stdout, itr, categories, PrintDefault)
}
}
示例3: cmdEdit
func cmdEdit(d db.DB, id string) {
var (
entry *db.Entry
err error
)
if id != "" {
entry, err = ById(d, id)
} else {
entry, err = Last(d)
}
if err != nil {
fatal(err)
}
categories, err := d.Categories()
if err != nil {
fatal(err)
}
e := term.NewEditor()
FprintEntry(e, entry, categories.Path(entry.CategoryID), PrintSeparator|PrintHideDuration)
if err := e.Run(); err != nil {
fatal(err)
} else if doc, err := ParseEntryDocument(e); err != nil {
fatal(err)
} else if doc == nil {
return
} else {
entry := &db.Entry{
ID: doc.ID,
Start: doc.Start,
End: doc.End,
Note: doc.Note,
}
if path, err := d.CategoryPath(doc.Category, false); err != nil {
fatal(err)
} else {
entry.CategoryID = path.CategoryID()
}
if err := d.SaveEntry(entry); err != nil {
fatal(err)
} else {
FprintIterator(os.Stdout, db.EntryIterator([]*db.Entry{entry}), categories, PrintDefault)
}
}
}
示例4: cmdReport
func cmdReport(d db.DB, categoryS, periodS, firstDayS string) {
period, err := datetime.ParsePeriod(periodS)
if err != nil {
fatal(err)
} else if period == datetime.Day {
fatal(errors.New("bad period: day"))
}
firstDay, err := datetime.ParseWeekday(firstDayS)
if err != nil {
fatal(err)
}
path, err := d.CategoryPath(ParseCategory(categoryS), false)
if err != nil {
fatal(err)
}
entryItr, err := d.Query(db.Query{CategoryID: path.CategoryID()})
if err != nil {
fatal(err)
}
defer entryItr.Close()
entry, err := entryItr.Next()
if err == io.EOF {
return
} else if err != nil {
fatal(err)
}
// @TODO move logic into separate function
now := time.Now()
reportItr := datetime.NewIterator(entry.Start, period, false, firstDay)
report := &Report{Duration: period}
report.From, report.To = reportItr.Next()
dayItr := datetime.NewIterator(report.To, datetime.Day, false, firstDay)
day := &ReportDay{}
day.From, day.To = dayItr.Next()
report.Days = append([]*ReportDay{day}, report.Days...)
noteAssigned := false
outer:
for {
var overlap time.Duration
for {
overlap = entry.PartialDuration(now, day.From, day.To)
if overlap > 0 {
day.Tracked += overlap
if !noteAssigned {
note := strings.Trim(entry.Note, "\n")
if note != "" {
day.Notes = append([]string{note}, day.Notes...)
}
noteAssigned = true
}
}
if !entry.Start.Before(day.From) {
entry, err = entryItr.Next()
if err == io.EOF {
fmt.Fprint(os.Stdout, FormatReport(report))
break outer
} else if err != nil {
fatal(err)
}
noteAssigned = false
continue
}
day = &ReportDay{}
day.From, day.To = dayItr.Next()
if day.To.Before(report.From) {
fmt.Fprint(os.Stdout, FormatReport(report))
report = &Report{Duration: period}
report.From, report.To = reportItr.Next()
}
report.Days = append([]*ReportDay{day}, report.Days...)
}
}
}