Skip to content

Commit 19ac9c9

Browse files
authored
Merge pull request #7 from dark0dave/feature/fileViewer
feat(file): Add file viewer
2 parents 4893c97 + a317563 commit 19ac9c9

6 files changed

Lines changed: 121 additions & 33 deletions

File tree

cmd/file-view.go

Lines changed: 74 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,14 @@ func NewFileView() fileview {
4545
}
4646

4747
func GetFileContents(path string) (string, string) {
48+
dir := filepath.Base(path)
4849
content := ""
49-
if filepath.Ext(path) == ".are" {
50-
f, err := os.Open(path)
51-
if err != nil {
52-
}
53-
defer f.Close()
50+
f, err := os.Open(path)
51+
if err != nil {
52+
}
53+
defer f.Close()
54+
switch strings.ToLower(filepath.Ext(path)) {
55+
case ".are":
5456
area, err := bg.OpenArea(f)
5557
if err != nil {
5658
}
@@ -59,14 +61,71 @@ func GetFileContents(path string) (string, string) {
5961
if err != nil {
6062
}
6163
content = buf.String()
62-
} else {
63-
var err error
64+
case ".bam":
65+
bam, err := bg.OpenBAM(f, nil)
66+
if err != nil {
67+
}
68+
buf := new(bytes.Buffer)
69+
err = bam.WriteJson(buf)
70+
if err != nil {
71+
}
72+
content = buf.String()
73+
case ".cre":
74+
cre, err := bg.OpenCre(f)
75+
if err != nil {
76+
}
77+
buf := new(bytes.Buffer)
78+
err = cre.WriteJson(buf)
79+
if err != nil {
80+
}
81+
content = buf.String()
82+
case ".dlg":
83+
dlg, err := bg.OpenDlg(f)
84+
if err != nil {
85+
}
86+
buf := new(bytes.Buffer)
87+
err = dlg.WriteJson(buf)
88+
if err != nil {
89+
}
90+
content = buf.String()
91+
case ".eff":
92+
effv1, effv2, err := bg.OpenEff(f)
93+
if err != nil {
94+
}
95+
buf := new(bytes.Buffer)
96+
if effv1 != nil {
97+
err = effv1.WriteJson(buf)
98+
} else {
99+
err = effv2.WriteJson(buf)
100+
}
101+
if err != nil {
102+
}
103+
content = buf.String()
104+
case ".itm":
105+
item, err := bg.OpenITM(f)
106+
if err != nil {
107+
}
108+
buf := new(bytes.Buffer)
109+
err = item.WriteJson(buf)
110+
if err != nil {
111+
}
112+
content = buf.String()
113+
case ".spl":
114+
dlg, err := bg.OpenSPL(f)
115+
if err != nil {
116+
}
117+
buf := new(bytes.Buffer)
118+
err = dlg.WriteJson(buf)
119+
if err != nil {
120+
}
121+
content = buf.String()
122+
default:
64123
content, err = util.ReadFileToString(path)
65124
if err != nil {
66-
content = ""
125+
return content, dir
67126
}
68127
}
69-
return content, filepath.Base(path)
128+
return content, dir
70129
}
71130

72131
func (f fileview) Init() tea.Cmd {
@@ -82,6 +141,12 @@ func (f fileview) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
82141
f.content = string(msg)
83142
f.viewport.SetContent(f.content)
84143
return f, f.Init()
144+
case SelectedFilePath:
145+
content, title := GetFileContents(string(msg))
146+
f.content = content
147+
f.viewport.SetContent(f.content)
148+
f.title = title
149+
return f, f.Init()
85150
case PathMsg:
86151
content, title := GetFileContents(string(msg))
87152
f.content = content

cmd/initial.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ func InitialModel() initial {
3232
items := []list.Item{
3333
item{title: "Traverse", desc: "Show tree of locations through a mod"},
3434
item{title: "Discover", desc: "Find all strings in a mod/directory"},
35+
item{title: "View", desc: "View any Infinity Engine file or text file"},
3536
// TODO: Implement these
3637
// item{title: "Add", desc: "Add strings to tra"},
3738
// item{title: "Range", desc: "What range of numbers are free"},
@@ -60,6 +61,7 @@ func (i initial) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
6061
case "ctrl+c", "ctrl+d", "q":
6162
return i, tea.Quit
6263
case "enter", " ":
64+
state = nav.NewState()
6365
current_path, err := os.Getwd()
6466
if err != nil {
6567
return i, tea.Quit
@@ -78,6 +80,11 @@ func (i initial) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
7880
f := NewFileView()
7981
state.SetNextCommand(d).SetNextCommand(l).SetNextCommand(f)
8082
return state.SetAndGetNextCommand(i), SendSelectedFile(current_path)
83+
case "View":
84+
d := NewDirectoryPicker(false, "Select a file to start")
85+
v := NewFileView()
86+
state.SetNextCommand(d).SetNextCommand(v)
87+
return state.SetAndGetNextCommand(i), SendSelectedFile(current_path)
8188
}
8289
}
8390
}

docs/view.gif

5.18 MB
Loading

go.mod

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ go 1.23
44

55
require (
66
github.com/charmbracelet/bubbles v0.20.0
7-
github.com/charmbracelet/bubbletea v1.1.1
8-
github.com/charmbracelet/lipgloss v0.13.0
9-
github.com/dark0dave/infinity_file_formats v0.0.0-20241126215235-54369c958d54
7+
github.com/charmbracelet/bubbletea v1.2.4
8+
github.com/charmbracelet/lipgloss v1.0.0
9+
github.com/dark0dave/infinity_file_formats v0.0.0-20241205000111-f0cefbb38b7d
1010
github.com/savannahostrowski/tree-bubble v0.0.0-20230724043728-d7bb06a8a67e
11-
golang.org/x/text v0.3.8
11+
golang.org/x/text v0.21.0
1212
)
1313

1414
require (
1515
github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect
1616
github.com/atotto/clipboard v0.1.4 // indirect
1717
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
18-
github.com/charmbracelet/x/ansi v0.2.3 // indirect
19-
github.com/charmbracelet/x/term v0.2.0 // indirect
18+
github.com/charmbracelet/x/ansi v0.5.2 // indirect
19+
github.com/charmbracelet/x/term v0.2.1 // indirect
2020
github.com/dustin/go-humanize v1.0.1 // indirect
2121
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
2222
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
@@ -29,6 +29,6 @@ require (
2929
github.com/rivo/uniseg v0.4.7 // indirect
3030
github.com/sahilm/fuzzy v0.1.1 // indirect
3131
github.com/ulikunitz/xz v0.5.12 // indirect
32-
golang.org/x/sync v0.8.0 // indirect
33-
golang.org/x/sys v0.27.0 // indirect
32+
golang.org/x/sync v0.10.0 // indirect
33+
golang.org/x/sys v0.28.0 // indirect
3434
)

go.sum

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@ github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWp
1111
github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA=
1212
github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQWD9LIutE=
1313
github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU=
14-
github.com/charmbracelet/bubbletea v1.1.1 h1:KJ2/DnmpfqFtDNVTvYZ6zpPFL9iRCRr0qqKOCvppbPY=
15-
github.com/charmbracelet/bubbletea v1.1.1/go.mod h1:9Ogk0HrdbHolIKHdjfFpyXJmiCzGwy+FesYkZr7hYU4=
16-
github.com/charmbracelet/lipgloss v0.13.0 h1:4X3PPeoWEDCMvzDvGmTajSyYPcZM4+y8sCA/SsA3cjw=
17-
github.com/charmbracelet/lipgloss v0.13.0/go.mod h1:nw4zy0SBX/F/eAO1cWdcvy6qnkDUxr8Lw7dvFrAIbbY=
18-
github.com/charmbracelet/x/ansi v0.2.3 h1:VfFN0NUpcjBRd4DnKfRaIRo53KRgey/nhOoEqosGDEY=
19-
github.com/charmbracelet/x/ansi v0.2.3/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
14+
github.com/charmbracelet/bubbletea v1.2.4 h1:KN8aCViA0eps9SCOThb2/XPIlea3ANJLUkv3KnQRNCE=
15+
github.com/charmbracelet/bubbletea v1.2.4/go.mod h1:Qr6fVQw+wX7JkWWkVyXYk/ZUQ92a6XNekLXa3rR18MM=
16+
github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg=
17+
github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo=
18+
github.com/charmbracelet/x/ansi v0.5.2 h1:dEa1x2qdOZXD/6439s+wF7xjV+kZLu/iN00GuXXrU9E=
19+
github.com/charmbracelet/x/ansi v0.5.2/go.mod h1:KBUFw1la39nl0dLl10l5ORDAqGXaeurTQmwyyVKse/Q=
2020
github.com/charmbracelet/x/exp/golden v0.0.0-20240815200342-61de596daa2b h1:MnAMdlwSltxJyULnrYbkZpp4k58Co7Tah3ciKhSNo0Q=
2121
github.com/charmbracelet/x/exp/golden v0.0.0-20240815200342-61de596daa2b/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
22-
github.com/charmbracelet/x/term v0.2.0 h1:cNB9Ot9q8I711MyZ7myUR5HFWL/lc3OpU8jZ4hwm0x0=
23-
github.com/charmbracelet/x/term v0.2.0/go.mod h1:GVxgxAbjUrmpvIINHIQnJJKpMlHiZ4cktEQCN6GWyF0=
24-
github.com/dark0dave/infinity_file_formats v0.0.0-20241126215235-54369c958d54 h1:Xg0zDvTVi467a2Jebm9uHgAN5C/pK7FjucFIexa6dQM=
25-
github.com/dark0dave/infinity_file_formats v0.0.0-20241126215235-54369c958d54/go.mod h1:UMjDDPYYSRO+nW/ptNX6IZyXi/N3CRpZmZuiIgAKnEo=
22+
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
23+
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
24+
github.com/dark0dave/infinity_file_formats v0.0.0-20241205000111-f0cefbb38b7d h1:MQ8pfkxWfGJ6pGbNIxjyXe2Cc3bOr6WEkiPfGmytV3E=
25+
github.com/dark0dave/infinity_file_formats v0.0.0-20241205000111-f0cefbb38b7d/go.mod h1:UMjDDPYYSRO+nW/ptNX6IZyXi/N3CRpZmZuiIgAKnEo=
2626
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
2727
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
2828
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
@@ -63,20 +63,20 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
6363
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
6464
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
6565
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
66-
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
67-
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
66+
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
67+
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
6868
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
6969
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
7070
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
7171
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
7272
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
7373
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
74-
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
75-
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
74+
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
75+
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
7676
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
7777
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
78-
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
79-
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
78+
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
79+
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
8080
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
8181
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
8282
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=

readme.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,22 @@ This feature interacts with .tra files used in infinity engine mods. Currently w
2424

2525
![](./docs/discover.gif)
2626

27+
### View
28+
29+
This feature read infinity engine files and text files. Here is a list of infinity engine file extensions is supported:
30+
- .are
31+
- .bam
32+
- .cre
33+
- .dlg
34+
- .eff
35+
- .itm
36+
- .spl
37+
38+
#### Demo
39+
40+
![](./docs/view.gif)
41+
42+
2743
## Run
2844

2945
```sh

0 commit comments

Comments
 (0)