@@ -177,7 +177,11 @@ public void Start()
177177 string gameDataDir = CoreService . coreVars . AndroidAppLocation + package ;
178178 try
179179 {
180+ text = "Copying APK. Please wait until it has finished. This can take up to 2 minutes" ;
181+ code = 202 ;
180182 File . Copy ( apkDir , backupDir + "app.apk" ) ;
183+ text = "Copying App Data. Please wait until it has finished. This can take up to 2 minutes" ;
184+ code = 202 ;
181185 FileManager . DirectoryCopy ( gameDataDir , backupDir + package , true ) ;
182186 } catch ( Exception e )
183187 {
@@ -194,6 +198,29 @@ public void Start()
194198 serverRequest . SendString ( text , "text/plain" , code ) ;
195199 return true ;
196200 } ) ) ;
201+ server . AddRoute ( "DELETE" , "/backup" , new Func < ServerRequest , bool > ( serverRequest =>
202+ {
203+ if ( serverRequest . queryString . Get ( "package" ) == null )
204+ {
205+ serverRequest . SendString ( "package key needed" , "text/plain" , 400 ) ;
206+ return true ;
207+ }
208+ if ( serverRequest . queryString . Get ( "backupname" ) == null )
209+ {
210+ serverRequest . SendString ( "backupname key needed" , "text/plain" , 400 ) ;
211+ return true ;
212+ }
213+ string package = serverRequest . queryString . Get ( "package" ) ;
214+ string backupname = serverRequest . queryString . Get ( "backupname" ) ;
215+ string backupDir = CoreService . coreVars . QAVSBackupDir + package + "/" + backupname + "/" ;
216+ if ( ! Directory . Exists ( backupDir ) )
217+ {
218+ serverRequest . SendString ( "The Backup you want to delete doesn't exist." , "text/plain" , 400 ) ;
219+ }
220+ Directory . Delete ( backupDir , true ) ;
221+ serverRequest . SendString ( "Deleted " + backupname + " of " + package ) ;
222+ return true ;
223+ } ) ) ;
197224 server . AddRoute ( "POST" , "/restoreapp" , new Func < ServerRequest , bool > ( serverRequest =>
198225 {
199226 if ( serverRequest . queryString . Get ( "package" ) == null )
@@ -224,6 +251,11 @@ public void Start()
224251 serverRequest . SendString ( "This backup doesn't exist" , "text/plain" , 400 ) ;
225252 return true ;
226253 }
254+ if ( ! File . Exists ( backupDir + "app.apk" ) )
255+ {
256+ serverRequest . SendString ( "Critical: APK doesn't exist in Backup. This Backup is useless. Please restart the app and choose a different one." , "text/plain" , 500 ) ;
257+ return true ;
258+ }
227259 AndroidService . InitiateInstallApk ( backupDir + "app.apk" ) ;
228260 serverRequest . SendString ( "Started apk install" , "text/plain" , 200 ) ;
229261 return true ;
@@ -264,6 +296,11 @@ public void Start()
264296 return true ;
265297 }
266298 string gameDataDir = CoreService . coreVars . AndroidAppLocation + package ;
299+ if ( ! Directory . Exists ( backupDir + package ) )
300+ {
301+ serverRequest . SendString ( "This backup doesn't contain a game data backup. Please skip this step" , "text/plain" , 400 ) ;
302+ return true ;
303+ }
267304 try
268305 {
269306 FileManager . DirectoryCopy ( backupDir + package , gameDataDir , true ) ;
@@ -276,6 +313,11 @@ public void Start()
276313 serverRequest . SendString ( "Game data restored" , "text/plain" , 200 ) ;
277314 return true ;
278315 } ) ) ;
316+ server . AddRoute ( "GET" , "/allbackups" , new Func < ServerRequest , bool > ( serverRequest =>
317+ {
318+ serverRequest . SendString ( ByteSizeToString ( FileManager . GetDirSize ( CoreService . coreVars . QAVSBackupDir ) ) ) ;
319+ return true ;
320+ } ) ) ;
279321 server . AddRouteFile ( "/facts.png" , "facts.png" ) ;
280322 server . StartServer ( 50001 ) ;
281323 Thread . Sleep ( 1000 ) ;
@@ -288,12 +330,29 @@ public BackupList GetBackups(string package)
288330 BackupList backups = new BackupList ( ) ;
289331 foreach ( string d in Directory . GetDirectories ( backupDir ) )
290332 {
291- backups . backups . Add ( new AppBackup ( Path . GetFileName ( d ) , Directory . Exists ( d + "/GameData" ) , d ) ) ;
333+ long size = FileManager . GetDirSize ( d ) ;
334+ backups . backupsSize += size ;
335+ backups . backups . Add ( new AppBackup ( Path . GetFileName ( d ) , Directory . Exists ( d + "/GameData" ) , d , size , ByteSizeToString ( size ) ) ) ;
292336 }
293337 if ( File . Exists ( backupDir + "lastRestored.txt" ) ) backups . lastRestored = File . ReadAllText ( backupDir + "lastRestored.txt" ) ;
338+ backups . backupsSizeString = ByteSizeToString ( backups . backupsSize ) ;
294339 return backups ;
295340 }
296341
342+ public string ByteSizeToString ( long input , int decimals = 2 )
343+ {
344+ // TB
345+ if ( input > 1099511627776 ) return String . Format ( "{0:0." + new string ( '#' , decimals ) + "}" , input / 1099511627776.0 ) + " TB" ;
346+ // GB
347+ else if ( input > 1073741824 ) return String . Format ( "{0:0." + new string ( '#' , decimals ) + "}" , input / 1073741824.0 ) + " GB" ;
348+ // MB
349+ else if ( input > 1048576 ) return String . Format ( "{0:0." + new string ( '#' , decimals ) + "}" , input / 1048576.0 ) + " MB" ;
350+ // KB
351+ else if ( input > 1024 ) return String . Format ( "{0:0." + new string ( '#' , decimals ) + "}" , input / 1024.0 ) + " KB" ;
352+ // Bytes
353+ else return input + " Bytes" ;
354+ }
355+
297356 public bool IsNameFileNameSafe ( string name )
298357 {
299358 foreach ( char c in ReservedChars )
@@ -307,7 +366,6 @@ public List<string> GetIPs()
307366 {
308367 return server . ips ;
309368 }
310-
311369 public static byte [ ] GetAssetBytes ( string assetName )
312370 {
313371 MemoryStream ms = new MemoryStream ( ) ;
@@ -331,10 +389,10 @@ public static List<string> GetAllFiles(string folder)
331389 List < string > files = new List < string > ( ) ;
332390 if ( ! folder . EndsWith ( "/" ) ) folder += "/" ;
333391 if ( folder == "/" ) folder = "" ;
334- foreach ( string s in CoreService . assetManager . List ( folder ) )
392+ foreach ( string s in CoreService . assetManager . List ( folder ) )
335393 {
336394 files . Add ( folder + s ) ;
337- foreach ( string ss in GetAllFiles ( folder + s ) ) files . Add ( ss ) ;
395+ foreach ( string ss in GetAllFiles ( folder + s ) ) files . Add ( ss ) ;
338396 }
339397 return files ;
340398 }
@@ -343,5 +401,6 @@ public static List<string> GetAssetFolderFileList(string assetFolder)
343401 {
344402 return new List < string > ( CoreService . assetManager . List ( assetFolder ) ) ;
345403 }
404+
346405 }
347406}
0 commit comments