bug fix
This commit is contained in:
		
							parent
							
								
									09f125c0fe
								
							
						
					
					
						commit
						5a4a27612d
					
				@ -5,29 +5,31 @@ import (
 | 
			
		||||
	"b612.me/stardb"
 | 
			
		||||
	"b612.me/startimer"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Remind struct {
 | 
			
		||||
	db       *stardb.StarDB
 | 
			
		||||
	tasks    map[int]Task
 | 
			
		||||
	tasks    map[int64]Task
 | 
			
		||||
	mu       *sync.RWMutex
 | 
			
		||||
	callback func(remind Task)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Task struct {
 | 
			
		||||
	ID      int    `db:"id"`
 | 
			
		||||
	ID      int64  `db:"id"`
 | 
			
		||||
	Origin  string `db:"text"`
 | 
			
		||||
	timer   *startimer.StarTimer
 | 
			
		||||
	TmrInfo string `db:"code"`
 | 
			
		||||
	Key     string `db:"key"`
 | 
			
		||||
	Msg     []byte `db:"msg"`
 | 
			
		||||
	Limit   int64  `db:"limits"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getCreateSql() []string {
 | 
			
		||||
	return []string{
 | 
			
		||||
		"CREATE TABLE IF NOT EXISTS remind(id INTEGER PRIMARY KEY AUTOINCREMENT,key VARCHAR(64),code TEXT,text TEXT,msg BLOB)",
 | 
			
		||||
		"CREATE TABLE IF NOT EXISTS remind(id INTEGER PRIMARY KEY AUTOINCREMENT,key VARCHAR(64),limits INTEGER,code TEXT,text TEXT,msg BLOB)",
 | 
			
		||||
		"CREATE INDEX IF NOT EXISTS key_idx ON remind (key)",
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -53,7 +55,7 @@ func innerLoadDB(db *stardb.StarDB, callback func(task Task)) (*Remind, error) {
 | 
			
		||||
		db:       db,
 | 
			
		||||
		mu:       new(sync.RWMutex),
 | 
			
		||||
		callback: callback,
 | 
			
		||||
		tasks:    make(map[int]Task),
 | 
			
		||||
		tasks:    make(map[int64]Task),
 | 
			
		||||
	}
 | 
			
		||||
	var res []Task
 | 
			
		||||
	data, err := db.Query("select * from remind")
 | 
			
		||||
@ -65,22 +67,25 @@ func innerLoadDB(db *stardb.StarDB, callback func(task Task)) (*Remind, error) {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if len(res) != 0 {
 | 
			
		||||
		rem.tasks = make(map[int]Task, len(res))
 | 
			
		||||
		rem.tasks = make(map[int64]Task, len(res))
 | 
			
		||||
		for _, task := range res {
 | 
			
		||||
			tmr := startimer.NewTimer(time.Now())
 | 
			
		||||
			err = tmr.ImportRepeats(task.TmrInfo)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
			tmr.SetRunCountLimit(int(task.Limit))
 | 
			
		||||
			task.timer = &tmr
 | 
			
		||||
			task.timer.AddTask(func() {
 | 
			
		||||
				rem.callbackFn(task)
 | 
			
		||||
			})
 | 
			
		||||
			err = task.timer.Run()
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
				db.Exec(`delete from remind where id=?`, task.ID)
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			rem.tasks[task.ID] = task
 | 
			
		||||
			fmt.Printf("%+v\n", task)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return &rem, nil
 | 
			
		||||
@ -125,7 +130,7 @@ func (r *Remind) AddTask(taskStr, key string, msg []byte) (Task, error) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return Task{}, err
 | 
			
		||||
	}
 | 
			
		||||
	rmt.ID = int(id)
 | 
			
		||||
	rmt.ID = int64(id)
 | 
			
		||||
	r.mu.Lock()
 | 
			
		||||
	r.tasks[rmt.ID] = rmt
 | 
			
		||||
	r.mu.Unlock()
 | 
			
		||||
@ -138,7 +143,7 @@ func (r *Remind) AddTask(taskStr, key string, msg []byte) (Task, error) {
 | 
			
		||||
	return rmt, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *Remind) DeleteTask(id int) error {
 | 
			
		||||
func (r *Remind) DeleteTask(id int64) error {
 | 
			
		||||
	r.mu.RLock()
 | 
			
		||||
	data, ok := r.tasks[id]
 | 
			
		||||
	r.mu.RUnlock()
 | 
			
		||||
@ -181,7 +186,7 @@ func (r *Remind) GetTasksByKey(key string) []Task {
 | 
			
		||||
	return res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *Remind) GetTaskByID(id int) Task {
 | 
			
		||||
func (r *Remind) GetTaskByID(id int64) Task {
 | 
			
		||||
	r.mu.RLock()
 | 
			
		||||
	defer r.mu.RUnlock()
 | 
			
		||||
	return r.tasks[id]
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,22 @@ func exists(path string) bool {
 | 
			
		||||
	return err == nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestOtherDb(t *testing.T) {
 | 
			
		||||
	var db stardb.StarDB
 | 
			
		||||
	err := db.Open("sqlite", "./db.sqlite")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	r, err := NewRemind(&db, func(task Task) {
 | 
			
		||||
		fmt.Println("hello world!", time.Now(), task.ID, task.Key, task.TmrInfo, task.Msg, task.Origin)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	fmt.Println(len(r.GetTasksByKey("705457681")))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestRemind(t *testing.T) {
 | 
			
		||||
	var db stardb.StarDB
 | 
			
		||||
	err := db.Open("sqlite", "./remind.db")
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user