mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-20 15:12:19 +00:00
* Initial * Cleared duplicates * More work, get rid of log_error * more * log_debug() to macro LOG_DEBUG * More work * More * Guh * Maybe better? * More work * gah * Dear lord * *inserts swears here* * gdi * More work * More * dear lord * fsdfsdafs * rsdaf * sadfasf * sdafsad * fgsd * small fuckup fix * jfsd * sdafasf * gdi * sdfa * sfdafgds * sdafasdvf * sdfasdfg * sdfsga * asdf * dsfasfsagf * ihibhbjh * fsadf * adfas * sdafsad * sdfasd * fsda * vhb * asf * for arrow * removed source file-line logging, added header for tgui
92 lines
2.7 KiB
Plaintext
92 lines
2.7 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)
|
|
log_asset("File not found ([filename])")
|
|
return
|
|
|
|
var/text = file2text(filename)
|
|
if(!text)
|
|
log_asset("File empty ([filename])")
|
|
return
|
|
|
|
return text
|
|
|
|
/proc/get_subfolders(var/root)
|
|
var/list/folders = list()
|
|
var/list/contents = flist(root)
|
|
|
|
for(var/file in contents)
|
|
//Check if the filename ends with / to see if its a folder
|
|
if(copytext(file,-1,0) != "/")
|
|
continue
|
|
folders.Add("[root][file]")
|
|
|
|
return folders
|
|
|
|
//Sends resource files to client cache
|
|
/client/proc/getFiles()
|
|
for(var/file in args)
|
|
send_rsc(src, file, null)
|
|
|
|
/client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list(".txt",".log",".htm", ".json"))
|
|
var/path = root
|
|
|
|
for(var/i=0, i<max_iterations, i++)
|
|
var/list/choices = sortList(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/valid_extension = FALSE
|
|
for(var/e in valid_extensions)
|
|
if(findtext(path, e, -(length(e))))
|
|
valid_extension = TRUE
|
|
|
|
if( !fexists(path) || !valid_extension )
|
|
to_chat(src, "<span class='warning'>Error: browse_files(): File not found/Invalid file([path]).</span>")
|
|
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)
|
|
to_chat(src, "<span class='warning'>Error: file_spam_check(): Spam. Please wait [round(time_to_wait/10)] seconds.</span>")
|
|
return 1
|
|
fileaccess_timer = world.time + FTPDELAY
|
|
return 0
|
|
#undef FTPDELAY
|
|
|
|
/// Returns the md5 of a file at a given path.
|
|
/proc/md5filepath(path)
|
|
. = md5(file(path))
|
|
|
|
/// Save file as an external file then md5 it.
|
|
/// Used because md5ing files stored in the rsc sometimes gives incorrect md5 results.
|
|
/proc/md5asfile(file)
|
|
var/static/notch = 0
|
|
// its importaint this code can handle md5filepath sleeping instead of hard blocking, if it's converted to use rust_g.
|
|
var/filename = "tmp/md5asfile.[world.realtime].[world.timeofday].[world.time].[world.tick_usage].[notch]"
|
|
notch = Wrap(notch+1, 0, 2**15)
|
|
fcopy(file, filename)
|
|
. = md5filepath(filename)
|
|
fdel(filename)
|