Futilities/human/lib/cFolderator: Difference between revisions

From Woozle Writes Code
< Futilities‎ | human‎ | lib
Jump to navigation Jump to search
(flow revised slightly to avoid the fact that cPathRoot has no name)
 
Line 5: Line 5:
This initiates a recursive loop guided in part by the app's Matcher object, which is an app-defined {{l/same|caMatch}} podling.
This initiates a recursive loop guided in part by the app's Matcher object, which is an app-defined {{l/same|caMatch}} podling.
===OnWantedFolder===
===OnWantedFolder===
<syntaxhighlight lang=php inline>OnWantedFolder(caPathPiece $op)</syntaxhighlight> first asks the Matcher to <code>HandleFolder($op)</code>. After that, it gets a directory listing for <code>$op</code>, puts that list in an array, and then for each entry in the array sets that entry as the last entry in <code>$opCurr</code> and passes it to '''<code>OnPath($opCurr)</code>'''.
<syntaxhighlight lang=php inline>OnWantedFolder(caPathPiece $op)</syntaxhighlight> gets a directory listing for <code>$op</code>, puts that list in an array, and then for each entry in the array sets that entry as the last piece in <code>$opCurr</code> and passes it to '''<code>OnPath($opCurr)</code>'''.


===OnPath===
===OnPath===
Line 21: Line 21:
<syntaxhighlight lang=php inline>if ($this->GetMatcher()->IsFolderWanted($op)) { $this->OnWantedFolder($op); }</syntaxhighlight>
<syntaxhighlight lang=php inline>if ($this->GetMatcher()->IsFolderWanted($op)) { $this->OnWantedFolder($op); }</syntaxhighlight>


If the Matcher declares that the folder passes muster, this starts a new iteration by passing control back to '''<code>OnWantedFolder()</code>'''.
If the Matcher declares that the folder passes muster, then:
* ask the Matcher to <code>HandleFolder($op)</code>
* start a new iteration by passing control back to '''<code>OnWantedFolder()</code>'''.
===OnFile===
===OnFile===
<code>OnFile(caPathNamed $op)</code> asks the Matcher if the file is wanted:
<code>OnFile(caPathNamed $op)</code> asks the Matcher if the file is wanted:

Latest revision as of 13:17, 28 September 2022

Human Futilities: cFolderator class

Flow

The flow typically starts with StartSpider(), which retrieves the source-path from Options (GetSourcePath()) and then passes control to OnWantedFolder. (We assume that the folder in the source-path is wanted, even if it fails inclusion criteria that are applied to its sub-folders.)

This initiates a recursive loop guided in part by the app's Matcher object, which is an app-defined caMatch podling.

OnWantedFolder

OnWantedFolder(caPathPiece $op) gets a directory listing for $op, puts that list in an array, and then for each entry in the array sets that entry as the last piece in $opCurr and passes it to OnPath($opCurr).

OnPath

OnPath(caPathPiece $op) checks the filespec in $op to see whether it's a file or a folder (it is assumed to exist). In simplified form:

if ($op->IsFolder()) {
  $this->OnFolder($op);
} else {
  $this->OnFile($op);
}

...in other words: control is passed to OnFile() or OnFolder() depending on whether the filesystem entry (node) pointed to by the filespec is a file or a folder.

OnFolder

OnFolder(caPathNamed $op) asks the Matcher if the folder is wanted: if ($this->GetMatcher()->IsFolderWanted($op)) { $this->OnWantedFolder($op); }

If the Matcher declares that the folder passes muster, then:

  • ask the Matcher to HandleFolder($op)
  • start a new iteration by passing control back to OnWantedFolder().

OnFile

OnFile(caPathNamed $op) asks the Matcher if the file is wanted: if ($this->GetMatcher()->IsFileWanted($op)) { $this->GetMatcher()->HandleFile($op); }

Note the slight difference between this and OnFolder(): because we don't need to recurse into files (at least until we support entering .tar/.zip archives), we can just pass control over to the Matcher to decide if the file is wanted and to handle it if it is.

Functions

actions

  • StartSpider(caMatch $om)
    • formerly DoSearch() (kept for now as an alias)

events

state

  • protected function ResetCount() { $this->nFi = 0; $this->nFo = 0; }
  • protected function IncFiles() { $this->nFi++; }
  • protected function IncFolders() { $this->nFo++; }
  • protected function SummarizeCount() : string { ... }: returns a string summarizing file & folder counts
  • protected function ShortCount() : string { ... }: like SummarizeCount(), but shorter string ("fo:#/fi:#")

object

This pair sets and returns a Matcher object:

  • protected function SetMatcher(caMatch $om) { $this->om = $om; }
    • This is only called from DoSearch().
  • protected function GetMatcher() : caMatch { return $this->om; }