mDir - Directory Monitor — File Browser

mDir-DirectoryMonitorv2.0 / mDir-DirectoryMonitorv2.0 / mdir.mrc

mdir.mrc — 16.92 KB — Download this file

; mDir2
; -------------------------

; Just type /createrandomini and it will create a test ini you can use.
alias cndir {
  var %seed = $ticks
  if ($1 == $null && $isdir($1-) != $true) { halt }
  var %filename = $scriptdir $+ $md5($lower($1-)) $+ .mdl
  var %nomd5 = $lower($1-)
  var %files = $findfile(%nomd5,*,0,0))
  var %folders = $finddir(%nomd5,*,0,0)
  var %lbi = $calc(90 / (%files + %folders)), %lbx = 0
  write $+(",%filename,")
  loadbar open
  loadbar title Adding Files
  while (%files) {
    %afile = $replace($findfile(%nomd5,*,%files,0),$chr(32),$chr(21))
    writeini $+(",%filename,") files $nopath(%afile) $crc(%afile)
    inc %lbx %lbi | loadbar pos %lbx | loadbar title Adding File: $left(%afile,35) $+ $iif($len(%afile) < 35,...) 
    dec %files
  }
  loadbar Title Adding Folders
  while (%folders) {
    %afile = $replace($finddir(%nomd5,*,%folders,0),$chr(32),$chr(21))
    writeini $+(",%filename,") folders $nopath(%afile) $true
    inc %lbx %lbi | loadbar pos %lbx | loadbar title Adding Folder: $left(%afile,35) $+ $iif($len(%afile) < 35,...) 
    dec %folders
  }
  loadbar Title Adding Information
  writeini $+(",%filename,") info directory %nomd5
  writeini $+(",%filename,") info echo 1
  writeini $+(",%filename,") allow newfile 1
  writeini $+(",%filename,") allow chgfile 1
  writeini $+(",%filename,") allow delfile 1
  writeini $+(",%filename,") allow newdir 1
  writeini $+(",%filename,") allow deldir 1
  inc %lbx 5 | loadbar pos %lbx 
  writeini $+(",%filename,") messages newfile New File Added in !dir (!file)
  writeini $+(",%filename,") Messages delfile Deleted File in !dir (!file)
  writeini $+(",%filename,") messages chgfile File Modified in !dir (!file)
  writeini $+(",%filename,") messages newdir New Subdirectory Added in !dir (!file)
  writeini $+(",%filename,") messages deldir Subdirectory Deleted in !dir (!file)
  writeini $+(",%filename,") info scan 1
  writeini $+(",%filename,") info chan #scripting
  inc %lbx 5 | loadbar pos %lbx 
  loadbar title Completed in $calc(($ticks - %seed) / 1000) secs
  .timer 1 2 loadbar close
  ;echo -a INI: $+(",%filename,") CREATED!
}

alias loadbar {
  if ($0 && !$isid) {
    var %window.width = 300
    var %window.height = 40 
    var %bar.width = $calc(%window.width - 10)
    var %bar.height = $calc(%window.height * .3) 
    if ($1 == open) {
      if ($window(@prog)) { window -c @prog } 

      window -pfhkdCiB +fL @prog -1 -1 %window.width %window.height 
      drawrect -fr @prog $color(background) 0 0 0 %window.width %window.height 
      drawrect  @prog $color(background) 0 5 23 %bar.width %bar.height
      window -a @prog
    }
    elseif ($window(@prog)) {
      if ($1 == title) {
        drawrect -rf @prog $color(background) 0 0 0 502 22
        drawtext @prog $color(info) Verdana -7 $calc(((%window.width - $width($2-, Verdana, -7, 1, 1)) / 2) +3) 4 $2-
        window -a @prog
      }
      if ($1 == pos) {
        drawrect -f @prog $color(info) 0 6 25 $calc($$2 * (%bar.width / 100)) 8
        window -a @prog
      }
      if ($1 == close) $iif($window(@prog),.timer -m 1 50 close -@ @prog)
    }
  }
  else { 
    if ($isid) { 
      if ($window(@prog)) { return $true }
      else { return $false } 
    }
  }
}


