mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
This requires a 508 beta version to use. If Travis fails this he's a bitch Exceptions will generate a stack trace, which is way easier to see and more helpful in actually solving this kind of crap. Also logs all the arguments, src, line, and file automatically. Removed any dubiously helpful information in the exception names so the runtime condenser won't see each one as a different runtime. If the information is critical to solve these bugs (camera one maybe?), then I'll just make these warnings. Thrown exceptions crash the currently running proc. Yes that means there's useless returns in a bunch of these, sue me. spawn()'s are to let the proc continue. Almost all of these are difficult to trigger, but I did test playsound. And frankly even if they do cause bugs by crashing procs, big whoop
60 lines
1.8 KiB
Plaintext
60 lines
1.8 KiB
Plaintext
//checks if a file exists and contains text
|
|
//returns text as a string if these conditions are met
|
|
/proc/return_file_text(filename)
|
|
if(fexists(filename) == 0)
|
|
throw EXCEPTION("return_file_text(): File not found")
|
|
return
|
|
|
|
var/text = file2text(filename)
|
|
if(!text)
|
|
throw EXCEPTION("return_file_text(): File empty")
|
|
return
|
|
|
|
return text
|
|
|
|
//Sends resource files to client cache
|
|
/client/proc/getFiles()
|
|
for(var/file in args)
|
|
src << browse_rsc(file)
|
|
|
|
/client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list(".txt",".log",".htm"))
|
|
var/path = root
|
|
|
|
for(var/i=0, i<max_iterations, i++)
|
|
var/list/choices = flist(path)
|
|
if(path != root)
|
|
choices.Insert(1,"/")
|
|
|
|
var/choice = input(src,"Choose a file to access:","Download",null) as null|anything in choices
|
|
switch(choice)
|
|
if(null)
|
|
return
|
|
if("/")
|
|
path = root
|
|
continue
|
|
path += choice
|
|
|
|
if(copytext(path,-1,0) != "/") //didn't choose a directory, no need to iterate again
|
|
break
|
|
|
|
var/extension = copytext(path,-4,0)
|
|
if( !fexists(path) || !(extension in valid_extensions) )
|
|
src << "<font color='red'>Error: browse_files(): File not found/Invalid file([path]).</font>"
|
|
return
|
|
|
|
return path
|
|
|
|
#define FTPDELAY 200 //200 tick delay to discourage spam
|
|
/* This proc is a failsafe to prevent spamming of file requests.
|
|
It is just a timer that only permits a download every [FTPDELAY] ticks.
|
|
This can be changed by modifying FTPDELAY's value above.
|
|
|
|
PLEASE USE RESPONSIBLY, Some log files canr each sizes of 4MB! */
|
|
/client/proc/file_spam_check()
|
|
var/time_to_wait = fileaccess_timer - world.time
|
|
if(time_to_wait > 0)
|
|
src << "<font color='red'>Error: file_spam_check(): Spam. Please wait [round(time_to_wait/10)] seconds.</font>"
|
|
return 1
|
|
fileaccess_timer = world.time + FTPDELAY
|
|
return 0
|
|
#undef FTPDELAY |