🔖 Ic-merge is working now
This commit is contained in:
parent
8a3da4c5fe
commit
03fa525a00
5 changed files with 58 additions and 33 deletions
14
Taskfile.yml
14
Taskfile.yml
|
|
@ -84,3 +84,17 @@ tasks:
|
||||||
- '{{.BIN}}/cool-down'
|
- '{{.BIN}}/cool-down'
|
||||||
cmds:
|
cmds:
|
||||||
- go install ./cmd/cool-down
|
- go install ./cmd/cool-down
|
||||||
|
|
||||||
|
install-ic-merge:
|
||||||
|
desc: Installs the ic-merge command
|
||||||
|
source:
|
||||||
|
- go.mod
|
||||||
|
- go.sum
|
||||||
|
- cmd/ic-merge/**/*.go
|
||||||
|
- cli/context/*.go
|
||||||
|
- cli/err/*.go
|
||||||
|
- infinitecraft/**/*.go
|
||||||
|
generates:
|
||||||
|
- '{{.BIN}}/ic-merge'
|
||||||
|
cmds:
|
||||||
|
- go install ./cmd/ic-merge
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
c "codeberg.org/danjones000/utils/cli/context"
|
c "codeberg.org/danjones000/utils/cli/context"
|
||||||
|
|
@ -26,9 +26,9 @@ func main() {
|
||||||
g, err := m.Merge(ctx)
|
g, err := m.Merge(ctx)
|
||||||
e.HandleErr(err)
|
e.HandleErr(err)
|
||||||
|
|
||||||
jsout := json.NewEncoder(os.Stdout)
|
var out string
|
||||||
jsout.SetIndent("", "\t")
|
out, err = m.Write(ctx, g)
|
||||||
err = jsout.Encode(g)
|
|
||||||
e.HandleErr(err)
|
e.HandleErr(err)
|
||||||
// */
|
|
||||||
|
fmt.Printf("Saved to %s\n", out)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@ package infinitecraft
|
||||||
type Game struct {
|
type Game struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Version string `json:"version"`
|
Version string `json:"version"`
|
||||||
Created uint64 `json:"created"`
|
Created int64 `json:"created"`
|
||||||
Updated uint64 `json:"updated"`
|
Updated int64 `json:"updated"`
|
||||||
Instances []any `json:"instances" db:"-"`
|
Instances []any `json:"instances" db:"-"`
|
||||||
Items []Item `json:"items" db:"-"`
|
Items []Item `json:"items" db:"-"`
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -139,11 +139,11 @@ func (m *Merger) getGameDetails(ctx context.Context, g *Game) error {
|
||||||
return m.db.GetContext(ctx, g, `SELECT name, version FROM games ORDER BY id ASC LIMIT 1`)
|
return m.db.GetContext(ctx, g, `SELECT name, version FROM games ORDER BY id ASC LIMIT 1`)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Merger) getGameCreated(ctx context.Context, date *uint64) error {
|
func (m *Merger) getGameCreated(ctx context.Context, date *int64) error {
|
||||||
return m.db.GetContext(ctx, date, `SELECT MIN(created) FROM games`)
|
return m.db.GetContext(ctx, date, `SELECT MIN(created) FROM games`)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Merger) getGameUpdated(ctx context.Context, date *uint64) error {
|
func (m *Merger) getGameUpdated(ctx context.Context, date *int64) error {
|
||||||
return m.db.GetContext(ctx, date, `SELECT MAX(updated) FROM games`)
|
return m.db.GetContext(ctx, date, `SELECT MAX(updated) FROM games`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -221,30 +221,6 @@ func (m *Merger) Merge(ctx context.Context) (g Game, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
type GameItem struct {
|
|
||||||
Game string `db:"game"`
|
|
||||||
GameID int64 `db:"game_id"`
|
|
||||||
Text string `db:"name"`
|
|
||||||
Emoji string
|
|
||||||
Id int64 `db:"orig_id"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Merger) GameItems(ctx context.Context) (gits []GameItem, err error) {
|
|
||||||
err = m.db.SelectContext(ctx, &gits, `
|
|
||||||
SELECT
|
|
||||||
g.name AS game,
|
|
||||||
g.id AS game_id,
|
|
||||||
it.name,
|
|
||||||
it.emoji,
|
|
||||||
it.id - 1 AS orig_id
|
|
||||||
FROM games_items gi
|
|
||||||
JOIN items it ON gi.item_id = it.id
|
|
||||||
JOIN games g ON gi.game_id = g.id
|
|
||||||
ORDER BY gi.id ASC
|
|
||||||
`)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Merger) insertGames(ctx context.Context) (mp map[int64]Game, err error) {
|
func (m *Merger) insertGames(ctx context.Context) (mp map[int64]Game, err error) {
|
||||||
mp = make(map[int64]Game, len(m.games))
|
mp = make(map[int64]Game, len(m.games))
|
||||||
var res sql.Result
|
var res sql.Result
|
||||||
|
|
|
||||||
35
infinitecraft/write.go
Normal file
35
infinitecraft/write.go
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
package infinitecraft
|
||||||
|
|
||||||
|
import (
|
||||||
|
"compress/gzip"
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (m *Merger) Write(ctx context.Context, g Game) (out string, err error) {
|
||||||
|
base := fmt.Sprintf("%s - %s", time.Now().Local().Format("2006-01-02T15_04_05"), g.Name)
|
||||||
|
out = base + ".ic"
|
||||||
|
|
||||||
|
var f *os.File
|
||||||
|
if f, err = os.Create(out); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
gz := gzip.NewWriter(f)
|
||||||
|
defer gz.Close()
|
||||||
|
gz.Name = base
|
||||||
|
gz.ModTime = time.Unix(g.Updated/1000, g.Updated%1000)
|
||||||
|
gz.Comment = "merge by ic-merge"
|
||||||
|
|
||||||
|
if g.Instances == nil {
|
||||||
|
g.Instances = make([]any, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
enc := json.NewEncoder(gz)
|
||||||
|
err = enc.Encode(g)
|
||||||
|
return
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue