###################################################
# Simple File Listing Example using Mystic Python #
###################################################

# List files in the user's current file base

from mystic_bbs	import *

# filelist flags

file_offline = int("01")
file_invalid = int("02")
file_deleted = int("04")
file_failed  = int("08")
file_free    = int("10")
file_hatched = int("20")

# Load the current user and then load their current file base
# but fail if they have not selected a file base

user  = getuser(0)
fbase = getfbaseid(user["fbase"])

if fbase is None:
	writeln ("|CRYou have not selected a file base yet!|CR|CR|PA")
	quit()

# Open the file list then check to make sure its open before reading
# data from it

flist = fl_open(fbase["filename"]);

if flist is None:
	writeln("Cannot open file listing. Press a key|PN")
	quit()

done = False

# Seek to the first file in the list and loop while a file is found calling
# next after each file so the next one will be loaded.  Seek should always be
# called before cycling through the list

fl_seek(flist, 0, True)

while fl_found(flist) and not done and not shutdown():

	# Load the file information into a dictionary and then get the file
	# description
	
	fileinfo = fl_getfile(flist)
	filedesc = fl_getdesc(flist)

	# Show the file

	writeln("|CL|14File #" + str(fileinfo["number"]) + " of " + str(fileinfo["total"]))
	writeln("")
	writeln("|09File: |11" + fileinfo["filename"])
	writeln("|09Date: " + datestr(dated2u(fileinfo["date"]), "NNN DD YYYY HH:II:SS"))
	writeln("Size: " + str(fileinfo["size"]))
	writeln("DLs : " + str(fileinfo["dls"]))
	writeln("ULer: " + fileinfo["ulname"])

	flags = ""
	
	if fileinfo["flags"] & file_offline:
		flags = flags + "OFFLINE "
		
	if fileinfo["flags"] & file_invalid:
		flags = flags + "INVALID "
		
	if fileinfo["flags"] & file_deleted:
		flags = flags + "DELETED "
		
	if fileinfo["flags"] & file_failed:
		flags = flags + "FAILED "
		
	if fileinfo["flags"] & file_free:
		flags = flags + "FREE "
		
	if fileinfo["flags"] & file_hatched:
		flags = flags + "HATCHED "
		
	if flags == "":
		flags = "NONE"
	
	writeln("Flag: |13" + flags)
	writeln("")
	writeln("|14Description (" + str(fileinfo["lines"]) + " lines):")
	writeln("|03")
	
	# only print up to the first 10 lines so we can fit it on the screen
	
	for line in range(min(fileinfo["lines"], 10)):
		writeln(filedesc[line])
		
	writeln("")
	write("|16|09File List: (|11A|09)gain, (|11P|09)revious, (|11ENTER|09) Next, (|11Q|09) to Quit: |14")
	
	ch = onekey(chr(13) + 'APQ', True);

	if ch == 'A':
		# do nothing here so it redisplays the same file
		pass

	elif ch == 'P':
		fl_prev(flist)

	elif ch == 'Q':
		done = True
		break	
	else:
		fl_next(flist);	

# Close the file list and report that we're done

fl_close(flist)

writeln("|CR|12Program complete: Press a key|PN");