dialog mdir {
  title "mDir - Directory Monitor v2.0"
  size -1 -1 160 167
  option dbu notheme
  list 100, 1 10 157 42, size
  box "Messages", 3, 2 54 157 68
  check "New File", 200, 6 62 33 10
  check "Changed File", 201, 6 72 47 10
  check "Deleted File", 202, 6 82 49 10
  check "New Directory", 203, 6 92 47 10
  check "Deleted Directory", 204, 6 102 56 10
  text "New File Message:", 8, 64 63 46 8, right
  edit "", 206, 110 62 48 10, autohs
  edit "", 207, 110 72 48 10, autohs
  text "Chg File Message:", 11, 64 73 46 8, right
  edit "", 208, 110 82 48 10, autohs
  text "Del File Message:", 13, 64 83 46 8, right
  edit "", 209, 110 92 48 10, autohs
  text "New Dir Message:", 15, 64 93 46 8, right
  edit "", 210, 110 102 48 10, autohs
  text "Del Dir Message:", 17, 64 103 46 8, right
  check "Echo All Msgs to Status", 205, 6 112 67 7
  box "Other Directory Settings:", 19, 2 121 157 19
  edit "", 300, 34 128 50 10, autohs
  text "Channel:", 21, 10 129 24 8
  check "Allow Scanning of This Dir", 301, 87 128 69 10, left
  box "Settings:", 23, 2 141 62 25
  text "Scan every ", 24, 6 148 30 7
  edit "", 400, 35 147 14 10, autohs
  text "mins", 26, 49 148 13 8
  check "Enable Scans", 401, 6 155 42 10
  button "Save ", 500, 68 144 37 12
  button "Exit", 29, 106 157 37 10, ok cancel
  button "Scan", 600, 68 157 37 10
  text "Directories", 1, 2 2 32 8
  button "Add", 101, 114 2 20 7
  button "Delete", 102, 136 2 20 7
  text "Invalid Directory! ", 2, 108 144 50 11
}

alias x6f { if ($1 == $null) { return S_NOOK } | else { return $replace($1-,,<b>,,<u>,,<k>,,<r>,,<o>) } }
alias y10a { return $replace($1-,<b>,,<o>,,<r>,,<k>,,<u>,) }

alias mdir {  dialog $iif($dialog(mdir),-v,-md) mdir mdir }

