-alias(NGLfserv::classes::trigger)\r
-{\r
- class(NGLfserv::classes::trigger,object)\r
- {\r
- function constructor()\r
- {\r
- // creo la lista in cui verranno memorizzati i nodi "reali" cioè i vari punti di ingresso sul disco\r
- $$->%extraDirs=$new(list,$this)\r
- $$->%index=0\r
- objects.connect $this triggerbusy %G_fserverbusyhandler fserverbusyevent\r
- objects.connect $this triggerready %G_fserverbusyhandler fserverNotBusyEvent\r
- objects.connect $$ scancompleted $$ checkextradirs\r
- \r
- }\r
- function rootPath()\r
- {\r
- return $$->%rootPath\r
- } \r
- \r
- function setNode()\r
- {\r
- // nodo su cui ci troviamo attualmente\r
- $$->%node=$0\r
- }\r
- function node()\r
- {\r
- return $$->%node\r
- }\r
- function setName()\r
- {\r
- // nome del trigger\r
- $$->%triggerName=$0\r
- }\r
- function triggerName()\r
- {\r
- return $$->%triggerName\r
- }\r
- \r
- \r
- function addChannel()\r
- {\r
- // dizionario in cui memorizziamo i canali in cui è attivo il trigger\r
- $$->%activechannels{$0}=$1\r
- }\r
- function activeChannels()\r
- {\r
- return $$->%activechannels{}\r
- }\r
- function removeChannel()\r
- {\r
- $$->%activechannels{$0}=\r
- }\r
- function getChannel()\r
- {\r
- return $$->%activechannels{$0}\r
- }\r
- function channels()\r
- {\r
- return $length($$->%activechannels{})\r
- }\r
- function channelExists()\r
- {\r
- if ($$->%activechannels{$0}) return $true\r
- else return $false\r
- }\r
- setRealTriggerPath()\r
- {\r
- $$->%realTriggerPath=$0\r
- }\r
- function getRealTriggerPath()\r
- {\r
- \r
- return $$->%realTriggerPath\r
- }\r
- function removeNode(virtual node)\r
- {\r
- if ($0->%extraDirPath) \r
- $$->$removeExtraDir($0)\r
- delete $0\r
- }\r
- function removeExtraDir(node)\r
- {\r
- for(%i=0;%i<$length($$->%extraDirs->$count);%i++;){\r
- if ($$->%extraDirs->$item(%i)->%node==$0) break\r
- }\r
- delete $$->%extraDirs->$item(%i)\r
- $$->%extraDirs->$remove(%i)\r
- }\r
- function extraDirsCount()\r
- {\r
- return $$->%extraDirs->$count()\r
- }\r
- function extraDir(index)\r
- {\r
- return $$->%extraDirs->$item($0)\r
- }\r
- // aggiunge il nodo "root" al trigger: a differenza delle successive dirs che si potranno aggiungere, questa verrà aggiungta \r
- // eliminando tutta la parte del percorso, perdendo quindi anche il nome della cartella di origine.\r
- // Esempio: la dir c:\\mp3\ sparirà e nel trigger ci saranno i files e dirs figli di essa.\r
- function addFirstNode()\r
- {\r
- %rootpath = $str.replace($0,"/","\\")\r
- if($str.right(%rootpath, 1) != "/") %rootpath .= "/" \r
- $$->%firstnode=$$->$addNode("",$this,%rootpath)\r
- $$->%realTriggerPath = $str.replace($0,"/","\\")\r
- $$->%rootnode=$$->%firstnode\r
- $$->%triggerName=$1\r
- $$->%rootpath=%rootpath\r
- $$->%time=$hptimestamp()\r
- $$->%time_available=0.300\r
- $$->%speedmeter=0\r
- $$->%count=0\r
- $$->$scanSubFolders(%rootpath,$$->%firstnode)\r
- $$->$startTimer(1000)\r
- \r
- }\r
- function setFirstEmptyNode()\r
- {\r
- // flag attivato quando al load del trigger, risulta che il nodo principale non esiste sul disco\r
- $$->%firstNodeEmpty=$true\r
- }\r
- \r
- // funzione che aggiunge un nodo al nostro albero di directories; come parametri vengono richiesti: nome della cartella, nodo padre, percorso iniziale sul disco\r
- function addNode()\r
- {\r
- %node=$new(object,$1)\r
- %node->%index=$$->%index\r
- $$->%index++\r
- %node->%text=$0\r
- return %node\r
- }\r
- function appendExtraDir()\r
- {\r
- %node=$new(object,$this)\r
- %node->%extraDirPath=$0/\r
- %node->%pathFromTrigger=$1\r
- if ($2) {\r
- %node->%node=$2\r
- $2->%extraDirPath=$0/\r
- }\r
- $$->%extraDirs->$append(%node)\r
- }\r
- function firstNode()\r
- {\r
- return $$->%firstnode\r
- }\r
- \r
- // aggiunge una dir a partire da un nodo\r
- function addFolder(complete path, parent node)\r
- {\r
- // viene reso il path in standard unix\r
- %rootpath = $str.replace($0,"/","\\")\r
- // fixato con la / \r
- if($str.right(%rootpath, 1) != "/") %rootpath .= "/"\r
- // estraiamo il nome della dir \r
- %dir_name = $file.extractfilename($str.left(%rootpath,$($str.len(%rootpath)-1)))\r
- // e verifichiamo se già esiste nel nodo parent\r
- if ($$->$checkFolderExists(%dir_name,$1)) {\r
- debug %dir_name già esiste\r
- return $false\r
- }\r
- // aggiungiamo il nodo al parent\r
- %node=$$->$addNode(%dir_name,$1)\r
- debug parent $1->%text e rooth %rootpath\r
- // e memorizziamo lil nodo e la path per utilizzarli come riferimento nello scan in background\r
- $$->%rootnode=%node\r
- $$->%rootpath=%rootpath\r
- //\r
- $$->%time=$hptimestamp()\r
- $$->%time_available=0.300\r
- $$->%speedmeter=0\r
- if ($$->%intimer) return %node\r
- $$->%count=0\r
- $$->%oldcount=0\r
- $$->$emit(triggerBusy)\r
- $$->%noupdate=$true\r
- $$->%addnode=$1\r
- $$->$scanSubFolders(%rootpath,%node)\r
- $$->$startTimer(1000)\r
- return %node\r
- }\r
- function update()\r
- {\r
- $$->$updateStart($true)\r
- }\r
- function updateStart()\r
- {\r
- $$->%update=$true\r
- $$->%extraDirs->$moveFirst()\r
- $$->%rootpath=$$->%realTriggerPath\r
- if ($0){ \r
- $$->%nsi=$$->$getNotSharedInfo()\r
- delete $$->$firstNode()\r
- }\r
- NGLfserv::corefunctions::ngldebug "start background HD scanning" \r
- \r
- if ($$->%firstNodeEmpty){\r
- NGLfserv::corefunctions::ngldebug first node is empty\r
- NGLfserv::corefunctions::ngldebug add fake dir\r
- $$->%firstnode=$$->$addNode("",$this,"")\r
- $$->%firstNodeEmpty=$true\r
- //$$->%rootnode=$$->$addFolder($$->%rootpath,$$->%firstnode)\r
- }\r
- else{ \r
- $$->%firstnode=$$->$addNode("",$this) \r
- $$->%rootnode=$$->%firstnode\r
- NGLfserv::corefunctions::ngldebug add main node with path $$->%rootpath\r
- $$->%time=$hptimestamp()\r
- $$->%count=0\r
- $$->%oldcount=0\r
- $$->%time_available=0.300 \r
- $$->$scanSubFolders($$->%rootpath,$$->%rootnode)\r
- $$->%speedmeter=0\r
- $$->$startTimer(1000)\r
- } \r
- }\r
- function checkextradirs()\r
- {\r
- if (!$$->%update) {\r
- $$->$emit(updated,$$->%addnode)\r
- $$->%addnode=\r
- return\r
- } \r
- if (!$$->%extraDirs->$current()) {\r
- $$->%update=$false\r
- NGLfserv::corefunctions::ngldebug NO EXTRA DIRS: scan trigger $k(4,0)$$->%triggerName$k completed :=)\r
- if ($objects.exists($$->%nsi)){\r
- $$->$createDirFilesNotShared($$->%nsi)\r
- delete $$->%nsi\r
- $$->%nsi=\r
- }\r
- $$->%changed=$true\r
- $$->$emit(triggerReady)\r
- $$->$emit(updated,$$->%firstnode) \r
- }\r
- else{\r
- while (!$file.exists($$->%extraDirs->$current()->%extraDirPath)){\r
- $$->%extraDirs->$moveNext()\r
- if (!$$->%extraDirs->$current()){\r
- $$->%update=$false\r
- $$->$emit(updated,$$->%firstnode) \r
- return\r
- } \r
- }\r
- %rootpath=$$->%extraDirs->$current()->%extraDirPath\r
- NGLfserv::corefunctions::ngldebug adding extra dir with path Fromtrigger $$->%extraDirs->$current()->%pathFromTrigger\r
- NGLfserv::corefunctions::ngldebug extra dir path $$->%extraDirs->$current()->%extraDirPath\r
- if($$->%firstNodeEmpty) \r
- %parent_node=$$->%firstNode()\r
- else \r
- %parent_node=$$->$getFolderObjFromPath($$->%extraDirs->$current()->%pathFromTrigger)\r
- NGLfserv::corefunctions::ngldebug aggiungo un nuovo nodo in base a questo percorso %rootpath\r
- %node=$$->$addFolder(%rootpath,%parent_node)\r
- $$->%extraDirs->$current()->%node=%node\r
- %node->%extraDirPath=%rootpath\r
- $$->%extraDirs->$moveNext()\r
- \r
- } \r
- }\r
- function timerEvent()\r
- {\r
- $$->%time=$hptimestamp()\r
- $$->%count=0\r
- //debug in timer\r
- if (!$$->$scanSubFolders($$->%rootpath,$$->%rootnode)) {\r
- //NGLfserv::corefunctions::ngldebug scanned $$->%count nodes in $$->%time_available ms\r
- $$->$resetFlag()\r
- $$->$killtimers()\r
- $$->$emit(scancompleted)\r
- }\r
- else{\r
- NGLfserv::corefunctions::ngldebug scanned $$->%count nodes in $$->%time_available ms with \r
- //diff $($$->%count-$$->%oldcount)\r
- \r
- $$->%speedmeter++\r
- if ($$->%speedmeter>5){\r
- $$->%time_available=$($$->%time_available+0.05)\r
- if ($$->%time_available>0.600) $$->%time_available=0.600\r
- if ($$->%time_available<0.600) NGLfserv::corefunctions::ngldebug "Speed scan is low... I'm trying to increase it... at $$->%time_available ms"\r
- }\r
- \r
- /*\r
- if ($$->%count-$$->%oldcount<5) {\r
- $$->%time_available+=0.05\r
- NGLfserv::corefunctions::ngldebug "Speed scan is low... I'm trying to increase it... at $$->%time_available ms"\r
- }\r
- $$->%oldcount=$$->%count\r
- */\r
- }\r
- }\r
- function scanSubFolders()\r
- {\r
- $$->%count=0\r
- $$->%time=$hptimestamp()\r
- \r
- if ($version(s)<20070116) {\r
- NGLfserv::corefunctions::ngldebug "KVIrc version too older: switching to old scanfiles routine"\r
- return $$->$oldScanSubFolders($0,$1)\r
- }\r
- \r
- else {\r
- NGLfserv::corefunctions::ngldebug "Using fast scan drive routine!"\r
- return $$->$oldScanSubFolders($0,$1)\r
- } \r
- \r
- }\r
- function oldScanSubFolders()\r
- {\r
- %path=$0\r
- %parent_node=$1\r
- if ($1->%thisNodeCompleted!="-1"){\r
- if (!$1->%thisNodeCompleted){\r
- %offset=0\r
- $$->%cache[]=$file.ls(%path,f)\r
- }\r
- else\r
- %offset=$1->%thisNodeCompleted\r
- %len=$length($$->%cache[])\r
- $$->%count+=$(%len-%offset)\r
- for(%j=%offset;%j<%len;%j++){\r
- if ($$->%cache[%j]) \r
- $$->$appendFile(%parent_node,$$->%cache[%j],$file.size(%path\/$$->%cache[%j]))\r
- if (($hptimestamp-$$->%time)>$$->%time_available) break\r
- }\r
- if (%j==%len) {$1->%thisNodeCompleted=-1;$$->%cache[]=;}\r
- else $1->%thisNodeCompleted=$(%j+1)\r
- }\r
- if (($hptimestamp-$$->%time)>$$->%time_available) return $true\r
- %folders[]=$file.ls(%path,dn)\r
- %children[]=%parent_node->$children()\r
- %fl=$false\r
- %len=$length(%children[]);\r
- %i=0\r
- for (%ind=0;%ind<%folders[]#;%ind++) {\r
- if ((%folders[%ind]!="..") && (%folders[%ind]!=".")) {\r
- if (%i<%len) %node=%children[%i]\r
- else %node=$$->$addNode(%folders[%ind],%parent_node)\r
- if (!%node->%allSubFoldersScanned || %node->%extraDirPath){\r
- if (!$$->$oldScanSubFolders(%path%folders[%ind]"/",%node)){\r
- %node->%allSubFoldersScanned=$true()\r
- }\r
- else %fl=$true \r
- }\r
- %i++\r
- }\r
- if (%fl) break\r
- }\r
- if (%fl) return $true\r
- }\r
- function fastScanSubFolders()\r
- {\r
- %path=$0\r
- \r
- %parent_node=$1\r
- %children[]=%parent_node->$children()\r
- %len=$length(%children[]);\r
- %folders[]=$file.ls(%path,dn) \r
- if (!$1->%files_list[]#) {\r
- \r
- $1->%files_list[]<+$file.ls(%path,f)\r
- $$->%count+=$length($1->%files_list[])\r
- $1->%file_size[]<+$file.allSizes(%path)\r
- //$1->%thisNodeCompleted=$true\r
- if (($hptimestamp-$$->%time)>$$->%time_available) return $true \r
- }\r
- if ($length(%folders[])<2) return\r
- if (!%len) %start=2\r
- else{\r
- %start=$(2+%len-1)\r
- if ($$->$fastScanSubFolders(%path%folders[%start]"/",%children[$(%len-1)])) return $true\r
- %start++\r
- }\r
- for (%ind=%start;%ind<%folders[]#;%ind++) {\r
- if ($$->$fastScanSubFolders(%path%folders[%ind]"/",$$->$addNode(%folders[%ind],%parent_node))) {\r
- %fl=$true\r
- break\r
- } \r
- }\r
- if (%fl) return $true;\r
- }\r
- \r
- function appendFile(node,file,size)\r
- {\r
- \r
- $0->%files_list[]<+$1\r
- $0->%file_size[]<+$2\r
- }\r
- \r
- function resetFlag()\r
- {\r
- $$->$reset($$->%firstnode)\r
- }\r
- function reset()\r
- {\r
- $0->%allSubFoldersScanned=\r
- $0->%thisNodeCompleted=\r
- %folders[]=$0->$children\r
- %len=$length(%folders[])\r
- for (%i=0;%i<%len;%i++;) $$->$reset(%folders[%i])\r
- }\r
- \r
- # metodo che si occupa di restituire la path completa "virtuale" del nodo stesso\r
- # come parametro gli passiamo il "root" che indica la radice di questo ramo: può essere il root generale\r
- # o in caso di triggers, una sezione specifica dell'albero\r
- \r
- function getVirtualFolderPath(node)\r
- {\r
- %item=$0\r
- while(%item->$parent()->$parent()) {\r
- %path=%item->%text"\\"%path\r
- %item=%item->$parent()\r
- }\r
- return %path\r
- }\r
- \r
- function getFolderById()\r
- {\r
- return $$->$scanTreeFolder($$->%firstnode,$0)\r
- }\r
- \r
- function scanTreeFolder()\r
- {\r
- if ($0->%index==$1) return $0\r
- %folders[]=$0->$children()\r
- %len=$length(%folders[])\r
- for(%i=0;%i<%len;%i++){\r
- %found=$$->$scanTreeFolder(%folders[%i],$1) \r
- if (%found) break\r
- } \r
- NGLfserv::corefunctions::ngldebug ritorno %found\r
- return %found\r
- }\r
- \r
- function getFileById(node,id)\r
- {\r
- %node=$0\r
- %fl=$1\r
- %child_idx=$str.rightfromfirst($str.lowcase(%fl),"|f")\r
- if (!$str.isnumber(%child_idx)) return $false\r
- if ((%child_idx>=$$->$filesCount(%node)) || (%child_idx<0)) return $false\r
- else return $$->$fileAt(%node,%child_idx)\r
- } \r
- \r
- function getFolderObjFromPath()\r
- {\r
- %path=$0\r
- if ($1) %father=$1\r
- else %father=$$->%firstnode\r
- %index=0 \r
- while ($str.token(%index,"/",%path)){\r
- %found=$false\r
- %token= $str.token(%index,"/",%path) \r
- %children[]=%father->$children() \r
- for (%i=0;%i<$length(%children[]);%i++) {\r
- if ($$->$text(%children[%i]) ==%token) {\r
- %father=%children[%i]\r
- %found=$true\r
- break\r
- }\r
- }\r
- if (!%found) return $false\r
- %index++\r
- }\r
- return %father\r
- }\r
- \r
- function getLocalTriggerPath()\r
- {\r
- %item=$0\r
- %path=%item->%text"/"\r
- while(%item!=$$) {\r
- %item=%item->$parent()\r
- if (%item->%text) %path=%item->%text"/"%path\r
- }\r
- return %path \r
- }\r
- function getRealPath(node)\r
- {\r
- \r
- %item=$0\r
- if (%item==$$->%firstNode) debug sono nel nodo principale\r
- else debug non SONO\r
- //%path=%item->%text"/"\r
- while((!%item->%extraDirPath) && (%item!=$$->%firstNode)) {\r
- debug risalgo %item->%text\r
- %path<+%item->%text"/"\r
- %item=%item->$parent()\r
- //%path=%item->%text"/"%path\r
- }\r
- if (%item!=$$->%firstNode) return %item->%extraDirPath%path\r
- else return $$->%realTriggerPath%path\r
- }\r
- \r
- internal function checkFolderExists()\r
- {\r
- %children[]=$1->$children()\r
- for (%i=0;%i<$length(%children[]);%i++){\r
- if ($0==%children[%i]->%text) return %children[%i]\r
- }\r
- return $false\r
- }\r
- \r
- function filesList(node)\r
- {\r
- return $0->%files_list[]\r
- }\r
- \r
- function sizesList(node)\r
- {\r
- return $0->%file_size[]\r
- }\r
- \r
- \r
- \r
- function filesCount(node)\r
- {\r
- return $length($0->%files_list[])\r
- }\r
- \r
- function somethingHasChanged()\r
- {\r
- return $$->%changed\r
- }\r
- function setChanged\r
- {\r
- $$->%changed=$0\r
- }\r
- function fileSizeAt(node,index)\r
- {\r
- return $0->%file_size[$1]\r
- }\r
- function fileAt(node,index)\r
- {\r
- return $0->%files_list[$1]\r
- }\r
- function fileIndex(node,file)\r
- {\r
- for (%i=0;%i<$length($0->%files_list[]);%i++) {\r
- if ($0->%files_list[%i]==$1) return %i\r
- }\r
- return -1\r
- }\r
- \r
- function setText(node,text)\r
- {\r
- $0->%text=$1\r
- }\r
- function text(node)\r
- {\r
- return $0->%text\r
- }\r
- function isFileNotShared(node,file)\r
- {\r
- if ($0->$parent()->%dirNotShared || $0->%filesNotShared{$0->%files_list[$1]}) return $true\r
- else return $false\r
- }\r
- function setFoldersNotShared(node)\r
- {\r
- $0->%filesNotShared{}=\r
- %folder[]=$0->$children()\r
- %len=$length(%folder[])\r
- for(%i=0;%i<%len;%i++;){\r
- if (!%folder[%i]->%dirNotShared) $$->$setFoldersNotShared(%folder[%i])\r
- } \r
- }\r
- function setFoldersShared(node)\r
- {\r
- $0->%dirNotShared=\r
- $0->%filesNotShared{}=\r
- %folder[]=$0->$children()\r
- %len=$length(%folder[])\r
- for(%i=0;%i<%len;%i++;) $$->$setFoldersShared(%folder[%i]) \r
- }\r
- function setFileNotShared(node,file)\r
- {\r
- $0->%filesNotShared{$1}=$true\r
- }\r
- function setFileShared(node,file)\r
- {\r
- $0->%filesNotShared{$1}=\r
- if ($0->%filesNotShared{}#) $keys($0->%filesNotShared{})\r
- \r
- }\r
- function fileExists(node,file)\r
- {\r
- %file=$str.lowcase($1)\r
- %node=$0\r
- %len=$$->$filesCount(%node)\r
- for (%i=0;%i<%len;%i++) if (%file==$str.lowcase($$->$fileAt(%node,%i))) return $$->$fileAt(%node,%i)\r
- return $false\r
- }\r
- function createDirFilesNotShared(node)\r
- {\r
- for (%i=0;%i<$0->$count();%i++){\r
- %obj=$0->$item(%i)\r
- %fl=%obj->%files\r
- if (%fl) %files[]=$str.split("|",%fl) \r
- %node=$$->$getFolderObjFromPath(%obj->%pathfromtrigger)\r
- if (!%fl) %node->%dirNotShared=$true\r
- else foreach(%file,%files[]) if (%file) %node->%filesNotShared{%file}=$true\r
- }\r
- }\r
- function getNotSharedInfo()\r
- {\r
- $$->%infons=$new(list,0)\r
- $$->$scanNotShared($$->%firstNode)\r
- return $$->%infons\r
- }\r
- function checkChildrenNotShared()\r
- {\r
- %children[]=$0->$children()\r
- %len=$length(%children[])\r
- %cnt=0\r
- for (%i=0;%i<%len;%i++){\r
- if (%children[%i]->%dirNotShared) %cnt++\r
- }\r
- if (%cnt!=%i || ($length($0->%filesNotShared{})!=$length($0->%files_list[]))) return $false\r
- else return $true\r
- }\r
- function scanNotShared()\r
- {\r
- %node=$0\r
- if ($length(%node->%filesNotShared{})){\r
- %folder=$new(object,$$->%infons)\r
- %folder->%pathfromtrigger=$$->$getLocalTriggerPath(%node) \r
- foreach(%file,$keys(%node->%filesNotShared{})) %tmp=%tmp%file|\r
- %folder->%files=%tmp\r
- $$->%infons->$append(%folder)\r
- }\r
- %folder[]=%node->$children()\r
- %len=$length(%folder[])\r
- for (%i=0;%i<%len;%i++;){\r
- if (!%folder[%i]->%dirNotShared) $$->$scanNotShared(%folder[%i])\r
- else{\r
- %node=%folder[%i]\r
- %dir=$new(object,$$->%infons)\r
- %dir->%pathfromtrigger=$$->$getLocalTriggerPath(%node)\r
- $$->%infons->$append(%dir)\r
- }\r
- }\r
- }\r
- function saveNotSharedInfo\r
- {\r
- $$->%c=$0\r
- $$->%ns=0 \r
- $$->$scanTreeForNotShared($$->%firstNode)\r
- %ret=$$->%ns\r
- $$->%c=\r
- $$->%ns=\r
- return %ret\r
- }\r
- function scanTreeForNotShared()\r
- {\r
- %node=$0\r
- if ($length(%node->%filesNotShared{})){\r
- config.setsection $$->%c notshared$$->%ns\r
- $$->%ns++\r
- config.write $$->%c pathfromtrigger $$->$getLocalTriggerPath(%node)\r
- foreach(%file,$keys(%node->%filesNotShared{})) %tmp=%tmp%file|\r
- config.write $$->%c files %tmp\r
- NGLfserv::corefunctions::ngldebug files notshared of %node->%text are %tmp\r
- }\r
- %folder[]=%node->$children()\r
- %len=$length(%folder[])\r
- for (%i=0;%i<%len;%i++;){\r
- if (!%folder[%i]->%dirNotShared) $$->$scanTreeForNotShared(%folder[%i])\r
- else{\r
- NGLfserv::corefunctions::ngldebug completamente non sharata %folder[%i]->%text\r
- config.setsection $$->%c notshared$$->%ns\r
- $$->%ns++\r
- %node=%folder[%i]\r
- config.write $$->%c pathfromtrigger $$->$getLocalTriggerPath(%node)\r
- }\r
- }\r
- }\r
- }\r
-}\r
-\r
+alias(NGLfserv::classes::trigger)
+{
+ class(NGLfserv::classes::trigger,object)
+ {
+ function constructor()
+ {
+ // creo la lista in cui verranno memorizzati i nodi "reali" cioè i vari punti di ingresso sul disco
+ $$->%extraDirs=$new(list,$this)
+ $$->%index=0
+ objects.connect $this triggerbusy %G_fserverbusyhandler fserverbusyevent
+ objects.connect $this triggerready %G_fserverbusyhandler fserverNotBusyEvent
+ objects.connect $$ scancompleted $$ checkextradirs
+
+ }
+ function rootPath()
+ {
+ return $$->%rootPath
+ }
+
+ function setNode()
+ {
+ // nodo su cui ci troviamo attualmente
+ $$->%node=$0
+ }
+ function node()
+ {
+ return $$->%node
+ }
+ function setName()
+ {
+ // nome del trigger
+ $$->%triggerName=$0
+ }
+ function triggerName()
+ {
+ return $$->%triggerName
+ }
+
+
+ function addChannel()
+ {
+ // dizionario in cui memorizziamo i canali in cui è attivo il trigger
+ $$->%activechannels{$0}=$1
+ }
+ function activeChannels()
+ {
+ return $$->%activechannels{}
+ }
+ function removeChannel()
+ {
+ $$->%activechannels{$0}=
+ }
+ function getChannel()
+ {
+ return $$->%activechannels{$0}
+ }
+ function channels()
+ {
+ return $length($$->%activechannels{})
+ }
+ function channelExists()
+ {
+ if ($$->%activechannels{$0}) return $true
+ else return $false
+ }
+ setRealTriggerPath()
+ {
+ $$->%realTriggerPath=$0
+ }
+ function getRealTriggerPath()
+ {
+
+ return $$->%realTriggerPath
+ }
+ function removeNode(virtual node)
+ {
+ if ($0->%extraDirPath)
+ $$->$removeExtraDir($0)
+ delete $0
+ }
+ function removeExtraDir(node)
+ {
+ for(%i=0;%i<$length($$->%extraDirs->$count);%i++;){
+ if ($$->%extraDirs->$item(%i)->%node==$0) break
+ }
+ delete $$->%extraDirs->$item(%i)
+ $$->%extraDirs->$remove(%i)
+ }
+ function extraDirsCount()
+ {
+ return $$->%extraDirs->$count()
+ }
+ function extraDir(index)
+ {
+ return $$->%extraDirs->$item($0)
+ }
+ // aggiunge il nodo "root" al trigger: a differenza delle successive dirs che si potranno aggiungere, questa verrà aggiungta
+ // eliminando tutta la parte del percorso, perdendo quindi anche il nome della cartella di origine.
+ // Esempio: la dir c:\\mp3\ sparirà e nel trigger ci saranno i files e dirs figli di essa.
+ function addFirstNode()
+ {
+ %rootpath = $str.replace($0,"/","\\")
+ if($str.right(%rootpath, 1) != "/") %rootpath .= "/"
+ $$->%firstnode=$$->$addNode("",$this,%rootpath)
+ $$->%realTriggerPath = $str.replace($0,"/","\\")
+ $$->%rootnode=$$->%firstnode
+ $$->%triggerName=$1
+ $$->%rootpath=%rootpath
+ $$->%time=$hptimestamp()
+ $$->%time_available=0.300
+ $$->%speedmeter=0
+ $$->%count=0
+ $$->$scanSubFolders(%rootpath,$$->%firstnode)
+ $$->$startTimer(1000)
+
+ }
+ function setFirstEmptyNode()
+ {
+ // flag attivato quando al load del trigger, risulta che il nodo principale non esiste sul disco
+ $$->%firstNodeEmpty=$true
+ }
+
+ // funzione che aggiunge un nodo al nostro albero di directories; come parametri vengono richiesti: nome della cartella, nodo padre, percorso iniziale sul disco
+ function addNode()
+ {
+ %node=$new(object,$1)
+ %node->%index=$$->%index
+ $$->%index++
+ %node->%text=$0
+ return %node
+ }
+ function appendExtraDir()
+ {
+ %node=$new(object,$this)
+ %node->%extraDirPath=$0/
+ %node->%pathFromTrigger=$1
+ if ($2) {
+ %node->%node=$2
+ $2->%extraDirPath=$0/
+ }
+ $$->%extraDirs->$append(%node)
+ }
+ function firstNode()
+ {
+ return $$->%firstnode
+ }
+
+ // aggiunge una dir a partire da un nodo
+ function addFolder(complete path, parent node)
+ {
+ // viene reso il path in standard unix
+ %rootpath = $str.replace($0,"/","\\")
+ // fixato con la /
+ if($str.right(%rootpath, 1) != "/") %rootpath .= "/"
+ // estraiamo il nome della dir
+ %dir_name = $file.extractfilename($str.left(%rootpath,$($str.len(%rootpath)-1)))
+ // e verifichiamo se già esiste nel nodo parent
+ if ($$->$checkFolderExists(%dir_name,$1)) {
+ return $false
+ }
+ // aggiungiamo il nodo al parent
+ %node=$$->$addNode(%dir_name,$1)
+ // e memorizziamo lil nodo e la path per utilizzarli come riferimento nello scan in background
+ $$->%rootnode=%node
+ $$->%rootpath=%rootpath
+ //
+ $$->%time=$hptimestamp()
+ $$->%time_available=0.300
+ $$->%speedmeter=0
+ if ($$->%intimer) return %node
+ $$->%count=0
+ $$->%oldcount=0
+ $$->$emit(triggerBusy)
+ $$->%noupdate=$true
+ $$->%addnode=$1
+ $$->$scanSubFolders(%rootpath,%node)
+ $$->$startTimer(1000)
+ return %node
+ }
+ function update()
+ {
+ $$->$updateStart($true)
+ }
+ function updateStart()
+ {
+ $$->%update=$true
+ $$->%extraDirs->$moveFirst()
+ $$->%rootpath=$$->%realTriggerPath
+ if ($0){
+ $$->%nsi=$$->$getNotSharedInfo()
+ delete $$->$firstNode()
+ }
+ NGLfserv::corefunctions::ngldebug "start background HD scanning"
+
+ if ($$->%firstNodeEmpty){
+ NGLfserv::corefunctions::ngldebug first node is empty
+ NGLfserv::corefunctions::ngldebug add fake dir
+ $$->%firstnode=$$->$addNode("",$this,"")
+ $$->%firstNodeEmpty=$true
+ //$$->%rootnode=$$->$addFolder($$->%rootpath,$$->%firstnode)
+ }
+ else{
+ $$->%firstnode=$$->$addNode("",$this)
+ $$->%rootnode=$$->%firstnode
+ NGLfserv::corefunctions::ngldebug add main node with path $$->%rootpath
+ $$->%time=$hptimestamp()
+ $$->%count=0
+ $$->%oldcount=0
+ $$->%time_available=0.300
+ $$->$scanSubFolders($$->%rootpath,$$->%rootnode)
+ $$->%speedmeter=0
+ $$->$startTimer(1000)
+ }
+ }
+ function checkextradirs()
+ {
+ if (!$$->%update) {
+ $$->$emit(updated,$$->%addnode)
+ $$->%addnode=
+ return
+ }
+ if (!$$->%extraDirs->$current()) {
+ $$->%update=$false
+ NGLfserv::corefunctions::ngldebug NO EXTRA DIRS: scan trigger $k(4,0)$$->%triggerName$k completed :=)
+ if ($objects.exists($$->%nsi)){
+ $$->$createDirFilesNotShared($$->%nsi)
+ delete $$->%nsi
+ $$->%nsi=
+ }
+ $$->%changed=$true
+ $$->$emit(triggerReady)
+ $$->$emit(updated,$$->%firstnode)
+ }
+ else{
+ while (!$file.exists($$->%extraDirs->$current()->%extraDirPath)){
+ $$->%extraDirs->$moveNext()
+ if (!$$->%extraDirs->$current()){
+ $$->%update=$false
+ $$->$emit(updated,$$->%firstnode)
+ return
+ }
+ }
+ %rootpath=$$->%extraDirs->$current()->%extraDirPath
+ NGLfserv::corefunctions::ngldebug adding extra dir with path Fromtrigger $$->%extraDirs->$current()->%pathFromTrigger
+ NGLfserv::corefunctions::ngldebug extra dir path $$->%extraDirs->$current()->%extraDirPath
+ if($$->%firstNodeEmpty)
+ %parent_node=$$->%firstNode()
+ else
+ %parent_node=$$->$getFolderObjFromPath($$->%extraDirs->$current()->%pathFromTrigger)
+ NGLfserv::corefunctions::ngldebug aggiungo un nuovo nodo in base a questo percorso %rootpath
+ %node=$$->$addFolder(%rootpath,%parent_node)
+ $$->%extraDirs->$current()->%node=%node
+ %node->%extraDirPath=%rootpath
+ $$->%extraDirs->$moveNext()
+
+ }
+ }
+ function timerEvent()
+ {
+ $$->%time=$hptimestamp()
+ $$->%count=0
+ //debug in timer
+ if (!$$->$scanSubFolders($$->%rootpath,$$->%rootnode)) {
+ //NGLfserv::corefunctions::ngldebug scanned $$->%count nodes in $$->%time_available ms
+ $$->$resetFlag()
+ $$->$killtimers()
+ $$->$emit(scancompleted)
+ }
+ else{
+ NGLfserv::corefunctions::ngldebug scanned $$->%count nodes in $$->%time_available ms with
+ //diff $($$->%count-$$->%oldcount)
+
+ $$->%speedmeter++
+ if ($$->%speedmeter>5){
+ $$->%time_available=$($$->%time_available+0.05)
+ if ($$->%time_available>0.600) $$->%time_available=0.600
+ if ($$->%time_available<0.600) NGLfserv::corefunctions::ngldebug "Speed scan is low... I'm trying to increase it... at $$->%time_available ms"
+ }
+
+ /*
+ if ($$->%count-$$->%oldcount<5) {
+ $$->%time_available+=0.05
+ NGLfserv::corefunctions::ngldebug "Speed scan is low... I'm trying to increase it... at $$->%time_available ms"
+ }
+ $$->%oldcount=$$->%count
+ */
+ }
+ }
+ function scanSubFolders()
+ {
+ $$->%count=0
+ $$->%time=$hptimestamp()
+
+ if ($version(s)<20070116) {
+ NGLfserv::corefunctions::ngldebug "KVIrc version too older: switching to old scanfiles routine"
+ return $$->$oldScanSubFolders($0,$1)
+ }
+
+ else {
+ NGLfserv::corefunctions::ngldebug "Using fast scan drive routine!"
+ return $$->$oldScanSubFolders($0,$1)
+ }
+
+ }
+ function oldScanSubFolders()
+ {
+ %path=$0
+ %parent_node=$1
+ if ($1->%thisNodeCompleted!="-1"){
+ if (!$1->%thisNodeCompleted){
+ %offset=0
+ $$->%cache[]=$file.ls(%path,f)
+ }
+ else
+ %offset=$1->%thisNodeCompleted
+ %len=$length($$->%cache[])
+ $$->%count+=$(%len-%offset)
+ for(%j=%offset;%j<%len;%j++){
+ if ($$->%cache[%j])
+ $$->$appendFile(%parent_node,$$->%cache[%j],$file.size(%path\/$$->%cache[%j]))
+ if (($hptimestamp-$$->%time)>$$->%time_available) break
+ }
+ if (%j==%len) {$1->%thisNodeCompleted=-1;$$->%cache[]=;}
+ else $1->%thisNodeCompleted=$(%j+1)
+ }
+ if (($hptimestamp-$$->%time)>$$->%time_available) return $true
+ %folders[]=$file.ls(%path,dn)
+ %children[]=%parent_node->$children()
+ %fl=$false
+ %len=$length(%children[]);
+ %i=0
+ for (%ind=0;%ind<%folders[]#;%ind++) {
+ if ((%folders[%ind]!="..") && (%folders[%ind]!=".")) {
+ if (%i<%len) %node=%children[%i]
+ else %node=$$->$addNode(%folders[%ind],%parent_node)
+ if (!%node->%allSubFoldersScanned || %node->%extraDirPath){
+ if (!$$->$oldScanSubFolders(%path%folders[%ind]"/",%node)){
+ %node->%allSubFoldersScanned=$true()
+ }
+ else %fl=$true
+ }
+ %i++
+ }
+ if (%fl) break
+ }
+ if (%fl) return $true
+ }
+ function fastScanSubFolders()
+ {
+ %path=$0
+ %parent_node=$1
+ %children[]=%parent_node->$children()
+ %len=$length(%children[]);
+ %folders[]=$file.ls(%path,dn)
+ if (!$1->%files_list[]#) {
+ $1->%files_list[]<+$file.ls(%path,f)
+ $$->%count+=$length($1->%files_list[])
+ $1->%file_size[]<+$file.allSizes(%path)
+ if (($hptimestamp-$$->%time)>$$->%time_available) return $true
+ }
+ if ($length(%folders[])<2) return
+ if (!%len) %start=2
+ else{
+ %start=$(2+%len-1)
+ if ($$->$fastScanSubFolders(%path%folders[%start]"/",%children[$(%len-1)])) return $true
+ %start++
+ }
+ for (%ind=%start;%ind<%folders[]#;%ind++) {
+ if ($$->$fastScanSubFolders(%path%folders[%ind]"/",$$->$addNode(%folders[%ind],%parent_node))) {
+ %fl=$true
+ break
+ }
+ }
+ if (%fl) return $true;
+ }
+
+ function appendFile(node,file,size)
+ {
+ $0->%files_list[]<+$1
+ $0->%file_size[]<+$2
+ }
+
+ function resetFlag()
+ {
+ $$->$reset($$->%firstnode)
+ }
+ function reset()
+ {
+ $0->%allSubFoldersScanned=
+ $0->%thisNodeCompleted=
+ %folders[]=$0->$children
+ %len=$length(%folders[])
+ for (%i=0;%i<%len;%i++;) $$->$reset(%folders[%i])
+ }
+
+ # metodo che si occupa di restituire la path completa "virtuale" del nodo stesso
+ # come parametro gli passiamo il "root" che indica la radice di questo ramo: può essere il root generale
+ # o in caso di triggers, una sezione specifica dell'albero
+
+ function getVirtualFolderPath(node)
+ {
+ %item=$0
+ while(%item->$parent()->$parent()) {
+ %path=%item->%text"\\"%path
+ %item=%item->$parent()
+ }
+ return %path
+ }
+
+ function getFolderById()
+ {
+ return $$->$scanTreeFolder($$->%firstnode,$0)
+ }
+
+ function scanTreeFolder()
+ {
+ if ($0->%index==$1) return $0
+ %folders[]=$0->$children()
+ %len=$length(%folders[])
+ for(%i=0;%i<%len;%i++){
+ %found=$$->$scanTreeFolder(%folders[%i],$1)
+ if (%found) break
+ }
+ NGLfserv::corefunctions::ngldebug ritorno %found
+ return %found
+ }
+
+ function getFileById(node,id)
+ {
+ %node=$0
+ %fl=$1
+ %child_idx=$str.rightfromfirst($str.lowcase(%fl),"|f")
+ if (!$str.isnumber(%child_idx)) return $false
+ if ((%child_idx>=$$->$filesCount(%node)) || (%child_idx<0)) return $false
+ else return $$->$fileAt(%node,%child_idx)
+ }
+
+ function getFolderObjFromPath()
+ {
+ %path=$0
+ if ($1) %father=$1
+ else %father=$$->%firstnode
+ %index=0
+ while ($str.token(%index,"/",%path)){
+ %found=$false
+ %token= $str.token(%index,"/",%path)
+ %children[]=%father->$children()
+ for (%i=0;%i<$length(%children[]);%i++) {
+ if ($$->$text(%children[%i]) ==%token) {
+ %father=%children[%i]
+ %found=$true
+ break
+ }
+ }
+ if (!%found) return $false
+ %index++
+ }
+ return %father
+ }
+
+ function getLocalTriggerPath()
+ {
+ %item=$0
+ %path=%item->%text"/"
+ while(%item!=$$) {
+ %item=%item->$parent()
+ if (%item->%text) %path=%item->%text"/"%path
+ }
+ return %path
+ }
+ function getRealPath(node)
+ {
+
+ %item=$0
+ while((!%item->%extraDirPath) && (%item!=$$->%firstNode)) {
+ %path<+%item->%text"/"
+ %item=%item->$parent()
+ }
+ if (%item!=$$->%firstNode) return %item->%extraDirPath%path
+ else return $$->%realTriggerPath%path
+ }
+
+ internal function checkFolderExists()
+ {
+ %children[]=$1->$children()
+ for (%i=0;%i<$length(%children[]);%i++){
+ if ($0==%children[%i]->%text) return %children[%i]
+ }
+ return $false
+ }
+
+ function filesList(node)
+ {
+ return $0->%files_list[]
+ }
+
+ function sizesList(node)
+ {
+ return $0->%file_size[]
+ }
+
+
+
+ function filesCount(node)
+ {
+ return $length($0->%files_list[])
+ }
+
+ function somethingHasChanged()
+ {
+ return $$->%changed
+ }
+ function setChanged
+ {
+ $$->%changed=$0
+ }
+ function fileSizeAt(node,index)
+ {
+ return $0->%file_size[$1]
+ }
+ function fileAt(node,index)
+ {
+ return $0->%files_list[$1]
+ }
+ function fileIndex(node,file)
+ {
+ for (%i=0;%i<$length($0->%files_list[]);%i++) {
+ if ($0->%files_list[%i]==$1) return %i
+ }
+ return -1
+ }
+
+ function setText(node,text)
+ {
+ $0->%text=$1
+ }
+ function text(node)
+ {
+ return $0->%text
+ }
+ function isFileNotShared(node,file)
+ {
+ if ($0->$parent()->%dirNotShared || $0->%filesNotShared{$0->%files_list[$1]}) return $true
+ else return $false
+ }
+ function setFoldersNotShared(node)
+ {
+ $0->%filesNotShared{}=
+ %folder[]=$0->$children()
+ %len=$length(%folder[])
+ for(%i=0;%i<%len;%i++;){
+ if (!%folder[%i]->%dirNotShared) $$->$setFoldersNotShared(%folder[%i])
+ }
+ }
+ function setFoldersShared(node)
+ {
+ $0->%dirNotShared=
+ $0->%filesNotShared{}=
+ %folder[]=$0->$children()
+ %len=$length(%folder[])
+ for(%i=0;%i<%len;%i++;) $$->$setFoldersShared(%folder[%i])
+ }
+ function setFileNotShared(node,file)
+ {
+ $0->%filesNotShared{$1}=$true
+ }
+ function setFileShared(node,file)
+ {
+ $0->%filesNotShared{$1}=
+ if ($0->%filesNotShared{}#) $keys($0->%filesNotShared{})
+
+ }
+ function fileExists(node,file)
+ {
+ %file=$str.lowcase($1)
+ %node=$0
+ %len=$$->$filesCount(%node)
+ for (%i=0;%i<%len;%i++) if (%file==$str.lowcase($$->$fileAt(%node,%i))) return $$->$fileAt(%node,%i)
+ return $false
+ }
+ function createDirFilesNotShared(node)
+ {
+ for (%i=0;%i<$0->$count();%i++){
+ %obj=$0->$item(%i)
+ %fl=%obj->%files
+ if (%fl) %files[]=$str.split("|",%fl)
+ %node=$$->$getFolderObjFromPath(%obj->%pathfromtrigger)
+ if (!%fl) %node->%dirNotShared=$true
+ else foreach(%file,%files[]) if (%file) %node->%filesNotShared{%file}=$true
+ }
+ }
+ function getNotSharedInfo()
+ {
+ $$->%infons=$new(list,0)
+ $$->$scanNotShared($$->%firstNode)
+ return $$->%infons
+ }
+ function checkChildrenNotShared()
+ {
+ %children[]=$0->$children()
+ %len=$length(%children[])
+ %cnt=0
+ for (%i=0;%i<%len;%i++){
+ if (%children[%i]->%dirNotShared) %cnt++
+ }
+ if (%cnt!=%i || ($length($0->%filesNotShared{})!=$length($0->%files_list[]))) return $false
+ else return $true
+ }
+ function scanNotShared()
+ {
+ %node=$0
+ if ($length(%node->%filesNotShared{})){
+ %folder=$new(object,$$->%infons)
+ %folder->%pathfromtrigger=$$->$getLocalTriggerPath(%node)
+ foreach(%file,$keys(%node->%filesNotShared{})) %tmp=%tmp%file|
+ %folder->%files=%tmp
+ $$->%infons->$append(%folder)
+ }
+ %folder[]=%node->$children()
+ %len=$length(%folder[])
+ for (%i=0;%i<%len;%i++;){
+ if (!%folder[%i]->%dirNotShared) $$->$scanNotShared(%folder[%i])
+ else{
+ %node=%folder[%i]
+ %dir=$new(object,$$->%infons)
+ %dir->%pathfromtrigger=$$->$getLocalTriggerPath(%node)
+ $$->%infons->$append(%dir)
+ }
+ }
+ }
+ function saveNotSharedInfo
+ {
+ $$->%c=$0
+ $$->%ns=0
+ $$->$scanTreeForNotShared($$->%firstNode)
+ %ret=$$->%ns
+ $$->%c=
+ $$->%ns=
+ return %ret
+ }
+ function scanTreeForNotShared()
+ {
+ %node=$0
+ if ($length(%node->%filesNotShared{})){
+ config.setsection $$->%c notshared$$->%ns
+ $$->%ns++
+ config.write $$->%c pathfromtrigger $$->$getLocalTriggerPath(%node)
+ foreach(%file,$keys(%node->%filesNotShared{})) %tmp=%tmp%file|
+ config.write $$->%c files %tmp
+ NGLfserv::corefunctions::ngldebug files notshared of %node->%text are %tmp
+ }
+ %folder[]=%node->$children()
+ %len=$length(%folder[])
+ for (%i=0;%i<%len;%i++;){
+ if (!%folder[%i]->%dirNotShared) $$->$scanTreeForNotShared(%folder[%i])
+ else{
+ NGLfserv::corefunctions::ngldebug completamente non sharata %folder[%i]->%text
+ config.setsection $$->%c notshared$$->%ns
+ $$->%ns++
+ %node=%folder[%i]
+ config.write $$->%c pathfromtrigger $$->$getLocalTriggerPath(%node)
+ }
+ }
+ }
+ }
+}
+
-alias(NGLfserv::config::load)\r
-{\r
- if (!$classDefined(NGLfserver))\r
- NGLfserv::classes::register\r
- \r
- %NGLfserver=$new(NGLfserver)\r
- \r
- %NglConfigPath=$file.localdir(config/scripts/)\r
- \r
- %c = $config.open("NGLfserv.kvc","r")\r
- config.setsection %c general\r
- \r
- // maximum sends\r
- %MaxSends=$config.read(%c,"MaxSends",2)\r
- \r
- // each users maximum sends\r
- %EachSends=$config.read(%c,"EachSends",1)\r
- \r
- // maximum queues\r
- %MaxQueues=$config.read(%c,"MaxQueues",10)\r
- \r
- // each users maximum queues\r
- %EachQueues=$config.read(%c,"EachQueues",2)\r
- \r
- // Flag enable/disable fserv\r
- %FservActive=$config.read(%c,"FservActive","ON")\r
- \r
- // Max time of the shell\r
- %MaxShellLife=$config.read(%c,"MaxShellLife",120000)\r
- \r
- // Max time of user's idle time\r
- %MaxUserIdle=$config.read(%c,"MaxUserIdle",45000)\r
- \r
- // Max find results\r
- %FindMsg=$config.read(%c,"FindMsg",5)\r
- \r
- // Flag for enabling/disabling DccReverse send\r
- %DccReverse=$config.read(%c,"DccReverse",0)\r
- \r
- // Colors\r
- %NGLc1=$config.read(%c,"NGLc1")\r
- %NGLc2=$config.read(%c,"NGLc2")\r
- \r
- if (%NGLc1=="" || %NGLc2=="") {\r
- %NGLc1=$(2+$rand(13))\r
- %NGLc2=$(2+$rand(13))\r
- while(%NGLc1==%NGLc2)\r
- %NGLc2=$(2+$rand(13))\r
- }\r
- \r
- // Maximum resends\r
- %MaxResends=$config.read(%c,"MaxResends",3)\r
- \r
- // Instant send size\r
- %InstantSendSize=$config.read(%c,"InstantSendSize",1048576)\r
- \r
- // Resend interval\r
- %ResendInterval=$config.read(%c,"ResendInterval",10000)\r
- \r
- // Priority Type\r
- %PriorityType = $config.read(%c,"PriorityType",0)\r
- \r
- // Maximum cache dimension\r
- %MaxCacheFind=$config.read(%c,"MaxCacheFind",50)\r
- \r
- // Statistics\r
- %NGLSentBytes = $config.read(%c,"NGLSentBytes",0.0)\r
- %NGLSentFiles = $config.read(%c,"NGLSentFiles",0)\r
- \r
- // MaxSessions\r
- %MaxSessions = $config.read(%c,"MaxSessions",5)\r
- \r
- // LoadSendDelay \r
- %LoadSendsDelay = $config.read(%c,"LoadSendsDelay",60000)\r
-\r
- // NGLRespondToNGLVersion\r
- %NGLRespondToNGLVersion = $config.read(%c,"NGLRespondToNGLVersion",$true)\r
-\r
- %G_NGLdebug=$config.read(%c,"NGLdebug",0)\r
- \r
- %CloneDetection=$config.read(%c,"CloneDetection",$true)\r
- \r
- %triggersnumber=$config.read(%c,Triggersnumber)\r
- // moving to first trigger\r
- \r
- NGLfserv::corefunctions::ngldebug triggers to load %triggersnumber\r
- %nochannel=$true\r
- %cnt=0\r
- %total=0\r
- // while there are triggers\r
- while(%total!=%triggersnumber){\r
- config.setsection %c TRIGGER%cnt\r
- if ($config.read(%c,"triggername")){\r
- %total++\r
- NGLfserv::corefunctions::ngldebug reading trigger $config.read(%c,"triggername")\r
- // trigger's name\r
- %triggername=$config.read(%c,"triggername")\r
- %welcomemessage=$config.read(%c,"welcomemessage")\r
- %password=$config.read(%c,"password")\r
- // loading trigger folder structure\r
- \r
- %Triggers{%triggername}=$new(NGLfserv::classes::trigger,0)\r
- %Triggers{%triggername}->$setName(%triggername)\r
- %Triggers{%triggername}->%welcomeMessage=%welcomemessage\r
- %Triggers{%triggername}->%password=%password\r
- %chan=0\r
- // searching for trigger's channels\r
- while ($config.read(%c,"channel"%chan)) {\r
- %nochannel=$false\r
- %channelname=$config.read(%c,"channel"%chan)\r
- %channel=$NGLfserv::corefunctions::channels(a,%channelname,%triggername)\r
- // settings triggertype and prioritytype\r
- %Triggers{%triggername}->$getChannel(%channelname)->$setTriggerType($config.read(%c,%channelname"triggertype"))\r
- %Triggers{%triggername}->$getChannel(%channelname)->$setAccessType($config.read(%c,%channelname"accesstype"))\r
- %Triggers{%triggername}->$getChannel(%channelname)->$setAccessByPswd($config.read(%c,"UsePswd",$false))\r
- %chan++\r
- }\r
- }\r
- %cnt++\r
- }\r
- \r
- if (!$length(%Triggers{})) return\r
- if (!%nochannel) {\r
- config.setsection %c channelsgeneraloptions\r
- foreach(%channel,$keys(%FservChannels{})) {\r
- %FservChannels{%channel}->$setRespToList($config.read(%c,"%channel"respondtolist))\r
- %FservChannels{%channel}->$setRespToFind($config.read(%c,"%channel"respondtofind))\r
- %FservChannels{%channel}->$setRespToMyQueues($config.read(%c,"%channel"respondtomyqueues))\r
- %FservChannels{%channel}->$setUseQuickGet($config.read(%c,"%channel"usequickget))\r
- %FservChannels{%channel}->$setDisplayNoOccurrenceFound($config.read(%c,"%channel"displayNoOccurrenceFound))\r
- %FservChannels{%channel}->$setMultipleResultsPerLine($config.read(%c,"%channel"multipleResultsPerLine))\r
- }\r
- }\r
- config.close %c\r
- %Asyncio=$new(NGLfserv::classes::asynchLoad)\r
- foreach(%trigger,$keys(%Triggers{})){\r
- %c = $config.open("NGLfservtriggertree"%trigger".kvc",rw)\r
- config.setsection %c general\r
- debug add $config.read(%c,"realTriggerPath")\r
- if ($file.exists($config.read(%c,"realTriggerPath"))){\r
- %Triggers{%trigger}->%c=%c\r
- %add=$true\r
- %Asyncio->$addtrigger(%Triggers{%trigger})\r
- %Triggers{%trigger}->$setRealTriggerPath($config.read(%c,"realTriggerPath"))\r
- }\r
- %extradirs=$config.read(%c,"extradirs",0)\r
- %i=0\r
- while (%i<%extradirs){\r
- config.setsection %c extradir%i\r
- //config.setsection %c %keylist[%i]\r
- %extradirpath=$config.read(%c,"extradirpath")\r
- debug checking extradir %extradirpath\r
- if ($file.exists(%extradirpath)){\r
- %pathFromTrigger=$config.read(%c,"pathFromTrigger")\r
- %Triggers{%trigger}->$appendExtraDir(%extradirpath,%pathFromTrigger)\r
- }\r
- else{\r
- NGLfserv::corefunctions::ngldebug la dir $config.read(%c,"extradirpath") non esiste !\r
- config.clearsection %c extradir%i\r
- }\r
- %i++\r
- }\r
- }\r
- if (!%Asyncio->$start()) delete %Asyncio\r
- else return\r
- // FIX ME\r
- if (%Asyncio->$start())\r
- %G_fserverbusyhandler->$setAliasCallback("NGLfserv::config::loadSendAndQueues")\r
- else delete %Asyncio\r
-}\r
-\r
+alias(NGLfserv::config::load)
+{
+ if (!$classDefined(NGLfserver))
+ NGLfserv::classes::register
+
+ %NGLfserver=$new(NGLfserver)
+
+ %NglConfigPath=$file.localdir(config/scripts/)
+
+ %c = $config.open("NGLfserv.kvc","r")
+ config.setsection %c general
+
+ // maximum sends
+ %MaxSends=$config.read(%c,"MaxSends",2)
+
+ // each users maximum sends
+ %EachSends=$config.read(%c,"EachSends",1)
+
+ // maximum queues
+ %MaxQueues=$config.read(%c,"MaxQueues",10)
+
+ // each users maximum queues
+ %EachQueues=$config.read(%c,"EachQueues",2)
+
+ // Flag enable/disable fserv
+ %FservActive=$config.read(%c,"FservActive","ON")
+
+ // Max time of the shell
+ %MaxShellLife=$config.read(%c,"MaxShellLife",120000)
+
+ // Max time of user's idle time
+ %MaxUserIdle=$config.read(%c,"MaxUserIdle",45000)
+
+ // Max find results
+ %FindMsg=$config.read(%c,"FindMsg",5)
+
+ // Flag for enabling/disabling DccReverse send
+ %DccReverse=$config.read(%c,"DccReverse",0)
+
+ // Colors
+ %NGLc1=$config.read(%c,"NGLc1")
+ %NGLc2=$config.read(%c,"NGLc2")
+
+ if (%NGLc1=="" || %NGLc2=="") {
+ %NGLc1=$(2+$rand(13))
+ %NGLc2=$(2+$rand(13))
+ while(%NGLc1==%NGLc2)
+ %NGLc2=$(2+$rand(13))
+ }
+
+ // Maximum resends
+ %MaxResends=$config.read(%c,"MaxResends",3)
+
+ // Instant send size
+ %InstantSendSize=$config.read(%c,"InstantSendSize",1048576)
+
+ // Resend interval
+ %ResendInterval=$config.read(%c,"ResendInterval",10000)
+
+ // Priority Type
+ %PriorityType = $config.read(%c,"PriorityType",0)
+
+ // Maximum cache dimension
+ %MaxCacheFind=$config.read(%c,"MaxCacheFind",50)
+
+ // Statistics
+ %NGLSentBytes = $config.read(%c,"NGLSentBytes",0.0)
+ %NGLSentFiles = $config.read(%c,"NGLSentFiles",0)
+
+ // MaxSessions
+ %MaxSessions = $config.read(%c,"MaxSessions",5)
+
+ // LoadSendDelay
+ %LoadSendsDelay = $config.read(%c,"LoadSendsDelay",60000)
+
+ // NGLRespondToNGLVersion
+ %NGLRespondToNGLVersion = $config.read(%c,"NGLRespondToNGLVersion",$true)
+
+ %G_NGLdebug=$config.read(%c,"NGLdebug",0)
+
+ %CloneDetection=$config.read(%c,"CloneDetection",$true)
+
+ %triggersnumber=$config.read(%c,Triggersnumber)
+ // moving to first trigger
+
+ NGLfserv::corefunctions::ngldebug triggers to load %triggersnumber
+ %nochannel=$true
+ %cnt=0
+ %total=0
+ // while there are triggers
+ while(%total!=%triggersnumber){
+ config.setsection %c TRIGGER%cnt
+ if ($config.read(%c,"triggername")){
+ %total++
+ NGLfserv::corefunctions::ngldebug reading trigger $config.read(%c,"triggername")
+ // trigger's name
+ %triggername=$config.read(%c,"triggername")
+ %welcomemessage=$config.read(%c,"welcomemessage")
+ %password=$config.read(%c,"password")
+ // loading trigger folder structure
+
+ %Triggers{%triggername}=$new(NGLfserv::classes::trigger,0)
+ %Triggers{%triggername}->$setName(%triggername)
+ %Triggers{%triggername}->%welcomeMessage=%welcomemessage
+ %Triggers{%triggername}->%password=%password
+ %chan=0
+ // searching for trigger's channels
+ while ($config.read(%c,"channel"%chan)) {
+ %nochannel=$false
+ %channelname=$config.read(%c,"channel"%chan)
+ %channel=$NGLfserv::corefunctions::channels(a,%channelname,%triggername)
+ // settings triggertype and prioritytype
+ %Triggers{%triggername}->$getChannel(%channelname)->$setTriggerType($config.read(%c,%channelname"triggertype"))
+ %Triggers{%triggername}->$getChannel(%channelname)->$setAccessType($config.read(%c,%channelname"accesstype"))
+ %Triggers{%triggername}->$getChannel(%channelname)->$setAccessByPswd($config.read(%c,"UsePswd",$false))
+ %chan++
+ }
+ }
+ %cnt++
+ }
+
+ if (!$length(%Triggers{})) return
+ if (!%nochannel) {
+ config.setsection %c channelsgeneraloptions
+ foreach(%channel,$keys(%FservChannels{})) {
+ %FservChannels{%channel}->$setRespToList($config.read(%c,"%channel"respondtolist))
+ %FservChannels{%channel}->$setRespToFind($config.read(%c,"%channel"respondtofind))
+ %FservChannels{%channel}->$setRespToMyQueues($config.read(%c,"%channel"respondtomyqueues))
+ %FservChannels{%channel}->$setUseQuickGet($config.read(%c,"%channel"usequickget))
+ %FservChannels{%channel}->$setDisplayNoOccurrenceFound($config.read(%c,"%channel"displayNoOccurrenceFound))
+ %FservChannels{%channel}->$setMultipleResultsPerLine($config.read(%c,"%channel"multipleResultsPerLine))
+ }
+ }
+ config.close %c
+ %Asyncio=$new(NGLfserv::classes::asynchLoad)
+ foreach(%trigger,$keys(%Triggers{})){
+ %c = $config.open("NGLfservtriggertree"%trigger".kvc",rw)
+ config.setsection %c general
+ if ($file.exists($config.read(%c,"realTriggerPath"))){
+ %Triggers{%trigger}->%c=%c
+ %add=$true
+ %Asyncio->$addtrigger(%Triggers{%trigger})
+ %Triggers{%trigger}->$setRealTriggerPath($config.read(%c,"realTriggerPath"))
+ }
+ %extradirs=$config.read(%c,"extradirs",0)
+ %i=0
+ while (%i<%extradirs){
+ config.setsection %c extradir%i
+ //config.setsection %c %keylist[%i]
+ %extradirpath=$config.read(%c,"extradirpath")
+ if ($file.exists(%extradirpath)){
+ %pathFromTrigger=$config.read(%c,"pathFromTrigger")
+ %Triggers{%trigger}->$appendExtraDir(%extradirpath,%pathFromTrigger)
+ }
+ else{
+ NGLfserv::corefunctions::ngldebug la dir $config.read(%c,"extradirpath") non esiste !
+ config.clearsection %c extradir%i
+ }
+ %i++
+ }
+ }
+ if (!%Asyncio->$start()) delete %Asyncio
+ else return
+ // FIX ME
+ if (%Asyncio->$start())
+ %G_fserverbusyhandler->$setAliasCallback("NGLfserv::config::loadSendAndQueues")
+ else delete %Asyncio
+}
+