From 03fa525a00aa2d9157b65e66a9c0f0280a8bc08b Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 2 May 2025 15:16:04 -0500 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=94=96=20Ic-merge=20is=20working=20no?= =?UTF-8?q?w?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Taskfile.yml | 14 ++++++++++++++ cmd/ic-merge/main.go | 10 +++++----- infinitecraft/game.go | 4 ++-- infinitecraft/merger.go | 28 ++-------------------------- infinitecraft/write.go | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 58 insertions(+), 33 deletions(-) create mode 100644 infinitecraft/write.go diff --git a/Taskfile.yml b/Taskfile.yml index 6f2562e..17e1e0c 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -84,3 +84,17 @@ tasks: - '{{.BIN}}/cool-down' cmds: - 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 diff --git a/cmd/ic-merge/main.go b/cmd/ic-merge/main.go index 1be90ef..63563b2 100644 --- a/cmd/ic-merge/main.go +++ b/cmd/ic-merge/main.go @@ -2,7 +2,7 @@ package main import ( "context" - "encoding/json" + "fmt" "os" c "codeberg.org/danjones000/utils/cli/context" @@ -26,9 +26,9 @@ func main() { g, err := m.Merge(ctx) e.HandleErr(err) - jsout := json.NewEncoder(os.Stdout) - jsout.SetIndent("", "\t") - err = jsout.Encode(g) + var out string + out, err = m.Write(ctx, g) e.HandleErr(err) - // */ + + fmt.Printf("Saved to %s\n", out) } diff --git a/infinitecraft/game.go b/infinitecraft/game.go index 6a4c729..3cbb883 100644 --- a/infinitecraft/game.go +++ b/infinitecraft/game.go @@ -3,8 +3,8 @@ package infinitecraft type Game struct { Name string `json:"name"` Version string `json:"version"` - Created uint64 `json:"created"` - Updated uint64 `json:"updated"` + Created int64 `json:"created"` + Updated int64 `json:"updated"` Instances []any `json:"instances" db:"-"` Items []Item `json:"items" db:"-"` } diff --git a/infinitecraft/merger.go b/infinitecraft/merger.go index dd70295..36d2ef8 100644 --- a/infinitecraft/merger.go +++ b/infinitecraft/merger.go @@ -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`) } -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`) } -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`) } @@ -221,30 +221,6 @@ func (m *Merger) Merge(ctx context.Context) (g Game, err error) { 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) { mp = make(map[int64]Game, len(m.games)) var res sql.Result diff --git a/infinitecraft/write.go b/infinitecraft/write.go new file mode 100644 index 0000000..07013d0 --- /dev/null +++ b/infinitecraft/write.go @@ -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 +} From d55c680ec4f18cb95fdb6c445cd15042de39474e Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 2 May 2025 16:40:46 -0500 Subject: [PATCH 2/2] =?UTF-8?q?=E2=9C=A8=20Parse=20(but=20don't=20return)?= =?UTF-8?q?=20instances?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infinitecraft/game.go | 12 ++++++------ infinitecraft/instance.go | 7 +++++++ infinitecraft/write.go | 2 +- 3 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 infinitecraft/instance.go diff --git a/infinitecraft/game.go b/infinitecraft/game.go index 3cbb883..7e55fa5 100644 --- a/infinitecraft/game.go +++ b/infinitecraft/game.go @@ -1,10 +1,10 @@ package infinitecraft type Game struct { - Name string `json:"name"` - Version string `json:"version"` - Created int64 `json:"created"` - Updated int64 `json:"updated"` - Instances []any `json:"instances" db:"-"` - Items []Item `json:"items" db:"-"` + Name string `json:"name"` + Version string `json:"version"` + Created int64 `json:"created"` + Updated int64 `json:"updated"` + Instances []Instance `json:"instances" db:"-"` + Items []Item `json:"items" db:"-"` } diff --git a/infinitecraft/instance.go b/infinitecraft/instance.go new file mode 100644 index 0000000..c9cb29e --- /dev/null +++ b/infinitecraft/instance.go @@ -0,0 +1,7 @@ +package infinitecraft + +type Instance struct { + ItemID int32 `json:"itemId"` + X uint16 `json:"x"` + Y uint16 `json:"y"` +} diff --git a/infinitecraft/write.go b/infinitecraft/write.go index 07013d0..8f8e91f 100644 --- a/infinitecraft/write.go +++ b/infinitecraft/write.go @@ -26,7 +26,7 @@ func (m *Merger) Write(ctx context.Context, g Game) (out string, err error) { gz.Comment = "merge by ic-merge" if g.Instances == nil { - g.Instances = make([]any, 0) + g.Instances = make([]Instance, 0) } enc := json.NewEncoder(gz)