]> jfr.im git - irc/kvirc/kvirc-scripts.git/commitdiff
new core recoding... need test :)(see changelog)
authorNoldor <redacted>
Mon, 22 Jan 2007 21:00:54 +0000 (21:00 +0000)
committerNoldor <redacted>
Mon, 22 Jan 2007 21:00:54 +0000 (21:00 +0000)
NGL fserv/changelog.txt
NGL fserv/src/NGLfserv_classes_dirview.kvs
NGL fserv/src/NGLfserv_classes_shell.kvs
NGL fserv/src/NGLfserv_classes_trigger.kvs
NGL fserv/src/NGLfserv_config_load.kvs
NGL fserv/src/NGLfserv_config_saveTree.kvs

index 1119b43e42e9e411d69d53f15919fbbf441e45ac..bcadcd9e6c997cb62317bf3975cc1560323792e6 100644 (file)
@@ -1,5 +1,10 @@
 [Noldor, 22 january 2007]\r
 - fixed checkboxes (from now we must use clicked signal instead of toggle signal)\r
+- rewritten virtual tree code and fast load/save tree info (need to remove old config files)\r
+- completed dirview gui (maybe instable... need testing)\r
+- added simple wildcards filter in fserver shell navigation\r
+N.B.: THIS VERSION IS A WIP AND CAN BE VERY UNSTABLE DUE TO THE INTERNAL NEW RECODING AND IT IS NOT YET FULL TESTED! USE IT AT OWN RISK :)\r
+\r
 \r
 [LoSko, 21 january 2007]\r
 - wizard styling\r
index 1bfd1ddca031ef6486d825c7025ff3f8e27183f9..ef8b811adac0169b1f978e2123743a46290f0ce5 100644 (file)
@@ -26,21 +26,21 @@ alias(NGLfserv::classes::dirview)
                        $$->$setSelectionMode("Single")
                        $$->$setSorting(-1,$false)
                }
-               newView()
-               {
-                       $$->$setTree($0)
-                       $$->$setTreeMode($1,$0)
-                       $$->$showTree()
-                       $$->$setEnabled($2)
-               }
-               function showTree()
+               
+               function createTree()
                {
+                       if ($$->%trigger) $$->$deleteNode($$)
+                       $$->%trigger=$0
+                       $$->%virtual_node=$$->%trigger->$firstNode()
+                       objects.connect $$->%trigger updated $$ refreshView
                        if ($$->%trigger->%noNode) {
                                NGLfserv::corefunctions::ngldebug empty TREE 
                                $$->%nodata=$true
                                return $true
                        }
-                       $$->$deleteNode($$)
+               }
+               function showTree()
+               {
                        $$->$showNode($$)
                }
                currentChangedEvent()
@@ -57,12 +57,7 @@ alias(NGLfserv::classes::dirview)
                        %children[]=$$->$children()
                        for (%i=0;%i<$length(%children[]);%i++) delete %children[%i]
                }
-               function setTree()
-               {
-                       $$->%virtual_node=$0->$firstNode()
-                       $$->%trigger=$0
-                       objects.connect $0 scancompleted $$ refreshView
-               }
+               
                function setWidgetOutput()
                {
                        $$->%info_widget=$0
@@ -87,7 +82,7 @@ alias(NGLfserv::classes::dirview)
                                else %item->$setChecked($true)
                                %item->$setText(0,$$->%trigger->$text(%folder[%i]))                             
                                %item->$setText(1,"Dir")
-                               if (%folder[%i]->%realRootFolder)
+                               if (%folder[%i]->%extraDirPath)
                                        %item->$setPixmap(0,$$->%pix_redfolder)
                                else
                                        %item->$setPixmap(0,$$->%pix_folder)
@@ -98,17 +93,17 @@ alias(NGLfserv::classes::dirview)
                        // show files
                        %i=0
                                
-                       %len=$$->%trigger->$filesCount()
+                       %len=$$->%trigger->$filesCount(%virtual_node)
                        for (%i=0;%i<%len;%i++){
                                %item_file=$new(listviewitem,%listviewitem_node)
                                %item_file->$setCheckable($true)
-                               if ($$->%trigger->$isFileNotShared(%i) || !$$->$check(%listviewitem_node)) %item_file->$setChecked($false)
+                               if ($$->%trigger->$isFileNotShared(%virtual_node,%i) || !$$->$check(%listviewitem_node)) %item_file->$setChecked($false)
                                else %item_file->$setChecked($true);
                        
-                               %item_file->$setText(0,$$->%trigger->$fileAt(%i))
-                               %item_file->$setText(1,$NGLfserv::corefunctions::calc($$->%trigger->$fileSizeAt(%i)))
+                               %item_file->$setText(0,$$->%trigger->$fileAt(%virtual_node,%i))
+                               %item_file->$setText(1,$NGLfserv::corefunctions::calc($$->%trigger->$fileSizeAt(%virtual_node,%i)))
                                                        
-                               switch($str.right($$->%trigger->$fileAt(%i),3))
+                               switch($str.right($$->%trigger->$fileAt(%virtual_node,%i),3))
                                {
                                        case (jpg)
                                        {
@@ -181,14 +176,11 @@ alias(NGLfserv::classes::dirview)
                }
                internal function rightButtonClickedEvent()
                {
-                       return
-                       NGLfserv::corefunctions::ngldebug trigger right
                        if ($$->%nodata) return
                        if ($objects.exists($0)) $$->%item_clicked=$0
                        else $$->%item_clicked=$$
                        %popup=$new(popupmenu)
                        $$->%id_add=%popup->$insertItem($tr("Add folder"))
-                       //if ($$->%item_clicked!=$$) $$->%id_remove=%popup->$insertItem($tr("Remove ")$$->%item_clicked->$text(0))
                        objects.connect %popup activated $$ popuphandler
                        %popup->$exec()
                        delete %popup
@@ -201,6 +193,8 @@ alias(NGLfserv::classes::dirview)
                        
                function popuphandler()
                {
+                        $$->$addTo($$->%item_clicked)
+                        /*
                        switch ($0)
                        {
                                case ($$->%id_add)
@@ -208,22 +202,9 @@ alias(NGLfserv::classes::dirview)
                                         $$->$addTo($$->%item_clicked)
                                         break
                                }
-                               case ($$->%id_open)
-                               {
-                                       $$->$openFile()
-                                       break
-                               }
-                               case ($$->%id_remove)
-                               {
-                                       $$->$remove($$->%item_clicked)
-                                       break
-                               }
-                               case ($$->%id_trigger)
-                               {
-                                       $$->$setTrigger()
-                                       break
-                               }
+               
                        }
+                       */
                }
                
                function getParentNode()
@@ -269,7 +250,7 @@ alias(NGLfserv::classes::dirview)
                {
                        $$->$deleteNode($0)
                        $new(listviewitem,$0)
-                       if ($0->%virtual_node->%realRootFolder)
+                       if ($0->%virtual_node->%extraDirPath)
                                $0->$setPixmap(0,$$->%pix_redfolder)
                        else
                                $0->$setPixmap(0,$$->%pix_folder)
@@ -277,8 +258,10 @@ alias(NGLfserv::classes::dirview)
        
                internal function itemExpandedEvent()
                {
+                       
                        delete $0->$firstChild()
-                       if ($0->%virtual_node->%realRootFolder)
+                       if (!$objects.exists($0->%virtual_node)) return
+                       if ($0->%virtual_node->%extraDirPath)
                                $0->$setPixmap(0,$$->%pix_redfolder_open)
                        else
                                $0->$setPixmap(0,$$->%pix_folder_open)
@@ -287,7 +270,6 @@ alias(NGLfserv::classes::dirview)
        
                function fileDroppedEvent()
                {       
-                       return
                        if (!$objects.exists($0)) %node=$$
                        else %node=$0
                        %path=$str.replace($1,"\/","\\")
@@ -297,10 +279,17 @@ alias(NGLfserv::classes::dirview)
                        else{
                                %check=$$->%trigger->$addFolder(%path,%parent->%virtual_node)
                                NGLfserv::corefunctions::ngldebug check %check
-                                if ($typeof(%check)=="hobject")
+                                if ($typeof(%check)=="hobject"){
                                        $$->%trigger->$setChanged($true)
+                                       %rootpath = $str.replace(%path,"/","\\")
+                                       // fixato con la / 
+                                       if($str.right(%rootpath, 1) != "/") %roothpath .= "/"
+                                       $$->%trigger->$appendExtradir(%rootpath,$$->%trigger->$getLocalTriggerPath(%parent->%virtual_node),%check)
+                               }
                                else
                                        if (!%check)  NGLfserv::corefunctions::nglwarning "Folder already present!"
+       
+               
                                        
                        }
                 }
@@ -311,7 +300,9 @@ alias(NGLfserv::classes::dirview)
                }
                function refreshView()
                {
+                       debug refreshing view $0
                        if ($0==$$->%trigger->$firstNode() || $0==$$->%trigger){
+                               debug รจ cambiato il nodo principale
                                $$->$deleteChildren($$)
                                $$->%virtual_node=$$->%trigger->$firstNode()
                                $$->$showNode($$)
@@ -349,9 +340,9 @@ alias(NGLfserv::classes::dirview)
                                        }
                                  }
                                else{
-                                       $$->%trigger->%node=$0->$parent()->%virtual_node
+                                       %node=$0->$parent()->%virtual_node
                                        if (!$0->$isChecked){ 
-                                               $$->%trigger->$setFileNotShared($0->$text(0))
+                                               $$->%trigger->$setFileNotShared(%node,$0->$text(0))
                                                %i=$0->$parent()
                                                while (%i !=$$){
                                                         if ($$->%trigger->$checkChildrenNotShared(%i->%virtual_node)){
@@ -365,7 +356,7 @@ alias(NGLfserv::classes::dirview)
                                                 }
                                        }
                                        else { 
-                                               $$->%trigger->$setFileShared($0->$text(0))
+                                               $$->%trigger->$setFileShared(%node,$0->$text(0))
                                                if ($0->$parent()!=$$){
                                                        %i=$0->$parent()
                                                        %i->$setChecked($true)
index 7d158d064189ebed4cbf7cbb388c814313775171..875c0e06d2045bfd93947cc91b94d47a18aeff4a 100644 (file)
@@ -220,26 +220,27 @@ alias(NGLfserv::classes::shell)
                                        }
                                }
                        }
-                       $$->%trigger->$setNode($$->%here)
+                       //$$->%trigger->$setNode($$->%here)
                }
                function parseCommandDir()
                {
-                       if (!$$->%parameter) $$->$showDir($$->%here,$0)
+                       if (!$$->%parameter || $str.contains($$->%parameter,"*") || $str.contains($$->%parameter,"?")) $$->$showDir($$->%here,$0,$$->%parameter)
                        else{
                                %tmp=$$->$toFolder($$->%parameter)
-                               if (%tmp) $$->$showDir(%tmp,$0)
+                               if (%tmp) $$->$showDir(%tmp,$0,"*")
                        }
                }
                function showdir()
                {
                        #-------Do not modify this output format, due compatibility issues with other fserv scripts.
-                       $$->%trigger->$setNode($0)
                        $$->$msgShow($0)
+                       if (!$2) %filter="*"
+                       else %filter=$2
                        %folderchildren[]=$0->$children()
                        %folder=$0
                        %i=0
                         while(%i!=$length(%folderchildren[])) {
-                               if (!%folderchildren[%i]->%dirNotShared){
+                               if (!%folderchildren[%i]->%dirNotShared && $str.matchnocase(%filter,%folderchildren[%i]->%text)){
                                        if($1=="dir") {
                                                #-------Compatibility requires that all folders are shown in uppercase.
                                                NGLfserv::corefunctions::say $$->%shellwindow $str.upcase($$->%trigger->$text(%folderchildren[%i]))
@@ -250,11 +251,10 @@ alias(NGLfserv::classes::shell)
                                }
                                %i++
                        }
-                       //if (!$$->%trigger->$filesCount(%folder)) return
-                       for(%i=0;%i<$$->%trigger->$filesCount();%i++)   {
-                               %file=$$->%trigger->$fileAt(%i)
-                               if(!$$->%trigger->$isFileNotShared(%i)){
-                                       %size=$$->%trigger->$fileSizeAt(%i)
+                       for(%i=0;%i<$$->%trigger->$filesCount($$->%here);%i++)  {
+                               %file=$$->%trigger->$fileAt($$->%here,%i)
+                               if(!$$->%trigger->$isFileNotShared($$->%here,%i) && $str.matchnocase(%filter,%file)){
+                                       %size=$$->%trigger->$fileSizeAt($$->%here,%i)
                                        if($1=="dir") {
                                        #-------Compatibility requires that all files are shown in lowercase, followed only by file size, in the format <size> <unit>
                                                 NGLfserv::corefunctions::say $$->%shellwindow $str.lowcase(%file) $NGLfserv::corefunctions::calc(%size)
@@ -279,7 +279,7 @@ alias(NGLfserv::classes::shell)
                        }
                        else %folder=$$->%trigger->$getFolderObjFromPath($0,$$->%here)
                        if (!%folder){
-                               %folder=$$->%trigger->$getFolderObjFromPath($0)
+                               %folder=$$->%trigger->$getFolderObjFromPath($0,$$->%here)
                                if (!%folder) {
                                        $$->$msg("Folder "$0" does not exists")
                                        return $false
@@ -301,24 +301,21 @@ alias(NGLfserv::classes::shell)
                {
                        %tmp=$str.replace($$->%parameter,"/","\\")
                        if (!$str.contains(%tmp,"/")){
-                               $$->%trigger->$setNode($$->%here)
                                if ($str.left(%tmp,2)=="\|f") {
-                                       %file=$$->%trigger->$getFileById($$->%parameter,$$->%here)
-                                       debug file %file
+                                       %file=$$->%trigger->$getFileById($$->%here,$$->%parameter)
                                }
                                else
-                               %file=$$->%trigger->$fileExists(%tmp)
+                               %file=$$->%trigger->$fileExists($$->%here,%tmp)
                                if (!%file) {
                                        $$->$msg("File "%tmp" does not exist")
                                        return $true
                                }
                                %realpath = $$->%trigger->$getRealPath($$->%here)
-                               %path=%realpath%file
+                               %path=%realpath%file            
                        }
                        else %path=$$->$generatePath()
                        if (!%path) return
-       
-                       %size = $$->%trigger->$fileSizeAt($$->%trigger->$fileIndex($file.extractfilename(%path)))
+                       %size = $$->%trigger->$fileSizeAt($$->%here,$$->%trigger->$fileIndex($$->%here,$file.extractfilename(%path)))
                        %triggerName = $$->%trigger->$triggerName()
                        if (%Virtualshell) %Virtualshell->$append(sending %path)
                        else
@@ -330,8 +327,13 @@ alias(NGLfserv::classes::shell)
                        %foldertmp=$file.extractpath($$->%parameter)
                        %folder=$$->$toFolder(%foldertmp)
                        if(!%folder) return $false()
-                       %file=$$->%trigger->$fileExists(%filetmp)
-                       if (%file) return $$->%trigger->$getRealPath(%folder)
+                       %file=$$->%trigger->$fileExists($$->%here,%filetmp)
+                       if (%file){
+                               %path=$$->%trigger->$getRealPath(%folder)
+                               debug il file con percorso %path esiste? $file.exists(%path)
+                               
+                                return $$->%trigger->$getRealPath(%folder)
+                       }
                        else $$->$msg("File "%filetmp" does not exist")
                        return $false
                }
index 946da4489c138a5ba5749fa96525e65904569c84..c752678d9ea9f577dc00dca4206ad83bf5701f63 100644 (file)
@@ -5,10 +5,12 @@ alias(NGLfserv::classes::trigger)
                function constructor()
                {
                        // creo la lista in cui verranno memorizzati i nodi "reali" cioรจ i vari punti di ingresso sul disco
-                       $$->%realRootFolder=$new(list,$this)
+                       $$->%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()
                {
@@ -61,56 +63,37 @@ alias(NGLfserv::classes::trigger)
                        if ($$->%activechannels{$0}) return $true
                        else return $false
                }
-               
-               function getRealRootFolder()
+               setRealTriggerPath()
+               {
+                        $$->%realTriggerPath=$0
+               }
+               function getRealTriggerPath()
                {
                
-                       return $0->%realRootFolder
-               }
-       /*      
-               function removeFile(file)
-               {
-                       // funzione che rimuove un file da un nodo utilizzando come parametro il nome del file
-                       %i=0
-                       %len=$$->%node->%idx_file()
-                       for(%i=0;%i<%len;%i++) if ($$->%node->%file_list[%i]==$0) break;
-                       $$->$removeFileAt(%i)
-                }
-                */
+                       return $$->%realTriggerPath
+               }
                 function removeNode(virtual node)
                {
-                       if ($0->%realRootFolder
-                               $$->$removeRealRootFolder($0)
+                       if ($0->%extraDirPath
+                               $$->$removeExtraDir($0)
                        delete $0
                }
-               function removeRealRootFolder(node)
+               function removeExtraDir(node)
                {
-                       %i=0
-                       while($$->%realRootFolder->$item(%i)->%node!=$0 && $$->%realRootFolder->$count()>%i) {
-                                       %i++
+                       for(%i=0;%i<$length($$->%extraDirs->$count);%i++;){
+                               if ($$->%extraDirs->$item(%i)->%node==$0) break
                        }
-                       delete $$->%realRootFolder->$item(%i)
-                       $$->%realRootFolder->$remove(%i)
-               }
-               /*
-               removeFileAt(index)
-               {
-                       // restituisce il nome del file dell'indice index (come nodo di riferimento viene utilizzato quello in $$->%index)
-                       %idx=$0
-                       if (%idx==0 && $$->%idx_file==1) {
-                               $$->%node->%files_list[]=;
-                               //$$->%idx_file=0;
-                               return
-                        }
-                       else {
-                               %len=$($length($$->%node->%files_list[]-$0))
-                               for (%i=%idx;%i<%len;%i++){
-                                        $$->%node->%files_list[%i]=$$->%node->%files_list[$(%i+1)]
-                               }
-                               //$$->%node->%idx_file --
-                       }
+                       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.
@@ -119,10 +102,10 @@ alias(NGLfserv::classes::trigger)
                        %rootpath = $str.replace($0,"/","\\")
                        if($str.right(%rootpath, 1) != "/") %rootpath .= "/"            
                        $$->%firstnode=$$->$addNode("",$this,%rootpath)
+                       $$->%realTriggerPath = $str.replace($0,"/","\\")
                        $$->%rootnode=$$->%firstnode
                        $$->%triggerName=$1
                        $$->%rootpath=%rootpath
-                       //$$->$startTimer(1000)
                        $$->%time=$hptimestamp()
                        $$->%time_available=0.300
                        $$->%speedmeter=0
@@ -144,22 +127,19 @@ alias(NGLfserv::classes::trigger)
                        %node->%index=$$->%index
                        $$->%index++
                        %node->%text=$0
-                       if ($2){
-                               %node->%realRootFolder=$2       
-                               %realnode=$new(object,$this)
-                               %realnode->%realRootFolder=$2
-                               %realnode->%node=%node
-                               $$->%node=%node->$parent()
-                       //      NGLfserv::corefunctions::ngldebug appendo al nodo parent $$->%node->%text
-                               %realnode->%pathFromTrigger=$$->$getLocalTriggerPath()
-                       //      NGLfserv::corefunctions::ngldebug percorso rispetto al trigger %realnode->%pathFromTrigger
-                               $$->%realRootFolder->$append(%realnode)
-                       //      NGLfserv::corefunctions::ngldebug appeso alla lista dei real root folder con numero $$->%realRootFolder->$count
-                       }
-                       %node->%idx_file=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
@@ -175,10 +155,13 @@ alias(NGLfserv::classes::trigger)
                        // estraiamo il nome della dir 
                        %dir_name = $file.extractfilename($str.left(%rootpath,$($str.len(%rootpath)-1)))
                        // e verifichiamo se giร  esiste nel nodo parent
-                       debug adding with parent $1
-                       if ($$->$checkFolderExists(%dir_name,$1)) return $false
+                       if ($$->$checkFolderExists(%dir_name,$1)) {
+                               debug %dir_name giร  esiste
+                               return $false
+                       }
                        // aggiungiamo il nodo al parent
-                       %node=$$->$addNode(%dir_name,$1,$file.extractPath(%rootpath)"/")
+                       %node=$$->$addNode(%dir_name,$1)
+                       debug parent $1->%text e rooth %rootpath
                        // e memorizziamo lil nodo e la path per utilizzarli come riferimento nello scan in background
                        $$->%rootnode=%node
                        $$->%rootpath=%rootpath
@@ -190,102 +173,100 @@ alias(NGLfserv::classes::trigger)
                        $$->%count=0
                        $$->%oldcount=0
                        $$->$emit(triggerBusy)
+                       $$->%noupdate=$true
+                       $$->%addnode=$1
                        $$->$scanSubFolders(%rootpath,%node)
                        $$->$startTimer(1000)
                        return %node
                }
                function update()
                {
-                       $$->%realRootFolder->$moveFirst()
-                       $$->$updateStart($$->%realRootFolder,$true)
+                       $$->$updateStart($true)
                }
                function updateStart()
                {
-                       //      NGLfserv::corefunctions::ngldebug "Updating"
-                               
-                               $$->%rootpath=$0->$current()->%realRootFolder
-                               $$->%realTemp=$new(list,$$)
-                               while ($0->$count()){
-                                       %realnode=$new(object,$this)
-                               //      %realnode->%node=$0->$item(0)->%node
-                                       %realnode->%realRootFolder=$0->$item(0)->%realRootFolder
-                                       %realnode->%pathFromTrigger=$0->$item(0)->%pathFromTrigger
-                                       if ($1) %realnode->%dir=$0->$item(0)->%node->%text
-                                       else %realnode->%dir=$0->$item(0)->%dir
-                                       delete $0->$item(0)
-                                       $0->$remove(0)
-                                       $$->%realTemp->$append(%realnode)
-                               }
-                               $$->%rootpath=$$->%rootpath$$->%realTemp->$item(0)->%dir
-                               $0->$moveFirst()
-                               if ($1){        
-                                       $$->%nsi=$$->$getNotSharedInfo()
-                                       delete $$->$firstNode()
-                               }
-                               NGLfserv::corefunctions::ngldebug "start background HD scanning"        
-                               if ($$->%firstNodeEmpty){
-                                       NGLfserv::corefunctions::ngldebug first node is empty
-                                       NGLfserv::corefunctions::ngldebug add node with path $$->%rootpath
-                                       $$->%firstnode=$$->$addNode("",$this,"")
-                                       $$->%firstNodeEmpty=$false
-                                       $$->%intimer=$true
-                                       $$->%rootnode=$$->$addFolder($$->%rootpath,$$->%firstnode)
-                                       $$->%intimer=$false
-                               }
-                               else{
-                                       $$->%firstnode=$$->$addNode("",$this,$$->%rootpath)
-                                       $$->%rootnode=$$->%firstnode
-                                       NGLfserv::corefunctions::ngldebug add main node with path $$->%rootpath
-                               }
+                       $$->%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)
-                               $$->%realTemp->$moveFirst()
-                               $$->%time_available=0.300
                                $$->%speedmeter=0
-                               $$->%updateTimer=$$->$startTimer(1000)
-                                               
+                               $$->$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
+                               ($$->%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()
                {
-                       $$->%intimer=$true
                        $$->%time=$hptimestamp()
                        $$->%count=0
                        //debug in timer
                        if (!$$->$scanSubFolders($$->%rootpath,$$->%rootnode)) {
-                               NGLfserv::corefunctions::ngldebug scanned $$->%count nodes in $$->%time_available ms
+                               //NGLfserv::corefunctions::ngldebug scanned $$->%count nodes in $$->%time_available ms
                                $$->$resetFlag()
-                               //NGLfserv::corefunctions::ngldebug update $$->%updateTimer
-                               if ($0!=$$->%updateTimer){
-                                       $$->$killtimers();NGLfserv::corefunctions::ngldebug scan completed;
-                                       $$->$emit(scancompleted,$$->%rootnode->$parent())
-                                       $$->$emit(triggerReady)
-                               }
-                               else{
-                                       %a=$$->%realTemp->$moveNext()
-                                       if ($$->%realTemp->$current){
-                                               //debug ok al prossimo rootfolder
-                                               while (!$file.exists($$->%realTemp->$current()->%realRootFolder)){
-                                                       $$->%realTemp->$moveNext()
-                                                       if (!$$->%realTemp->$current()){
-                                                               $$->$endScan()
-                                                               return
-                                                       }               
-                                               }
-                                               //debug esiste $$->%realTemp->$current()->%realRootFolder$$->%realTemp->$current()->%dir/
-                                               $$->%rootpath=$$->%realTemp->$current()->%realRootFolder$$->%realTemp->$current()->%dir/
-                                       //      debug pathFromtrigger $$->%realTemp->$current()->%pathFromTrigger
-                                               $$->%realTemp->$current()->%node=$$->$getFolderObjFromPath($$->%realTemp->$current()->%pathFromTrigger)
-                                               NGLfserv::corefunctions::ngldebug aggiungo un nuovo nodo in base a questo percorso $$->%rootpath
-                                               $$->%rootnode=$$->%realTemp->$current()->%node
-                                               $$->$addFolder($$->%rootpath,$$->%realTemp->$current()->%node)
-                                       }
-                                       else{
-                                               $$->$endScan()
-                                               return
-                                       }
-                               }
+                               $$->$killtimers()
+                               $$->$emit(scancompleted)
                        }
                        else{
                                NGLfserv::corefunctions::ngldebug scanned $$->%count nodes in $$->%time_available ms with 
@@ -306,29 +287,22 @@ alias(NGLfserv::classes::trigger)
                                $$->%oldcount=$$->%count
                                */
                        }
-                       $$->%intimer=$false                     
-               }
-               function endScan()
-               {
-                       $$->$killtimers()
-                       $$->%intimer=$false                     
-                       for (%i=0;%i<$$->%realTemp;%i++) delete $$->%realTemp->$item(%i)
-                       delete $$->%realTemp
-                       if ($objects.exists($$->%nsi)){
-                               $$->$createDirFilesNotShared($$->%nsi)
-                               delete $$->%nsi
-                               $$->%nsi=
-                       }
-                       //      NGLfserv::corefunctions::ngldebug scan completed;
-                       $$->%updateTimer=$false
-                       $$->%changed=$true
-                       $$->$emit(triggerReady)
-                       $$->$emit(scancompleted,$$->%rootnode->$parent())       
                }
                function scanSubFolders()
                {
-                       if ($version(s)<20070116) $$->$oldScanSubFolders($0,$1)
-                       else $$->$fastScanSubFolders($0,$1)
+                       $$->%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()
                {
@@ -339,17 +313,16 @@ alias(NGLfserv::classes::trigger)
                                         %offset=0
                                         $$->%cache[]=$file.ls(%path,f)
                                }
-                       else
-                       %offset=$1->%thisNodeCompleted
-                       %len=$length($$->%cache[])
-                       $$->%count+=$(%len-%offset)
-                       $$->%node=%parent_node
-                       for(%j=%offset;%j<%len;%j++){
-                               if ($$->%cache[%j]) 
-                               $$->$appendFile($$->%cache[%j],$file.size(%path\/$$->%cache[%j]))
-                               if (($hptimestamp-$$->%time)>$$->%time_available) break
-                       }
-                       if (%j==%len) {$1->%thisNodeCompleted=-1;$$->%cache[]=;}
+                               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
@@ -362,7 +335,7 @@ alias(NGLfserv::classes::trigger)
                                if ((%folders[%ind]!="..") && (%folders[%ind]!=".")) {
                                        if (%i<%len) %node=%children[%i]
                                        else %node=$$->$addNode(%folders[%ind],%parent_node)
-                                       if (!%node->%allSubFoldersScanned || %node->%realRootFolder){
+                                       if (!%node->%allSubFoldersScanned || %node->%extraDirPath){
                                                if (!$$->$oldScanSubFolders(%path%folders[%ind]"/",%node)){
                                                        %node->%allSubFoldersScanned=$true()
                                                }
@@ -376,50 +349,47 @@ alias(NGLfserv::classes::trigger)
                }
                function fastScanSubFolders()
                {
-                       # nella prima parte di $scanfolders() aggiungiamo i files alla lista del nodo attuale
                        %path=$0
+       
                        %parent_node=$1
-                       if ($1->%thisNodeCompleted!="-1"){
-                               
-                               $1->%files_list[]<+$file.ls(%path,f)
+                       %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)
-                               $1->%thisNodeCompleted=-1
+                               //$1->%thisNodeCompleted=$true
+                               if (($hptimestamp-$$->%time)>$$->%time_available) return $true  
                        }
-                       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->%realRootFolder){
-                                               if (!$$->$fastScanSubFolders(%path%folders[%ind]"/",%node)){
-                                                       %node->%allSubFoldersScanned=$true()
-                                               }
-                                               else %fl=$true                  
-                                       }
-                                       %i++
-                               }
-                               if (%fl) break
+                       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
+                       if (%fl) return $true;
                }
                
-               function appendFile(file,size)
+               function appendFile(node,file,size)
                {
-                               $$->%node->%files_list[$$->%node->%idx_file]=$0
-                               $$->%node->%file_size[$$->%node->%idx_file]=$1
-                               $$->%node->%idx_file++
+                               
+                               $0->%files_list[]<+$1
+                               $0->%file_size[]<+$2
                }
        
                function resetFlag()
                {
                        $$->$reset($$->%firstnode)
-                       
-               }
+                       }
                function reset()
                {
                        $0->%allSubFoldersScanned=
@@ -433,7 +403,7 @@ alias(NGLfserv::classes::trigger)
                # 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()
+               function getVirtualFolderPath(node)
                {
                        %item=$0
                        while(%item->$parent()->$parent()) {
@@ -461,14 +431,14 @@ alias(NGLfserv::classes::trigger)
                        return %found
                }
                        
-               function getFileById()
+               function getFileById(node,id)
                {
-                       $$->%node=$1
-                       %fl=$0
+                       %node=$0
+                       %fl=$1
                        %child_idx=$str.rightfromfirst($str.lowcase(%fl),"|f")
                        if (!$str.isnumber(%child_idx)) return $false
-                       if ((%child_idx>=$$->$filesCount()) || (%child_idx<0)) return $false
-                       else return $$->$fileAt(%child_idx)
+                       if ((%child_idx>=$$->$filesCount(%node)) || (%child_idx<0)) return $false
+                       else return $$->$fileAt(%node,%child_idx)
                }       
                
                function getFolderObjFromPath()
@@ -476,13 +446,11 @@ alias(NGLfserv::classes::trigger)
                        %path=$0
                        if ($1) %father=$1
                        else %father=$$->%firstnode
-                       %index=0
-                       
+                       %index=0                
                        while ($str.token(%index,"/",%path)){
                                %found=$false
                                %token= $str.token(%index,"/",%path) 
-                               %children[]=%father->$children()
-                               
+                               %children[]=%father->$children()                
                                for (%i=0;%i<$length(%children[]);%i++) {
                                         if ($$->$text(%children[%i]) ==%token) {
                                                %father=%children[%i]
@@ -498,7 +466,7 @@ alias(NGLfserv::classes::trigger)
        
                function getLocalTriggerPath()
                {
-                       %item=$$->%node
+                       %item=$0
                        %path=%item->%text"/"
                         while(%item!=$$) {
                                %item=%item->$parent()
@@ -506,16 +474,21 @@ alias(NGLfserv::classes::trigger)
                        }
                        return %path    
                }
-               function getRealPath()
+               function getRealPath(node)
                {
                        
                        %item=$0
-                       %path=%item->%text"/"
-                       while(!%item->%realRootFolder) {
+                       if (%item==$$->%firstNode) debug sono nel nodo principale
+                       else debug non SONO
+                       //%path=%item->%text"/"
+                       while((!%item->%extraDirPath) && (%item!=$$->%firstNode)) {
+                                       debug risalgo %item->%text
+                                       %path<+%item->%text"/"
                                        %item=%item->$parent()
-                                       %path=%item->%text"/"%path
-                       }               
-                       return %item->%realRootFolder%path
+                                       //%path=%item->%text"/"%path
+                       }
+                       if (%item!=$$->%firstNode) return %item->%extraDirPath%path
+                       else return $$->%realTriggerPath%path
                }
        
                internal function checkFolderExists()
@@ -527,21 +500,21 @@ alias(NGLfserv::classes::trigger)
                        return $false
                }
                
-               function filesList()
+               function filesList(node)
                {
-                       return $$->%node->%files_list[]
+                       return $0->%files_list[]
                }
                
-               function sizesList()
+               function sizesList(node)
                {
-                       return $$->%node->%file_size[]
+                       return $0->%file_size[]
                }
                        
                
                
-               function filesCount()
+               function filesCount(node)
                {
-                       return $length($$->%node->%files_list[])
+                       return $length($0->%files_list[])
                }
                
                function somethingHasChanged()
@@ -552,38 +525,37 @@ alias(NGLfserv::classes::trigger)
                {
                        $$->%changed=$0
                }
-               function fileSizeAt(index)
+               function fileSizeAt(node,index)
                {
-                       return $$->%node->%file_size[$0]
+                       return $0->%file_size[$1]
                }
-               function fileAt(index)
+               function fileAt(node,index)
                {
-                       return $$->%node->%files_list[$0]
+                       return $0->%files_list[$1]
                }
-               function fileIndex(file)
+               function fileIndex(node,file)
                {
-                       for (%i=0;%i<$length($$->%node->%files_list[]);%i++) {
-                               if ($$->%node->%files_list[%i]==$0) return %i
+                       for (%i=0;%i<$length($0->%files_list[]);%i++) {
+                               if ($0->%files_list[%i]==$1) return %i
                        }
                        return -1
                }
                        
-               function setText(text,node)
+               function setText(node,text)
                {
-                       $$->%node->%text=$0
+                       $0->%text=$1
                }
                function text(node)
                {
                        return $0->%text
                }
-               function isFileNotShared()
+               function isFileNotShared(node,file)
                {
-                       if ($$->%node->$parent()->%dirNotShared || $$->%node->%filesNotShared{$$->%node->%files_list[$0]}) return $true
+                       if ($0->$parent()->%dirNotShared || $0->%filesNotShared{$0->%files_list[$1]}) return $true
                        else return $false
                }
-               function setFoldersNotShared()
+               function setFoldersNotShared(node)
                {
-                       //$0->%dirNotShared=$true
                        $0->%filesNotShared{}=
                        %folder[]=$0->$children()
                        %len=$length(%folder[])
@@ -591,7 +563,7 @@ alias(NGLfserv::classes::trigger)
                                if (!%folder[%i]->%dirNotShared) $$->$setFoldersNotShared(%folder[%i])
                        }       
                }
-               function setFoldersShared()
+               function setFoldersShared(node)
                {
                        $0->%dirNotShared=
                        $0->%filesNotShared{}=
@@ -599,24 +571,25 @@ alias(NGLfserv::classes::trigger)
                        %len=$length(%folder[])
                        for(%i=0;%i<%len;%i++;) $$->$setFoldersShared(%folder[%i])      
                }
-               function  setFileNotShared()
+               function  setFileNotShared(node,file)
                {
-                       $$->%node->%filesNotShared{$0}=$true
+                       $0->%filesNotShared{$1}=$true
                }
-               function  setFileShared()
+               function  setFileShared(node,file)
                {
-                       $$->%node->%filesNotShared{$0}=
-                       if ($$->%node->%filesNotShared{}#) $keys($$->%node->%filesNotShared{})
+                       $0->%filesNotShared{$1}=
+                       if ($0->%filesNotShared{}#) $keys($0->%filesNotShared{})
                        
                }
-               function fileExists(file)
+               function fileExists(node,file)
                {
-                       %file=$str.lowcase($0)
-                       %len=$$->$filesCount()
-                       for (%i=0;%i<%len;%i++) if (%file==$str.lowcase($$->$fileAt(%i))) return $$->$fileAt(%i)
+                       %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()
+               function createDirFilesNotShared(node)
                {
                        for (%i=0;%i<$0->$count();%i++){
                                %obj=$0->$item(%i)
@@ -646,22 +619,22 @@ alias(NGLfserv::classes::trigger)
                }
                function scanNotShared()
                {
-                       $$->%node=$0
-                       if ($length($$->%node->%filesNotShared{})){
+                       %node=$0
+                       if ($length(%node->%filesNotShared{})){
                                %folder=$new(object,$$->%infons)
-                               %folder->%pathfromtrigger=$$->$getLocalTriggerPath()            
-                               foreach(%file,$keys($$->%node->%filesNotShared{}))  %tmp=%tmp%file|
+                               %folder->%pathfromtrigger=$$->$getLocalTriggerPath(%node)               
+                               foreach(%file,$keys(%node->%filesNotShared{}))  %tmp=%tmp%file|
                                %folder->%files=%tmp
                                $$->%infons->$append(%folder)
                        }
-                       %folder[]=$$->%node->$children()
+                       %folder[]=%node->$children()
                        %len=$length(%folder[])
                        for (%i=0;%i<%len;%i++;){
                                if (!%folder[%i]->%dirNotShared) $$->$scanNotShared(%folder[%i])
                                else{
-                                       $$->%node=%folder[%i]
+                                       %node=%folder[%i]
                                        %dir=$new(object,$$->%infons)
-                                       %dir->%pathfromtrigger=$$->$getLocalTriggerPath()
+                                       %dir->%pathfromtrigger=$$->$getLocalTriggerPath(%node)
                                        $$->%infons->$append(%dir)
                                }
                        }
@@ -678,16 +651,16 @@ alias(NGLfserv::classes::trigger)
                }
                function scanTreeForNotShared()
                {
-                       $$->%node=$0
-                       if ($length($$->%node->%filesNotShared{})){
+                       %node=$0
+                       if ($length(%node->%filesNotShared{})){
                                config.setsection $$->%c notshared$$->%ns
                                $$->%ns++
-                               config.write $$->%c pathfromtrigger $$->$getLocalTriggerPath()
-                               foreach(%file,$keys($$->%node->%filesNotShared{}))  %tmp=%tmp%file|
+                               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
+                               NGLfserv::corefunctions::ngldebug files notshared of %node->%text are %tmp
                        }
-                       %folder[]=$$->%node->$children()
+                       %folder[]=%node->$children()
                        %len=$length(%folder[])
                        for (%i=0;%i<%len;%i++;){
                                if (!%folder[%i]->%dirNotShared) $$->$scanTreeForNotShared(%folder[%i])
@@ -695,8 +668,8 @@ alias(NGLfserv::classes::trigger)
                                        NGLfserv::corefunctions::ngldebug completamente non sharata %folder[%i]->%text
                                        config.setsection $$->%c notshared$$->%ns
                                        $$->%ns++
-                                       $$->%node=%folder[%i]
-                                       config.write $$->%c pathfromtrigger $$->$getLocalTriggerPath()
+                                       %node=%folder[%i]
+                                       config.write $$->%c pathfromtrigger $$->$getLocalTriggerPath(%node)
                                }
                        }
                }
index d1aba1ded30e139a7036d9b65a1fd656d95eba14..bce114cf2182f0ef08c9492dc86ce37beffb9bcd 100644 (file)
-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",30000)
-       
-       %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)
-               %instances=$new(list,%Asyncio)
-       foreach(%trigger,$keys(%Triggers{})){
-       
-               %c = $config.open("NGLfservtriggertree"%trigger".kvc",rw)
-               config.setsection %c general
-               %realnodes=$config.read(%c,"realnodes",0)
-               %i=0
-               //%keylist[]=$config.sectionlist(%c)
-               /*for(%i=0;%i<$length(%keylist[]);%i++;)
-               {
-               */
-               %realrootfolderslist=$new(list,%instances)
-               %instances->$append(%realrootfolderslist)
-               %realrootfolderslist->%trigger=%Triggers{%trigger}
-               %realrootfolderslist->%c=%c
-               %inst=$false
-               //debug trigger
-               while (%i<%realnodes){
-                       config.setsection %c realnode%i
-                       //config.setsection %c %keylist[%i]
-                       %rrf=$config.read(%c,"realRootFolder")
-                       if (%rrf)
-                       {
-                               if ($file.exists(%rrf$config.read(%c,"realnodedir")))
-                               {
-                                       %instance_node=$new(object,%instance)
-                                       %instance_node->%realRootFolder=%rrf
-                                       %instance_node->%pathFromTrigger=$config.read(%c,"pathFromTrigger")
-                                       %instance_node->%dir=$config.read(%c,"realnodedir")
-                                       if (%instance_node->%dir=="\/") %instance_node->%dir=""
-                                       %realrootfolderslist->$append(%instance_node)
-                                       //debug creo istanza con il %rrf
-                                       if (!%inst){
-                                               objects.connect %Triggers{%trigger} scancompleted %Asyncio nexttrigger
-                                               %inst=$true
-                                       }
-                               }
-                               else{
-                                       NGLfserv::corefunctions::ngldebug la dir $config.read(%c,"realRootFolder")$config.read(%c,"realnodedir") non esiste: rimuovo il nodo dalla config!
-                                       config.clearsection %c realnode%i
-                                       if (!$config.read(%c,"realnodedir")){
-                                               %Triggers{%trigger}->$setFirstEmptyNode()
-                                       }
-                               }
-                       }
-                       %i++
-               }
-               if (!%inst){
-                        %Triggers{%trigger}->%noNode=$true
-                         config.close %c
-               }
-       
-       }
-       if (%Asyncio->$start(%instances))
-               %G_fserverbusyhandler->$setAliasCallback("NGLfserv::config::loadSendAndQueues")
-       else delete %Asyncio
-}
-
+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",30000) \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
index 06d817e4aa9056ba7f01cf64876f00b6cd77d654..42352b3470af7d8747ad1cd2cf1725c480b03582 100644 (file)
@@ -4,17 +4,18 @@ alias(NGLfserv::config::saveTree)
                if (%trigger->$somethingHasChanged){
                        %c = $config.open("NGLfservtriggertree"%trigger->$triggerName()".kvc",w)
                        %i=0
-                       NGLfserv::corefunctions::ngldebug save nr %trigger->%realRootFolder->$count()
-                       while (%i<%trigger->%realRootFolder->$count()){
-                               config.setsection %c realnode%i
-                               config.write %c realrootfolder %trigger->%realRootFolder->$item(%i)->%realRootFolder
-                               config.write %c pathfromtrigger %trigger->%realRootFolder->$item(%i)->%pathFromTrigger
-                               config.write %c realnodedir %trigger->%realRootFolder->$item(%i)->%node->%text
+                       debug count extra dir trigger %trigger->$triggerName %trigger->$extraDirsCount()
+                       while (%i<%trigger->$extraDirsCount()){
+                               debug 
+                               config.setsection %c extradir%i
+                               config.write %c extradirpath %trigger->$extraDir(%i)->%extraDirPath
+                               config.write %c pathfromtrigger %trigger->$extraDir(%i)->%pathFromTrigger
                                %i++
                        }
                        %ns=%trigger->$saveNotSharedInfo(%c)
                        config.setsection %c general
-                       config.write %c realnodes %trigger->%realRootFolder->$count()
+                       config.write %c extradirs %trigger->$extraDirsCount()
+                       config.write %c realtriggerpath %trigger->$getRealTriggerPath()
                        config.write %c notshared %ns
                        config.close %c
                        %trigger->$setChanged($false)