update
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
package core
|
package core
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/boltdb/bolt"
|
"github.com/boltdb/bolt"
|
||||||
@@ -118,3 +120,45 @@ var Int = func(s string) int {
|
|||||||
i, _ := strconv.Atoi(s)
|
i, _ := strconv.Atoi(s)
|
||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (bucket Bucket) Create(i interface{}) error {
|
||||||
|
s := reflect.ValueOf(i).Elem()
|
||||||
|
id := s.FieldByName("ID")
|
||||||
|
return db.Update(func(tx *bolt.Tx) error {
|
||||||
|
b := tx.Bucket([]byte(bucket))
|
||||||
|
if b == nil {
|
||||||
|
b, _ = tx.CreateBucket([]byte(bucket))
|
||||||
|
}
|
||||||
|
sq, _ := b.NextSequence()
|
||||||
|
id.SetInt(int64(sq))
|
||||||
|
buf, err := json.Marshal(i)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return b.Put(itob(sq), buf)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func itob(i uint64) []byte {
|
||||||
|
return []byte(fmt.Sprint(i))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bucket Bucket) First(i interface{}) {
|
||||||
|
id := reflect.ValueOf(i).Elem().FieldByName("ID").Int()
|
||||||
|
db.View(func(tx *bolt.Tx) error {
|
||||||
|
b := tx.Bucket([]byte(bucket))
|
||||||
|
if b == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
data := b.Get(itob(uint64(id)))
|
||||||
|
if len(data) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
json.Unmarshal(data, i)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// func (bucket Bucket) Find(o interface{}) {
|
||||||
|
|
||||||
|
// }
|
||||||
|
|||||||
+41
-2
@@ -1,13 +1,52 @@
|
|||||||
package dwz
|
package dwz
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
"github.com/cdle/sillyGirl/core"
|
"github.com/cdle/sillyGirl/core"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var dwz = core.NewBucket("dwz")
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
core.Server.GET("/dwz", func(c *gin.Context) {
|
core.Server.GET("/dwz", func(c *gin.Context) {
|
||||||
addr := c.Param("addr")
|
url := c.Query("url")
|
||||||
c.String(200, addr)
|
dwz := getDwz(url)
|
||||||
|
c.String(200, dwz)
|
||||||
|
})
|
||||||
|
core.Server.GET("/d:id", func(c *gin.Context) {
|
||||||
|
id := c.Param("id")
|
||||||
|
c.Redirect(http.StatusMovedPermanently, getWz(id))
|
||||||
|
})
|
||||||
|
core.AddCommand("", []core.Function{
|
||||||
|
{
|
||||||
|
Rules: []string{"dwz ?"},
|
||||||
|
Handle: func(s core.Sender) interface{} {
|
||||||
|
return getDwz(s.Get())
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ShortUrl struct {
|
||||||
|
ID int
|
||||||
|
Url string
|
||||||
|
}
|
||||||
|
|
||||||
|
func getDwz(url string) string {
|
||||||
|
su := &ShortUrl{
|
||||||
|
Url: url,
|
||||||
|
}
|
||||||
|
dwz.Create(su)
|
||||||
|
return dwz.Get("address", "https://4co.cc"+"/d"+fmt.Sprint(su.ID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func getWz(id string) string {
|
||||||
|
su := &ShortUrl{
|
||||||
|
ID: core.Int(id),
|
||||||
|
}
|
||||||
|
dwz.First(su)
|
||||||
|
return fmt.Sprint(su.Url)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user