on *:DIALOG:mdir:*:* {
  if ($devent == init && !$did) {
    var %i = 1
    did -ri $dname 100 1 Select a Directory
    while (%i <= $findfile($scriptdir,*.mdl,0,0)) {
      var %d = $replace($readini($findfile($scriptdir,*.mdl,%i,0),info,directory),$chr(21),$chr(32))
      did -i $dname 100 $calc(%i + 1) %d
      inc %i
    }
    did -c $dname 100 1

    if (%mdir.scan) { did -c $dname 401 }
    if (%mdir.time != $null) { did -ra $dname 400 %mdir.time }
  }
  if ($devent == sclick) {
    ; Clears Error Messages
    if ($did != $null) { did -r $dname 2 }

    if ($did == 101) {
      var %path = $lower($sdir($scriptdir,Select Directory))
      if (!$isdir(%path)) { did -ra $dname 2 Invalid Directory }
      else {
        if ($isfile($scriptdir $+ $md5(%path) $+ mdl) == $true) { did -ra $dname 2 Already Monitoring }
        else {
          cndir %path
          did -ra $dname 2 Directory Added
          var %i = 1
          did -ri $dname 100 1 Select a Directory
          while (%i <= $findfile($scriptdir,*.mdl,0,0)) {
            var %d = $readini($findfile($scriptdir,*.mdl,%i,0),info,directory)
            did -i $dname 100 $calc(%i + 1) %d
            inc %i
          }
          did -c $dname 100 1
        }
      }
    }

    if ($did == 102) {
      var %path = $lower($did($dname,100).seltext)
      if ($isdir(%path)) {
        if ($isfile($scriptdir $+ $md5(%path) $+ .mdl)) { .remove $+(",$scriptdir,$md5(%path),.mdl,") }
        var %i = 1
        did -ri $dname 100 1 Select a Directory
        while (%i <= $findfile($scriptdir,*.mdl,0,0)) {
          var %d = $replace($readini($findfile($scriptdir,*.mdl,%i,0),info,directory),$chr(21),$chr(32))
          did -i $dname 100 $calc(%i + 1) %d
          inc %i
        }
        did -c $dname 100 1
      }
    }
    if ($did == 600) {
      if (!$timer(-mdirscan) && %mdir.time > 0) {
        did -ra $dname 2 Already Scanning
      }
      else {
        mdirx
      }
    }

    if ($did == 500) {
      var %sel = $lower($did($dname,100).seltext)
      var %dir = $scriptdir $+ $md5(%sel) $+ .mdl
      if ($isdir(%sel) == $false) {
        did -ra $dname 2 Not a Directory
      }
      else {

        writeini $+(",%dir,") allow newfile $did($dname,200).state
        writeini $+(",%dir,") allow chgfile $did($dname,201).state
        writeini $+(",%dir,") allow delfile $did($dname,202).state
        writeini $+(",%dir,") allow newdir $did($dname,203).state
        writeini $+(",%dir,") allow deldir $did($dname,204).state
        writeini $+(",%dir,") info echo $did($dname,205).state
        writeini $+(",%dir,") info scan $did($dname,301).state

        writeini $+(",%dir,") messages newfile $x6f($did($dname,206).text)
        writeini $+(",%dir,") messages chgfile $x6f($did($dname,207).text)
        writeini $+(",%dir,") messages delfile $x6f($did($dname,208).text)
        writeini $+(",%dir,") messages newdir $x6f($did($dname,209).text)
        writeini $+(",%dir,") messages deldir $x6f($did($dname,210).text)
        writeini $+(",%dir,") info chan $x6f($did($dname,300).text)

        did -ra $dname 2 Settings Saved
      }
      set %mdir.time $did($dname,400).text
      set %mdir.scan $did($dname,401).state
    }
    if ($did == 100) {
      var %sel = $lower($did($dname,$did).seltext)
      var %dir = $scriptdir $+ $md5(%sel) $+ .mdl
      if ($isdir(%sel) == $false) {
        did -ra $dname 2 Not a Directory
        did -b $dname 200,201,202,203,204,205,301,206,207,208,209,210,300,500
      }
      else { did -e $dname 200,201,202,203,204,205,301,206,207,208,209,210,300,500 }


      did -u $dname 200,201,202,203,204,205,301
      did -r $dname 206,207,208,209,210,300

      if ($readini(%dir,allow,newfile)) { did -c $dname 200 }
      if ($readini(%dir,allow,chgfile)) { did -c $dname 201 }
      if ($readini(%dir,allow,delfile)) { did -c $dname 202 }
      if ($readini(%dir,allow,newdir)) { did -c $dname 203 }
      if ($readini(%dir,allow,deldir)) { did -c $dname 204 }
      if ($readini(%dir,messages,newfile)) { did -ra $dname 206 $y10a($replace($iif($ifmatch != $null,$ifmatch,$v1),S_NOOK,$null)) }
      if ($readini(%dir,messages,chgfile)) { did -ra $dname 207 $y10a($replace($iif($ifmatch != $null,$ifmatch,$v1),S_NOOK,$null)) }
      if ($readini(%dir,messages,delfile)) { did -ra $dname 208 $y10a($replace($iif($ifmatch != $null,$ifmatch,$v1),S_NOOK,$null)) }
      if ($readini(%dir,messages,newdir)) { did -ra $dname 209 $y10a($replace($iif($ifmatch != $null,$ifmatch,$v1),S_NOOK,$null)) }
      if ($readini(%dir,messages,deldir)) { did -ra $dname 210 $y10a($replace($iif($ifmatch != $null,$ifmatch,$v1),S_NOOK,$null)) }
      if ($readini(%dir,info,echo)) { did -c $dname 205 1 }
      if ($readini(%dir,info,chan)) { did -ra $dname 300 $y10a($replace($iif($ifmatch != $null,$ifmatch,$v1),S_NOOK,$null)) }
      if ($readini(%dir,info,scan)) { did -c $dname 301 1 }
    }
  }
}

alias msgconvert { if ($1 == S_NOOK) { halt } | else { return $replace($1-,!dir,%dir,!file,%file,!filename,%full.file) } }

alias mdirx {
  var %i = 1, %stime = $ticks 
  while (%i <= $findfile($scriptdir,*.mdl,0,0)) {
    var %a = 1, %a2 = 1, %b = 1, %list = $findfile($scriptdir,*.mdl,%i,0), %dir = $readini(%list,info,directory)
    var %b2 = 1
    inc %i
    if (!%mdir.scan) { halt }

    if ($isdir(%dir)) {
      ; Checks if the directory is in scan mode
      if ($readini(%list,info,scan)) {

        ; Loop to check if files have been added/changed and some deletions
        while (%a <= $findfile(%dir,*,0,0)) {
          var %full.file = $findfile(%dir,*,%a,0), %file = $nopath(%full.file), %altfile = $replace(%file,$chr(32),$chr(21))
          ; New Files?
          if ($readini(%list,files,%altfile) == $null) {
            ; Message Channel
            if ($readini(%list,allow,newfile)) {
              var %1msg = $readini(%list,messages,newfile)
              if ($me ison $readini(%list,info,chan) && (%1msg != $null || %1msg != S_NOOK)) { msg $readini(%list,info,chan) $y10a($replace(%1msg,!dir,%dir,!file,%file,!filename,%full.file))  }
              if ($readini(%list,info,echo) && (%1msg != $null || %1msg != S_NOOK)) { echo $color(info) -s $y10a($replace(%1msg,!dir,%dir,!file,%file,!filename,%full.file))  }
            }
            writeini $+(",%list,") files %altfile $crc(%full.file)
          }

          if ($isfile(%full.file) == $true) {
            ; Message Channel
            if ($crc(%full.file) != $readini(%list,files,%altfile)) {
              if ($readini(%list,allow,chgfile)) {
                var %1msg =  $readini(%list,messages,chgfile)
                if ($me ison $readini(%list,info,chan) && (%1msg != $null || %1msg != S_NOOK)) { msg $readini(%list,info,chan) $y10a($replace(%1msg,!dir,%dir,!file,%file,!filename,%full.file))  }
                if ($readini(%list,info,echo) && (%1msg != $null || %1msg != S_NOOK)) { echo $color(info) -s $y10a($replace(%1msg,!dir,%dir,!file,%file,!filename,%full.file))  }

              }
              writeini $+(",%list,") files %altfile $crc(%full.file)
            }
          }
          else {
            if ($readini(%list,allow,delfile)) {
              echo -a This is my dog
              var %1msg =  $readini(%list,messages,delfile)
              if ($me ison $readini(%list,info,chan) && (%1msg != $null || %1msg != S_NOOK)) { msg $readini(%list,info,chan) $y10a($replace(%1msg,!dir,%dir,!file,%file,!filename,%full.file))  }
              if ($readini(%list,info,echo) && (%1msg != $null || %1msg != S_NOOK)) { echo $color(info) -s $y10a($replace(%1msg,!dir,%dir,!file,%file,!filename,%full.file))  }

            }
            remini $+(",%list,") files %altfile
          }
          inc %a
        }

        while (%a2 <= $finddir(%dir,*,0,0)) {
          var %full.df = $finddir(%dir,*,%a2,0), %df = $nopath(%full.df), %adf = $replace(%df,$chr(32),$chr(21))
          ; New Directory?
          if ($readini(%list,folders,%adf) == $null) {
            ; Message Channel
            if ($readini(%list,allow,newdir)) {
              var %1msg =  $readini(%list,messages,newdir)
              if ($me ison $readini(%list,info,chan) && (%1msg != $null || %1msg != S_NOOK)) { msg $readini(%list,info,chan) $msgconvert(%list) }
              if ($readini(%list,info,echo) && (%1msg != $null || %1msg != S_NOOK)) { echo $color(info) -s $msgconvert(%list) }

            }
            writeini $+(",%list,") folders %adf $true
          }
          ; No Directory on List
          if (!$isdir(%full.df)) {
            if ($readini(%list,allow,deldir)) {
              var %1msg =  $readini(%list,messages,deldir)
              if ($me ison $readini(%list,info,chan) && (%1msg != $null || %1msg != S_NOOK)) { msg $readini(%list,info,chan) $y10a($replace(%1msg,!dir,%dir,!file,%file,!filename,%full.file))  }
              if ($readini(%list,info,echo) && (%1msg != $null || %1msg != S_NOOK)) { echo $color(info) -s $y10a($replace(%1msg,!dir,%dir,!file,%file,!filename,%full.file))  }

            }
            remini $+(",%list,") folders %adf
          }
          inc %a2
        }

        WHILE (%b <= $ini(%list,files,0)) {
          var %full.file = $readini(%list,info,directory) $+ $replace($ini(%list,files,%b),$chr(21),$chr(32))
          var %file = $nopath(%full.file), %altfile = $replace(%file,$chr(32),$chr(21))
          if ($isfile(%full.file) == $false) {
            if ($readini(%list,allow,delfile)) {
              echo -a %full.file 
              var %1msg =  $readini(%list,messages,delfile)
              if ($me ison $readini(%list,info,chan) && (%1msg != $null || %1msg != S_NOOK)) { msg $readini(%list,info,chan) $y10a($replace(%1msg,!dir,%dir,!file,%file,!filename,%full.file))  }
              if ($readini(%list,info,echo) && (%1msg != $null || %1msg != S_NOOK)) { echo $color(info) -s $y10a($replace(%1msg,!dir,%dir,!file,%file,!filename,%full.file))  }

            }
            remini $+(",%list,") files %altfile
          }
          inc %b
        }
        WHILE (%b2 <= $ini(%list,folders,0)) {
          var %full.file = $readin(%list,info,directory) $+ $replace($ini(%list,folders,%b2),$chr(21),$chr(32)), %file = $nopath(%full.file), %altfile = $replace(%file,$chr(32),$chr(21))
          if (!$isdir(%full.file)) {
            if ($readini(%list,allow,deldir)) {
              var %1msg =  $readini(%list,messages,deldir)
              if ($me ison $readini(%list,info,chan) && (%1msg != $null || %1msg != S_NOOK)) { msg $readini(%list,info,chan) $y10a($replace(%1msg,!dir,%dir,!file,%file,!filename,%full.file))  }
              if ($readini(%list,info,echo) && (%1msg != $null || %1msg != S_NOOK)) { echo $color(info) -s $y10a($replace(%1msg,!dir,%dir,!file,%file,!filename,%full.file))  }

            }
            remini $+(",%list,") folders %altfile
          }
          inc %b2
        }
      }
    }
  }
  var %ctime12 = $calc(($ticks - %stime) / 1000)
  echo $color(info) -s *** mDir: Finish Scanning in %ctime12 seconds.
}

on *:UNLOAD {
  .timer-mdirscan off
  unset %mdir.*
  echo $color(info) -s mDir - Directory Monitor v2.0 unloaded. All variables unset. Please manually delete the .mdl files in $scriptdir
}
on *:LOAD: {
  if ($version < 6.03) { echo mDir - Directory Monitor requires you to use mIRC Version 6.03 or higher. Your current version is $version }
  else {
    echo $color(info) -a --------------------------
    echo $color(info) -a mDir - Directory Monitor by Aether (Version 2.0)
    echo $color(info) -a Now Loaded! Type /mdir to setup.
    autoscan /n
  }
}

menu status,menubar {
  -
  mDir
  .Setup: mdir
  .Scan Now: mdirx
  .-
  .Unload
  ..Unload by Clicking Here: .unload -rs $+(",$script,")
  -
}

on *:START {
  autoscan /n
}

; Alias for Timer and Auto Scanning.
alias -l autoscan { .timer-mdirscan off | if (%mdir.time > 0 && %mdir.scan && $1 != /n) { mdirx } | .timer-mdirscan 1 $calc(60 * $iif(%mdir.time isnum 1-,%mdir.time,5)) autoscan }