123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998 |
- package Warehouse
- import (
- "context"
- "fmt"
- "log"
- gotime "time"
- "strconv"
- "strings"
- "os"
- "io/ioutil"
- "path/filepath"
- "encoding/json"
- "reflect"
- "database/sql"
- _ "github.com/mattn/go-sqlite3"
-
- "github.com/zyxar/argo/rpc"
- //"github.com/veandco/go-sdl2/sdl"
- "github.com/veandco/go-sdl2/ttf"
- "github.com/cuu/gogame/surface"
- "github.com/cuu/gogame/time"
- "github.com/cuu/gogame/event"
- "github.com/cuu/gogame/rect"
-
- "github.com/cuu/grab"
- "github.com/clockworkpi/LauncherGoDev/sysgo"
- "github.com/clockworkpi/LauncherGoDev/sysgo/UI"
- )
- type WareHouse struct {
- UI.Page
- ListFontObj15 *ttf.Font
- ListFontObj12 *ttf.Font
- Icons map[string]UI.IconItemInterface
-
- BGwidth int
- BGheight int
- DrawOnce bool
- Scroller *UI.ListScroller
- RemovePage *UI.YesCancelConfirmPage
- Keyboard *UI.Keyboard
- PreviewPage *ImageDownloadProcessPage
- LoadHousePage *LoadHousePage
- WareHouseDB string
- MyStack *WareHouseStack
-
- rpcc rpc.Client
- rpcSecret string
- rpcURI string
- Aria2DownloadingGid string // the Downloading Gid of aria2c
-
- Downloading chan bool
- Downloader *grab.Client
- resp *grab.Response
- req *grab.Request
- ScrolledCnt int
-
- }
- func NewWareHouse() *WareHouse {
- p := &WareHouse{}
- p.ListFontObj12 = UI.MyLangManager.TrFont("notosanscjk12")
- p.ListFontObj15 = UI.MyLangManager.TrFont("varela15")
- p.Icons = make(map[string]UI.IconItemInterface)
-
- p.FootMsg = [5]string{"Nav","Update","Up","Back","Select"}
- p.WareHouseDB = sysgo.SQLDB
- p.BGwidth = 320
- p.BGheight = 240-24-20
-
- p.MyStack = NewWareHouseStack()
- repo := make(map[string]string)
- repo["title"] = "github.com/clockworkpi/warehouse"
- repo["file"] = "https://raw.githubusercontent.com/clockworkpi/warehouse/master/index.json"
- repo["type"] = "source"
- p.MyStack.Push(repo)
- p.rpcURI = sysgo.Aria2Url
-
- return p
- }
- func (self *WareHouse) GetAria2DownloadingPercent(url string) int {
-
- if resp,err := self.rpcc.TellActive();err == nil {
- for _,v := range resp {
- if uris,err := self.rpcc.GetURIs(v.Gid); err == nil {
- for _,x := range uris {
- if x.URI == url {
- comp_len,_ := strconv.ParseInt(v.CompletedLength,10,64)
- totl_len,_ := strconv.ParseInt(v.TotalLength,10,64)
- pct := float64(comp_len)/float64(totl_len)
- pct = pct * 100.0
- return int(pct)
- }
- }
- }
- }
- }
- return -1;///None
- }
- func (self *WareHouse) UpdateProcessInterval(ms int) {
- dirty := false
- RefreshTicker := gotime.NewTicker(gotime.Duration(ms)*gotime.Millisecond)
- defer RefreshTicker.Stop()
- L:
- for {
- select {
- case <- RefreshTicker.C:
- for _,i := range self.MyList {
- x := i.(*WareHouseListItem)
- if x.Type == "launcher" || x.Type == "pico8" || x.Type == "tic80" {
- percent := self.GetAria2DownloadingPercent(x.Value["file"])
- if percent < 0 {
- x.SetSmallText("")
- }else {
- x.SetSmallText(fmt.Sprintf("%d%%",percent))
- dirty = true
- }
- }
- }
- if self.Screen.CurPage() == self && dirty == true {
- self.Screen.Refresh()
- }
- dirty = false
- case v:= <- self.Downloading:
- if v== false {
- break L
- }
- }
- }
- }
- func (self *WareHouse) SyncWareHouse() []map[string]string {
- db, err := sql.Open("sqlite3", self.WareHouseDB)
- if err != nil {
- log.Fatal(err)
- return nil
- }
- defer db.Close()
-
- //id,title,file,type
- rows, err := db.Query("select * from warehouse")
- if err != nil {
- log.Fatal(err)
- }
- defer rows.Close()
- var ret []map[string]string
-
- for rows.Next() {
- var id int
- var title string
- var file string
- var type_ string
-
- err = rows.Scan(&id, &title,&file,&type_)
- if err != nil {
- log.Fatal(err)
- }
- w_dbt := make(map[string]string)
- w_dbt["title"] = title
- w_dbt["file"] = file
- w_dbt["type"] = type_
- ret = append(ret,w_dbt)
- }
- return ret
- }
- func (self *WareHouse) SyncTasks() []map[string]string {
- db, err := sql.Open("sqlite3", self.WareHouseDB)
- if err != nil {
- log.Fatal(err)
- return nil
- }
- defer db.Close()
-
- //id,gid,title,file,type,status,totalLength,completedLength,fav
- rows, err := db.Query("select * from tasks")
- if err != nil {
- log.Fatal(err)
- }
- defer rows.Close()
- var ret []map[string]string
-
- for rows.Next() {
- var id int
- var gid string
- var title string
- var file string
- var type_ string
- var status string
- var totalLength string
- var completedLength string
- var fav string
-
- err = rows.Scan(&id,&gid, &title,&file,&type_,&status,&totalLength,&completedLength,&fav)
- if err != nil {
- log.Fatal(err)
- }
- w_dbt := make(map[string]string)
- w_dbt["gid"] = gid
- w_dbt["title"] = title
- w_dbt["file"] = file
- w_dbt["type"] = type_
- w_dbt["status"] = status
- w_dbt["totalLength"] = totalLength
- w_dbt["completedLength"] = completedLength
-
- ret = append(ret,w_dbt)
- }
- return ret
- }
- func IsSlice(v interface{}) bool {
- if reflect.TypeOf(v).Kind() == reflect.Slice || reflect.TypeOf(v).Kind() == reflect.Array {
- return true
- }
- return false
- }
- func (self *WareHouse) SyncList() {
- self.MyList = self.MyList[:0]
- start_x := 0
- start_y := 0
- last_height := 0
- var repos []map[string]string
-
- fmt.Printf("SyncList: %+v\n", self.MyStack)
-
- stk := self.MyStack.Last()
- stk_len := self.MyStack.Length()
- if IsSlice(stk) {
- repos = append(repos, stk.([]map[string]string)...)
- }else {
- repos = append(repos, stk.(map[string]string))
- }
-
- add_new_house := make(map[string]string)
- add_new_house["title"] = "Add new warehouse..."
- add_new_house["file"] = "master/index.json"
- add_new_house["type"] = "add_house"
- add_new_house["status"] = "complete"
-
- if stk_len == 1 {//on top
- ware_menu := self.SyncWareHouse()
- if len(ware_menu) > 0 {
- repos = append(repos,ware_menu...)
- }
- tasks_menu := self.SyncTasks()
- if len(tasks_menu) > 0 {
- repos = append(repos,tasks_menu...)
- }
- repos = append(repos,add_new_house)
- }
- for _, u := range repos {
- fmt.Printf("%+v\n",u)
- li := NewWareHouseListItem()
- li.Parent = self
- li.PosX = start_x
- li.PosY = start_y + last_height
- li.Width = UI.Width
- li.Fonts["normal"] = self.ListFontObj15
- li.Fonts["small"] = self.ListFontObj12
- li.ReadOnly = true
- li.Type = u["type"]
- li.Value = u
- li.Init(u["title"])
- if stk_len > 1 {
- remote_file_url := u["file"]
- menu_file := strings.Split(remote_file_url,"raw.githubusercontent.com")[1]
- home_path, err := os.UserHomeDir()
- if err != nil {
- log.Fatal( err )
- }
- local_menu_file := fmt.Sprintf(aria2dl_folder,home_path,menu_file)
- fmt.Println("for loop ",local_menu_file)
- if UI.FileExists(local_menu_file) {
- li.ReadOnly = false
- }else {
- li.ReadOnly = true
- }
- } else if stk_len == 1 {
- if _,ok := u["status"];ok {
- if u["status"] == "complete" {
- li.ReadOnly = false
- }
- }
- if u["type"] == "source" {
- li.ReadOnly = false
- }
- }
- last_height += li.Height
- if li.Type == "launcher" || li.Type == "pico8" || li.Type == "tic80" {
- li.SetSmallText("")
- }
- self.MyList = append(self.MyList,li)
- }
- self.RefreshPsIndex()
- }
- func (self *WareHouse) Init() {
- if self.Screen != nil {
- if self.Screen.CanvasHWND != nil && self.CanvasHWND == nil {
- self.HWND = self.Screen.CanvasHWND
- self.CanvasHWND = surface.Surface(self.Screen.Width, self.BGheight)
- }
- self.PosX = self.Index * self.Screen.Width
- self.Width = self.Screen.Width //equal to screen width
- self.Height = self.Screen.Height
- done := UI.NewIconItem()
- done.ImgSurf = UI.MyIconPool.GetImgSurf("done")
- done.MyType = UI.ICON_TYPES["STAT"]
- done.Parent = self
- self.Icons["done"] = done
- ps := UI.NewInfoPageSelector()
- ps.Parent = self
- self.Ps = ps
- self.PsIndex = 0
- self.Scroller = UI.NewListScroller()
- self.Scroller.Parent = self
- self.Scroller.PosX = self.Width - 10
- self.Scroller.PosY = 2
- self.Scroller.Init()
- self.Scroller.SetCanvasHWND(self.CanvasHWND)
- self.RemovePage = UI.NewYesCancelConfirmPage()
- self.RemovePage.Screen = self.Screen
- self.RemovePage.StartOrAEvent = self.RemoveGame
- self.RemovePage.Name = "Are you sure?"
-
- self.RemovePage.Init()
-
- self.Keyboard = UI.NewKeyboard()
- self.Keyboard.Name = "Enter warehouse addr"
- self.Keyboard.FootMsg = [5]string{"Nav.","Add","ABC","Backspace","Enter"}
- self.Keyboard.Screen = self.Screen
- self.Keyboard.Init()
- self.Keyboard.SetPassword("github.com/clockworkpi/warehouse")
- self.Keyboard.Caller = self
-
- self.PreviewPage = NewImageDownloadProcessPage()
- self.PreviewPage.Screen = self.Screen
- self.PreviewPage.Name ="Preview"
- self.PreviewPage.Init()
- self.LoadHousePage = NewLoadHousePage()
- self.LoadHousePage.Screen = self.Screen
- self.LoadHousePage.Name = "Warehouse"
- self.LoadHousePage.Parent = self
- self.LoadHousePage.Init()
-
- rpcc, err := rpc.New(context.Background(),
- self.rpcURI,
- self.rpcSecret,
- gotime.Second, AppNotifier{Parent:self})
-
- if err != nil {
- fmt.Fprintln(os.Stderr, err)
- os.Exit(2)
- }
- self.rpcc = rpcc
- self.Downloader = grab.NewClient()
- self.Downloading = make(chan bool,1)
- self.Screen.HookExitCb(self)
- }
- }
- func (self *WareHouse) SetDownloading(v bool) {
- for len(self.Downloading) > 0 {
- <- self.Downloading
- }
- self.Downloading <- v
- }
- func (self *WareHouse) ResetHouse() {
- if self.PsIndex > len(self.MyList) -1 {
- return
- }
- cur_li := self.MyList[self.PsIndex].(*WareHouseListItem)
- home_path, _ := os.UserHomeDir()
-
- if cur_li.Value["type"] == "source" {
- remote_file_url := cur_li.Value["file"]
- parts := strings.Split(remote_file_url,"raw.githubusercontent.com")
- menu_file := parts[1]
- local_menu_file := fmt.Sprintf(aria2dl_folder,home_path,menu_file)
- local_menu_file_path := filepath.Dir(local_menu_file)
-
- fmt.Println(local_menu_file)
- local_jsons,err := filepath.Glob(local_menu_file_path+"/**/*.json")
- if err != nil {
- fmt.Println(err)
- }
- if UI.FileExists(local_menu_file) {
- os.Remove(local_menu_file)
- }
- if UI.FileExists(local_menu_file+".aria2") {
- os.Remove(local_menu_file+".aria2")
- }
- for _,x := range local_jsons {
- os.Remove(x)
- }
- self.Screen.MsgBox.SetText("Done")
- self.Screen.MsgBox.Draw()
- self.Screen.SwapAndShow()
-
- }
- }
- func (self *WareHouse) LoadHouse() {
- if self.PsIndex > len(self.MyList) -1 {
- return
- }
- cur_li := self.MyList[self.PsIndex].(*WareHouseListItem)
- if cur_li.Value["type"] == "source" || cur_li.Value["type"] == "dir" {
- self.LoadHousePage.URL = cur_li.Value["file"]
- self.Screen.PushPage(self.LoadHousePage)
- self.Screen.Refresh()
- }
-
- }
- func (self *WareHouse) PreviewGame() {
- if self.PsIndex > len(self.MyList) -1 {
- return
- }
- cur_li := self.MyList[self.PsIndex].(*WareHouseListItem)
- if cur_li.Value["type"] == "launcher" ||
- cur_li.Value["type"] == "pico8" ||
- cur_li.Value["type"] == "tic80" {
- if _,ok := cur_li.Value["shots"];ok {
- fmt.Println(cur_li.Value["shots"])
- self.PreviewPage.URL = cur_li.Value["shots"]
- self.Screen.PushPage(self.PreviewPage)
- self.Screen.Refresh()
- }
- }
- }
- //check if an Url is downloading in aria2c
- func (self *WareHouse) UrlIsDownloading(url string) (string,bool) {
- if resp,err := self.rpcc.TellActive();err == nil {
- for _,v := range resp {
- if uris,err := self.rpcc.GetURIs(v.Gid);err == nil {
- for _,x := range uris {
- if x.URI == url {
- fmt.Println(x.URI," ",url)
- return v.Gid,true
- }
- }
- }
- }
- }else {
- log.Println(err)
- }
- return "",false
- }
- func (self *WareHouse) RemoveGame() {
- if self.PsIndex > len(self.MyList) -1 {
- return
- }
- fmt.Println("RemoveGame")
- cur_li := self.MyList[self.PsIndex].(*WareHouseListItem)
- fmt.Println("Remove cur_li._Value",cur_li.Value)
- home_path, _ := os.UserHomeDir()
-
- if cur_li.Value["type"] == "source" {
- db, err := sql.Open("sqlite3", self.WareHouseDB)
- if err != nil {
- log.Fatal(err)
- }
- defer db.Close()
- _, err = db.Exec(fmt.Sprintf("DELETE FROM warehouse WHERE file = '%s'",
- cur_li.Value["file"]))
-
- if err != nil {
- log.Println(err)
- }
-
- } else if cur_li.Value["type"] == "launcher" ||
- cur_li.Value["type"] == "pico8" ||
- cur_li.Value["type"] == "tic80" {
- remote_file_url := cur_li.Value["file"]
- parts := strings.Split(remote_file_url,"raw.githubusercontent.com")
- menu_file := parts[1]
- local_menu_file := fmt.Sprintf(aria2dl_folder,home_path,menu_file)
- local_menu_file_path := filepath.Dir(local_menu_file)
- gid,ret := self.UrlIsDownloading(remote_file_url)
- if ret == true {
- self.rpcc.Remove(gid)
- }
- if UI.FileExists(local_menu_file) {
- os.Remove(local_menu_file)
- }
- if UI.FileExists(local_menu_file+".aria2") {
- os.Remove(local_menu_file+".aria2")
- }
- if UI.FileExists(filepath.Join(local_menu_file_path,cur_li.Value["title"])) {
- os.RemoveAll(filepath.Join(local_menu_file_path,cur_li.Value["title"]))
- }
-
- }
- }
- func (self *WareHouse) Click() {
- if self.PsIndex > len(self.MyList) -1 {
- return
- }
- cur_li := self.MyList[self.PsIndex].(*WareHouseListItem)
- home_path, _ := os.UserHomeDir()
- fmt.Println("Click cur_li._Value",cur_li.Value)
- if cur_li.Value["type"] == "source" || cur_li.Value["type"] == "dir" {
- remote_file_url := cur_li.Value["file"]
- parts := strings.Split(remote_file_url,"raw.githubusercontent.com")//assume master branch
- menu_file := parts[1]
- local_menu_file := fmt.Sprintf(aria2dl_folder,home_path,menu_file)
- fmt.Println("warehouse click: ",local_menu_file)
- if UI.FileExists(local_menu_file) == false {
- self.LoadHouse()
- }else {
- //read the local_menu_file,push into stack,display menu
- self.Aria2DownloadingGid = ""
- var result WareHouseIndex
- jsonFile, err := os.Open(local_menu_file)
-
- if err != nil {
- fmt.Println(err)
- self.Screen.MsgBox.SetText("Open House failed")
- self.Screen.MsgBox.Draw()
- self.Screen.SwapAndShow()
-
- }else {
- defer jsonFile.Close()
-
- byteValue, _ := ioutil.ReadAll(jsonFile)
- json.Unmarshal(byteValue, &result)
- self.MyStack.Push(result.List)
-
- self.SyncList()
- self.Screen.Refresh()
- }
-
- }
- } else if cur_li.Value["type"] == "add_house" {
- fmt.Println("show keyboard to add warehouse")
- self.Screen.PushCurPage()
- self.Screen.SetCurPage(self.Keyboard)
-
- } else {
- //download the game probably
- remote_file_url := cur_li.Value["file"]
- parts := strings.Split(remote_file_url,"raw.githubusercontent.com")//assume master branch
- menu_file := parts[1]
- local_menu_file := fmt.Sprintf(aria2dl_folder,home_path,menu_file)
- fmt.Println("Click on game ", local_menu_file)
-
- if UI.FileExists(local_menu_file) == false {
- gid,ret := self.UrlIsDownloading(remote_file_url)
- if ret == false {
-
- outfile := struct {
- Out string `json:"out"`
-
- }{Out:menu_file}
-
- gid,err := self.rpcc.AddURI([]string{remote_file_url},outfile)
-
- if err != nil {
- log.Println(err)
- }else {
- fmt.Println("Warehouse Click game is downloading, ",gid)
- fmt.Println(remote_file_url)
- self.Aria2DownloadingGid = gid
- }
-
- } else {
- fmt.Println(self.rpcc.TellStatus(gid,"status","totalLength","completedLength"))
- self.Screen.MsgBox.SetText("Getting the game now")
- self.Screen.MsgBox.Draw()
- self.Screen.SwapAndShow()
- time.BlockDelay(800)
- self.Screen.TitleBar.Redraw()
- }
- }else {
- fmt.Println("file downloaded ", cur_li.Value) //maybe check it if is installed fst,then execute it
- if cur_li.Value["type"] == "launcher" && cur_li.ReadOnly == false {
- local_menu_file_path := filepath.Dir(local_menu_file)
- game_sh := filepath.Join(local_menu_file_path,cur_li.Value["title"],cur_li.Value["title"]+".sh")
- fmt.Println("run game: ",game_sh, UI.FileExists(game_sh))
- self.Screen.RunEXE(game_sh)
-
- }
- if cur_li.Value["type"] == "pico8" && cur_li.ReadOnly == false {
- if UI.FileExists("/home/cpi/games/PICO-8/pico-8/pico8") {
- game_sh := "/home/cpi/launchergo/Menu/GameShell/50_PICO-8/PICO-8.sh"
- self.Screen.RunEXE(game_sh) //pico8 manages its games self
- }
- }
- if cur_li.Value["type"] == "tic80" && cur_li.ReadOnly == false {
- game_sh := "/home/cpi/apps/Menu/51_TIC-80/TIC-80.sh"
- self.Screen.RunEXE(game_sh)
- }
- }
- }
- }
- func (self *WareHouse) OnAria2CompleteCb(gid string) {
- fmt.Println("OnAria2CompleteCb", gid)
- self.SyncList()
- self.Screen.Refresh()
-
- if gid == self.Aria2DownloadingGid {
- self.Aria2DownloadingGid = ""
- }
- }
- func (self *WareHouse) raw_github_com(url string) (bool,string) {
- if strings.HasPrefix(url,"github.com") == false {
- return false,""
- }
- parts := strings.Split(url,"/")
- if len(parts) != 3 {
- return false, ""
- }
- str := []string{"https://raw.githubusercontent.com",
- parts[1],
- parts[2],
- "master/index.json"}
-
- return true,strings.Join(str,"/")
-
- }
-
- func (self *WareHouse) OnKbdReturnBackCb() {
-
- inputed:= strings.Join(self.Keyboard.Textarea.MyWords,"")
- inputed = strings.Replace(inputed,"http://","",-1)
- inputed = strings.Replace(inputed,"https://","",-1)
- if strings.HasSuffix(inputed,".git") {
- inputed = inputed[:len(inputed)-4]
- }
- if strings.HasSuffix(inputed,"/") {
- inputed = inputed[:len(inputed)-1]
- }
- fmt.Println("last: ",inputed)
- db, err := sql.Open("sqlite3", self.WareHouseDB)
- if err != nil {
- log.Fatal(err)
- return
- }
- defer db.Close()
-
- stmt, err := db.Prepare("SELECT count(*) FROM warehouse WHERE title= ?")
- defer stmt.Close()
-
- if err != nil {
- log.Fatal(err)
- }
-
- var cnt_str string
- cnt := 0
- err = stmt.QueryRow(inputed).Scan(&cnt_str)
- if err != nil {
- log.Println(err)
- cnt_str = "0"
- }else {
- cnt,_= strconv.Atoi(cnt_str)
- }
-
- if cnt > 0 {
- self.Screen.MsgBox.SetText("Warehouse existed")
- self.Screen.MsgBox.Draw()
- self.Screen.SwapAndShow()
- } else {
- if strings.Contains(inputed,"github.com/clockworkpi/warehouse") {
- self.Screen.MsgBox.SetText("Warehouse existed")
- self.Screen.MsgBox.Draw()
- self.Screen.SwapAndShow()
- }else {
- valid_,_url := self.raw_github_com(inputed)
-
- if valid_ == false {
- self.Screen.MsgBox.SetText("Warehouse url error!")
- self.Screen.MsgBox.Draw()
- self.Screen.SwapAndShow()
- } else {
- sql_insert := fmt.Sprintf("INSERT INTO warehouse(title,file,type) VALUES('%s','%s','source');",
- inputed,_url)
- _, err = db.Exec(sql_insert)
- if err != nil {
- log.Println(err)
- }
- self.SyncList()
- self.Screen.Refresh()
- }
- }
- }
- }
- func (self *WareHouse) OnExitCb() {
- self.SetDownloading(false)
- self.rpcc.Close()
-
- }
- func (self *WareHouse) OnLoadCb() {
- if self.MyStack.Length() == 1 {
- self.FootMsg[2] = "Remove"
- self.FootMsg[1] = "Update"
- }else {
- self.FootMsg[2] = "Remove"
- self.FootMsg[1] = "Preview"
- }
- self.SetDownloading(true)
- go self.UpdateProcessInterval(500)
-
- self.SyncList()
- }
- func (self *WareHouse) OnReturnBackCb() {
- if self.MyStack.Length() == 1 {
- self.FootMsg[2] = "Remove"
- self.FootMsg[1] = "Update"
- }else {
- self.FootMsg[2] = "Remove"
- self.FootMsg[1] = "Preview"
- }
-
- self.SyncList()
- self.RestoreScrolled()
-
- self.Screen.Refresh()
-
- }
- func (self *WareHouse) ScrollDown() {
- if len(self.MyList) == 0 {
- return
- }
- self.PsIndex += 1
- if self.PsIndex >= len(self.MyList) {
- self.PsIndex = len(self.MyList) - 1
- }
- cur_li := self.MyList[self.PsIndex]
- x, y := cur_li.Coord()
- _, h := cur_li.Size()
-
- if y+h > self.Height {
- for i, _ := range self.MyList {
- x, y = self.MyList[i].Coord()
- _, h = self.MyList[i].Size()
- self.MyList[i].NewCoord(x, y-h)
- }
-
- self.ScrolledCnt -= h
- }
- }
- func (self *WareHouse) ScrollUp() {
- if len(self.MyList) == 0 {
- return
- }
- self.PsIndex -= 1
- if self.PsIndex < 0 {
- self.PsIndex = 0
- }
- cur_li := self.MyList[self.PsIndex]
- x, y := cur_li.Coord()
- _, h := cur_li.Size()
- if y < 0 {
- for i, _ := range self.MyList {
- x, y = self.MyList[i].Coord()
- _, h = self.MyList[i].Size()
- self.MyList[i].NewCoord(x, y+h)
- }
- self.ScrolledCnt += h
- }
- }
- func (self *WareHouse) RestoreScrolled() {
- for i,_ := range self.MyList {
- x,y := self.MyList[i].Coord()
- self.MyList[i].NewCoord(x, y+ self.ScrolledCnt)
- }
- }
- func (self *WareHouse) KeyDown(ev *event.Event) {
- if UI.IsKeyMenuOrB(ev.Data["Key"]) {
- if self.MyStack.Length() > 1 {
- self.MyStack.Pop()
- if self.MyStack.Length() == 1 {
- self.FootMsg[2] = "Remove"
- self.FootMsg[1] = "Update"
-
- }else {
- self.FootMsg[2] = "Remove"
- self.FootMsg[1] = "Preview"
- if self.MyStack.Length() == 2 {
- self.FootMsg[2] = ""
- self.FootMsg[1] = ""
- }
- }
- self.SyncList()
- self.Screen.Refresh()
- }else if self.MyStack.Length() == 1 {
- self.ReturnToUpLevelPage()
- self.Screen.Refresh()
- self.SetDownloading(false)//shutdown UpdateProcessInterval
- }
- }
-
- if UI.IsKeyStartOrA(ev.Data["Key"]) {
- self.Click()
- if self.MyStack.Length() == 1 {
- self.FootMsg[2] = "Remove"
- self.FootMsg[1] = "Update"
- }else {
- self.FootMsg[2] = "Remove"
- self.FootMsg[1] = "Preview"
- if self.MyStack.Length() == 2 {
- self.FootMsg[2] = ""
- self.FootMsg[1] = ""
- }
- }
- self.Screen.Refresh()
- }
- if ev.Data["Key"] == UI.CurKeys["X"] {
- if self.PsIndex <= len(self.MyList) -1 {
- cur_li := self.MyList[self.PsIndex].(*WareHouseListItem)
- if cur_li.Type != "dir" {
- if self.MyStack.Length() ==1 && self.PsIndex == 0 {
- //pass
- }else {
- self.Screen.PushPage(self.RemovePage)
- self.RemovePage.StartOrAEvent = self.RemoveGame
- self.Screen.Refresh()
- }
- }
- return
- }
- self.SyncList()
- self.Screen.Refresh()
- }
- if ev.Data["Key"] == UI.CurKeys["Y"] {
- if self.MyStack.Length() == 1 {
- self.ResetHouse()
- }else {
- self.PreviewGame()
- }
- }
- if ev.Data["Key"] == UI.CurKeys["Up"] {
- self.ScrollUp()
- self.Screen.Refresh()
- }
- if ev.Data["Key"] == UI.CurKeys["Down"] {
- self.ScrollDown()
- self.Screen.Refresh()
- }
-
- }
- func (self *WareHouse) Draw() {
- self.ClearCanvas()
- if self.PsIndex > len(self.MyList) -1 {
- self.PsIndex = len(self.MyList) -1
- }
- if self.PsIndex < 0 {
- self.PsIndex = 0
- }
- if len(self.MyList) == 0 {
- return
- } else {
- if len(self.MyList) * UI.DefaultInfoPageListItemHeight > self.Height {
- _,h := self.Ps.Size()
- self.Ps.NewSize(self.Width - 11,h)
- self.Ps.Draw()
- for _,v := range self.MyList {
- _,y := v.Coord()
- if y > (self.Height + self.Height/2) {
- break
- }
- if y < 0 {
- continue
- }
- v.Draw()
- }
- self.Scroller.UpdateSize(len(self.MyList)*UI.DefaultInfoPageListItemHeight,self.PsIndex*UI.DefaultInfoPageListItemHeight)
- self.Scroller.Draw()
- }else {
- _,h := self.Ps.Size()
- self.Ps.NewSize(self.Width,h)
- self.Ps.Draw()
- for _,v := range self.MyList {
- _,y := v.Coord()
- if y > self.Height + self.Height/2 {
- break
- }
- if y < 0 {
- continue
- }
- v.Draw()
- }
- }
- }
-
- if self.HWND != nil {
- surface.Fill(self.HWND, UI.MySkinManager.GiveColor("White"))
- rect_ := rect.Rect(self.PosX, self.PosY, self.Width, self.Height)
- surface.Blit(self.HWND, self.CanvasHWND, &rect_, nil)
- }
-
-
- }
|