March 01, 2021, 10:52:30 PM

Author Topic: [bmx] Directory Factory by JoshK [ 1+ years ago ]  (Read 643 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bmx] Directory Factory by JoshK [ 1+ years ago ]
« on: June 29, 2017, 12:28:39 AM »
Title : Directory Factory
Author : JoshK
Posted : 1+ years ago

Description : This is an object-oriented replacement for the standard ReadDir() and NextFile() commands.  An HTTP directory factory will try to get all the files in a web folder.  The folder must not have an index.htm file.

Code :
Code: BlitzMax
  1. Strict
  2.  
  3. Import brl.filesystem
  4. Import brl.HTTPStream
  5. Import brl.linkedlist
  6.  
  7. Private
  8. Global directory_factories:TDirectoryFactory
  9. Public
  10.  
  11. Function ReadDirectory:TList(path$)
  12.         Local factory:TDirectoryFactory=directory_factories
  13.         Local proto$
  14.         Local i=path.Find( "::",0 )
  15.         If i>-1
  16.                 proto$=path[..i].ToLower()
  17.                 path$=path[i+2..]
  18.         EndIf
  19.         While factory
  20.                 Local list:TList=factory.Read(proto,path)
  21.                 If list Return list
  22.                 factory=factory._succ
  23.         Wend
  24. EndFunction
  25.  
  26. Type TDirectoryFactory
  27.         Field _succ:TDirectoryFactory
  28.        
  29.         Method New()
  30.                 _succ=directory_factories
  31.                 directory_factories=Self
  32.         End Method
  33.        
  34.         Function Read:TList(proto$,path$)
  35.                 If proto<>"" Return
  36.                 path=RealPath(path)
  37.                 Local list:TList
  38.                 Local d=ReadDir(path)
  39.                 If Not d Return
  40.                 list=New TList
  41.                 Local file$
  42.                 Repeat
  43.                         file=NextFile(d)
  44.                         If Not file Exit
  45.                         list.addfirst(file)
  46.                 Forever
  47.                 CloseDir d
  48.                 Return list
  49.         EndFunction
  50.        
  51. EndType
  52.  
  53. New TDirectoryFactory
  54.  
  55. Type THTTPDirectoryFactory Extends TDirectoryFactory
  56.        
  57.         Function Read:TList(proto$,path$)
  58.                 If proto<>"http" Return
  59.                 Local stream:TStream=ReadStream(proto+"::"+path)
  60.                 If Not stream Return
  61.                 Local s$
  62.                 While Not stream.Eof()
  63.                         s:+stream.ReadLine()+"~n"
  64.                 Wend
  65.                 Return ExtractHTMLLinks(s)
  66.         EndFunction
  67.        
  68.         Function ExtractHTMLLinks:TList(html$)
  69.                 Local list:TList=New TList
  70.                 html=html.tolower()
  71.                 Local sarr$[]
  72.                 sarr=html.split("href=")
  73.                 For Local n=1 To sarr.length-1
  74.                         Local sarr2$[]
  75.                         sarr[n]=sarr[n].Trim()
  76.                         sarr2=sarr[n].split("~q")
  77.                         If sarr2.length>1
  78.                                 If Not sarr2[1].contains("?")
  79.                                         list.addfirst(sarr2[1])
  80.                                         'Print sarr2[1]
  81.                                 EndIf
  82.                         EndIf
  83.                 Next
  84.                 Return list
  85.         EndFunction
  86.        
  87. EndType
  88.  
  89. New THTTPDirectoryFactory


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal