1
1
import { Stack } from "react-bootstrap" ;
2
2
import Button from "./Button" ;
3
3
4
- import { VersionEntry } from "./types" ;
4
+ import { VersionCacheData , VersionEntry } from "./types" ;
5
5
6
6
const BYTES_PER_GB = 1024 * 1024 * 1024 ;
7
7
@@ -10,16 +10,68 @@ const formatBytesToGB = (bytes?: number) => {
10
10
return undefined ;
11
11
}
12
12
return ( bytes / BYTES_PER_GB ) . toFixed ( 2 ) ;
13
- }
13
+ } ;
14
+
15
+ const getVersionData = (
16
+ version : VersionEntry ,
17
+ versionData : Record < string , VersionCacheData >
18
+ ) => {
19
+ return versionData [ version . uuid ] ;
20
+ } ;
21
+
22
+ const isDoneValidatingOffline = (
23
+ version : VersionEntry ,
24
+ versionData : Record < string , VersionCacheData >
25
+ ) => {
26
+ return getVersionData ( version , versionData ) ?. offlineDone ?? false ;
27
+ } ;
28
+
29
+ const isDoneValidatingGame = (
30
+ version : VersionEntry ,
31
+ versionData : Record < string , VersionCacheData >
32
+ ) => {
33
+ return getVersionData ( version , versionData ) ?. gameDone ?? false ;
34
+ } ;
35
+
36
+ const getValidatedOfflineSize = (
37
+ version : VersionEntry ,
38
+ versionData : Record < string , VersionCacheData >
39
+ ) => {
40
+ const data = getVersionData ( version , versionData ) ;
41
+ if ( ! data ) {
42
+ return undefined ;
43
+ }
44
+ return data . offlineSize ;
45
+ } ;
46
+
47
+ const getValidatedGameSize = (
48
+ version : VersionEntry ,
49
+ versionData : Record < string , VersionCacheData >
50
+ ) => {
51
+ const data = getVersionData ( version , versionData ) ;
52
+ if ( ! data ) {
53
+ return undefined ;
54
+ }
55
+ return data . gameSize ;
56
+ } ;
57
+
58
+ const getTotalOfflineSize = ( version : VersionEntry ) => {
59
+ if ( ! version . total_compressed_size || ! version . main_file_info ) {
60
+ return undefined ;
61
+ }
62
+ return version . total_compressed_size + version . main_file_info . size ;
63
+ } ;
14
64
15
65
export default function GameBuildsList ( {
16
66
versions,
67
+ versionData,
17
68
clearGameCache,
18
69
downloadOfflineCache,
19
70
repairOfflineCache,
20
71
deleteOfflineCache,
21
72
} : {
22
73
versions ?: VersionEntry [ ] ;
74
+ versionData : Record < string , VersionCacheData > ;
23
75
clearGameCache : ( uuid : string ) => void ;
24
76
downloadOfflineCache : ( uuid : string ) => void ;
25
77
repairOfflineCache : ( uuid : string ) => void ;
@@ -51,60 +103,90 @@ export default function GameBuildsList({
51
103
< td colSpan = { 3 } > No versions available</ td >
52
104
</ tr >
53
105
) : (
54
- versions . map ( ( version ) => (
55
- < tr key = { version . uuid } >
56
- < td className = "font-monospace align-middle" >
57
- { version . name ?? version . uuid }
58
- { version . description && (
59
- < >
60
- { " " }
61
- < i
62
- className = "fas fa-circle-info"
63
- data-bs-toggle = "tooltip"
64
- data-bs-placement = "top"
65
- title = { version . description }
66
- > </ i >
67
- </ >
68
- ) }
69
- </ td >
70
- < td className = "text-center" >
71
- < p > -- / { formatBytesToGB ( version . total_uncompressed_size ) ?? "?.??" } GB</ p >
72
- < Button
73
- enabled = { false }
74
- icon = "trash"
75
- onClick = { ( ) => clearGameCache ( version . uuid ) }
76
- variant = "danger"
77
- tooltip = "Clear game cache"
78
- />
79
- </ td >
80
- < td className = "text-center" >
81
- < p > -- / { formatBytesToGB ( version . total_compressed_size ) ?? "?.??" } GB</ p >
82
- < Button
83
- enabled = { true }
84
- icon = "download"
85
- onClick = { ( ) => downloadOfflineCache ( version . uuid ) }
86
- variant = "success"
87
- tooltip = "Download offline cache"
88
- />
89
- { " " }
90
- < Button
91
- enabled = { false }
92
- icon = "screwdriver-wrench"
93
- onClick = { ( ) => repairOfflineCache ( version . uuid ) }
94
- variant = "warning"
95
- tooltip = "Repair offline cache"
96
- />
97
- { " " }
98
- < Button
99
- enabled = { false }
100
- icon = "trash"
101
- onClick = { ( ) => deleteOfflineCache ( version . uuid ) }
102
- variant = "danger"
103
- tooltip = "Delete offline cache"
104
- />
105
- </ td >
106
- </ tr >
107
- ) )
106
+ versions . map (
107
+ ( version ) =>
108
+ ! version . hidden && (
109
+ < tr key = { version . uuid } >
110
+ < td className = "font-monospace align-middle" >
111
+ { version . name ?? version . uuid }
112
+ { version . description && (
113
+ < >
114
+ { " " }
115
+ < i
116
+ className = "fas fa-circle-info"
117
+ data-bs-toggle = "tooltip"
118
+ data-bs-placement = "top"
119
+ title = { version . description }
120
+ > </ i >
121
+ </ >
122
+ ) }
123
+ </ td >
124
+ < td className = "text-center" >
125
+ < p >
126
+ { formatBytesToGB (
127
+ getValidatedGameSize ( version , versionData )
128
+ ) ?? "--" } { " " }
129
+ /{ " " }
130
+ { formatBytesToGB ( version . total_uncompressed_size ) ??
131
+ "?.??" } { " " }
132
+ GB
133
+ </ p >
134
+ < Button
135
+ loading = { ! isDoneValidatingGame ( version , versionData ) }
136
+ enabled = { ! ! getValidatedGameSize ( version , versionData ) }
137
+ icon = "trash"
138
+ onClick = { ( ) => clearGameCache ( version . uuid ) }
139
+ variant = "danger"
140
+ tooltip = "Clear game cache"
141
+ />
142
+ </ td >
143
+ < td className = "text-center" >
144
+ < p >
145
+ { formatBytesToGB (
146
+ getValidatedOfflineSize ( version , versionData )
147
+ ) ?? "--" } { " " }
148
+ /{ " " }
149
+ { formatBytesToGB ( getTotalOfflineSize ( version ) ) ??
150
+ "?.??" } { " " }
151
+ GB
152
+ </ p >
153
+ < Button
154
+ loading = { ! isDoneValidatingOffline ( version , versionData ) }
155
+ enabled = {
156
+ ! getValidatedOfflineSize ( version , versionData ) &&
157
+ ! ! version . main_file_info &&
158
+ ! ! version . total_compressed_size
159
+ }
160
+ icon = "download"
161
+ onClick = { ( ) => downloadOfflineCache ( version . uuid ) }
162
+ variant = "success"
163
+ tooltip = "Download offline cache"
164
+ /> { " " }
165
+ < Button
166
+ loading = { ! isDoneValidatingOffline ( version , versionData ) }
167
+ enabled = {
168
+ ! ! getValidatedOfflineSize ( version , versionData ) &&
169
+ getVersionData ( version , versionData ) ?. offlineCorrupted
170
+ }
171
+ icon = "screwdriver-wrench"
172
+ onClick = { ( ) => repairOfflineCache ( version . uuid ) }
173
+ variant = "warning"
174
+ tooltip = "Repair offline cache"
175
+ /> { " " }
176
+ < Button
177
+ loading = { ! isDoneValidatingOffline ( version , versionData ) }
178
+ enabled = {
179
+ ! ! getValidatedOfflineSize ( version , versionData )
180
+ }
181
+ icon = "trash"
182
+ onClick = { ( ) => deleteOfflineCache ( version . uuid ) }
183
+ variant = "danger"
184
+ tooltip = "Delete offline cache"
185
+ />
186
+ </ td >
187
+ </ tr >
188
+ )
189
+ )
108
190
) }
109
191
</ tbody >
110
192
</ table >
0 commit comments