Commit b2225a8b authored by Rusty Myers's avatar Rusty Myers

Merge pull request #3 from CLCMacTeam/cocoabuild

Cocoabuild
parents df98c95e 1986161c
#tag BuildAutomation Begin BuildStepList Linux Begin BuildProjectStep Build End End Begin BuildStepList Mac OS X Begin IDEScriptBuildStep SaveProject , AppliesTo = 0 DoCommand "SaveFile" End Begin BuildProjectStep Build End Begin IDEScriptBuildStep UnDock , AppliesTo = 0 Dim AppLocation as String = CurrentBuildAppName + ".app" AppLocation = AppLocation.ReplaceAll( " ", "\ " ) AppLocation = CurrentBuildLocation + "/" + AppLocation //@ More cocoa info.plist keys here: // https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html Call DoShellCommand("/usr/bin/defaults write " + AppLocation + "/Contents/Info ""LSBackgroundOnly"" -bool ""true""") End Begin IDEScriptBuildStep tarProject , AppliesTo = 0 // Set Variables dim packageLoc, res, tarname as string tarname = "Idle-Logout.tar.bz2" packageLoc = "/Users/rzm102/Documents/_Programing/CLC\ Git/Software\ Packages/idle-logout/" if CurrentBuildLocation="/Users/rzm102/Documents/_Programing/Git/IdleLogout/Builds\ \-\ psuIdleLogout.rbvcp/Mac\ OS\ X\ \(Intel\)" OR CurrentBuildLocation="/Users/rzm102/Documents/_Programing/Git/IdleLogout/Builds\ \-\ psuIdleLogout.rbvcp/Mac\ OS\ X\ \(Cocoa\ Intel\)" then //print "Build Location: "+CurrentBuildLocation // Tar up folder res = DoShellCommand _ ("cd "+CurrentBuildLocation+"; /usr/bin/tar -c --exclude='.svn' -vjf "+tarname+" *") if res = "" then print "Results: "+res end // Delete old tar // print "rm "+packageLoc+tarname res = DoShellCommand _ ("rm "+packageLoc+tarname) // Move tar to luggage folder // print "mv "+CurrentBuildLocation+"/"+tarname+" "+packageLoc res = DoShellCommand _ ("mv "+CurrentBuildLocation+"/"+tarname+" "+packageLoc) // Make package res = DoShellCommand _ ("cd "+packageLoc+"; make pkg; open "+packageLoc) print res else print "Not on rusty's mac. Skipping pkg creation" //print CurrentBuildLocation//print "Build Location: "+CurrentBuildLocation end End End Begin BuildStepList Windows Begin BuildProjectStep Build End End #tag EndBuildAutomation
\ No newline at end of file
#tag BuildAutomation Begin BuildStepList Linux Begin BuildProjectStep Build End End Begin BuildStepList Mac OS X Begin IDEScriptBuildStep SaveProject , AppliesTo = 0 DoCommand "SaveFile" End Begin BuildProjectStep Build End Begin IDEScriptBuildStep UnDock , AppliesTo = 0 Dim AppLocation as String = CurrentBuildAppName + ".app" AppLocation = AppLocation.ReplaceAll( " ", "\ " ) AppLocation = CurrentBuildLocation + "/" + AppLocation //@ More cocoa info.plist keys here: // https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html Call DoShellCommand("/usr/bin/defaults write " + AppLocation + "/Contents/Info ""LSBackgroundOnly"" -bool ""true""") End Begin IDEScriptBuildStep tarProject , AppliesTo = 0 // Set Variables dim packageLoc, res, tarname as string tarname = "Idle-Logout.tar.bz2" packageLoc = "/Users/rzm102/Documents/_Programing/CLC\ Git/Software\ Packages/idle-logout/" // print "Build Location: "+CurrentBuildLocation if CurrentBuildLocation="/Users/rzm102/Documents/_Programing/Git/IdleLogout/Builds\ \-\ psuIdleLogout.rbvcp/Mac\ OS\ X\ \(Cocoa\ Intel\)" then // Tar up folder res = DoShellCommand _ ("cd "+CurrentBuildLocation+"; /usr/bin/tar -c --exclude='.svn' -vjf "+tarname+" *") if res = "" then print "Results: "+res end // Delete old tar // print "rm "+packageLoc+tarname res = DoShellCommand _ ("rm "+packageLoc+tarname) // Move tar to luggage folder // print "mv "+CurrentBuildLocation+"/"+tarname+" "+packageLoc res = DoShellCommand _ ("mv "+CurrentBuildLocation+"/"+tarname+" "+packageLoc) // Make package res = DoShellCommand _ ("cd "+packageLoc+"; make pkg; open "+packageLoc) print res else // print "Not on rusty's mac. Skipping pkg creation" //print CurrentBuildLocation//print "Build Location: "+CurrentBuildLocation end End End Begin BuildStepList Windows Begin BuildProjectStep Build End End #tag EndBuildAutomation
\ No newline at end of file
......
#tag Class Protected Class IdleLogout Inherits Application #tag Event Sub Open() Dim debugFileName as string Dim theDate as date dim mXMLtreeToFollow(-1) as string dim mPrefKeyFoundData(-1) as string dim mTempFoundPlistData as string = "" // Local variable to use for gathering plist settings theDate = new Date Globals.gAppFolderItem = GetFolderItem("/Users/Shared/", FolderItem.PathTypeShell) if Globals.gAppFolderItem.Exists = false then // dim Folderexists as boolean // Folderexists = LogoutWarning.makeFolder("/Users/Shared/") //Can't make a folder here as a user. Globals.gAppFolderItem = GetFolderItem("/tmp/", FolderItem.PathTypeShell) MsgBox "Can't find /Users/Shared! Using /tmp/ for logs" end // Set the name of the log debugFileName = "psuIdleLogout.RUN" + MiscMethods.PadData("0",2,str(theDate.Year),Globals.kLogToFileDisable) _ + "-" + MiscMethods.PadData("0",2,str(theDate.Month),Globals.kLogToFileDisable) + "-" debugFileName = debugFileName + MiscMethods.PadData("0",2,str(theDate.Day),Globals.kLogToFileDisable) + _ "-" + MiscMethods.PadData("0",2,str(theDate.Hour),Globals.kLogToFileDisable) + "-" debugFileName = debugFileName + MiscMethods.PadData("0",2,str(theDate.Minute),Globals.kLogToFileDisable) + _ "-" + MiscMethods.PadData("0",2,str(theDate.Second),Globals.kLogToFileDisable) + ".log" // Initilize the log, quit if we can't create the log if not (LogToFile.Initialize(debugFileName,Globals.gAppFolderItem)) then beep MsgBox "Error creating run log file! Exiting..." quit end if // Keep only the last 5 logs if ( LogToFile.DeleteOldLogs(5) ) then LogToFile("Deleted Old Logs") end if // CFPref calls 'dim ComputerIdleAfterNumSeconds as Integer = "900" 'dim IdleLoopDelaySeconds as Integer = "60" 'dim WaitForUserPromptSeconds = "90" // Set version number in pref file // prefs.Value ("version") = App.pAppVersion // dim AppVersionPref as String = prefs.Value("version", App.pAppVersion) // Get version from plist file 'dim ComputerIdleAfterNumSecondsPref as string = prefs.Value("ComputerIdleAfterNumSeconds", App.pComputerIdleAfterNumSeconds) 'dim IdleLoopDelaySecondsPref as string = prefs.Value("IdleLoopDelaySeconds", App.pIdleLoopDelaySeconds) 'dim WaitForUserPromptSecondsPref as string = prefs.Value("WaitForUserPromptSeconds", App.pWaitForUserPromptSeconds) ' 'LogToFile("CFPrefs Return of ComputerIdleAfterNumSeconds: " + ComputerIdleAfterNumSecondsPref ) // Are there any users that we should ignore running for? if ( PlistHelper.readPlist(LogoutWarning.pDefaultPrefsFSPath, LogoutWarning.pDefaultPrefsFileName, "IgnoreUser", mTempFoundPlistData ) ) then LogoutWarning.pIgnoreUser = mTempFoundPlistData LogToFile(CurrentMethodName + ": Found the default key data, = " + str(LogoutWarning.pIgnoreUser) ) else // Failed! LogToFile(CurrentMethodName + ": Warning! Failed to find the default key 'IgnoreUser', using default of "+ str (LogoutWarning.pIgnoreUser) ) end if // Are there any groups that we should ignore running for? if ( PlistHelper.readPlist(LogoutWarning.pDefaultPrefsFSPath, LogoutWarning.pDefaultPrefsFileName, "IgnoreGroup", mTempFoundPlistData ) ) then LogoutWarning.pIgnoreGroup = mTempFoundPlistData LogToFile(CurrentMethodName + ": Found the default key data, = " + str(LogoutWarning.pIgnoreGroup) ) else // Failed! LogToFile(CurrentMethodName + ": Warning! Failed to find the default key 'IgnoreGroup', using default of "+ str (LogoutWarning.pIgnoreGroup) ) end if // Is this user macadmin? if ( MiscMethods.CurrentUsername(LogoutWarning.pIgnoreUser) ) then // It is macadmin, quit the app LogToFile("Current user is " + LogoutWarning.pIgnoreUser + ", quiting app") quit else LogToFile("User is not " + LogoutWarning.pIgnoreUser + ", continuing") end if // Is this user an admin? if ( MiscMethods.CurrentGroup(LogoutWarning.pIgnoreGroup) ) then // It is macadmin, quit the app LogToFile("Current user is an " + LogoutWarning.pIgnoreGroup + ", quiting app") quit else LogToFile("User is not an " + LogoutWarning.pIgnoreGroup + ", continuing") end if // What should the Title Be in the Popup Window if ( PlistHelper.readPlist(LogoutWarning.pDefaultPrefsFSPath, LogoutWarning.pDefaultPrefsFileName, "WindowTitle", mTempFoundPlistData ) ) then LogoutWarning.WarningTitle.setString(str(mTempFoundPlistData)) LogToFile(CurrentMethodName + ": Found the default key data, = " + str(mTempFoundPlistData) ) else // Failed! LogToFile(CurrentMethodName + ": Warning! Failed to find the default key 'WindowTitle', using default of "+ str(LogoutWarning.WarningTitle.Text)) end if // How long should we wait before considering the Mac is idle too long? if ( PlistHelper.readPlist(LogoutWarning.pDefaultPrefsFSPath, LogoutWarning.pDefaultPrefsFileName, "ComputerIdleAfterNumSeconds", mTempFoundPlistData ) ) then LogoutWarning.pComputerIdleAfterNumSeconds = val( mTempFoundPlistData ) LogToFile(CurrentMethodName + ": Found the default key data, = " + str(LogoutWarning.pComputerIdleAfterNumSeconds) ) else // Failed! LogToFile(CurrentMethodName + ": Warning! Failed to find the default key 'ComputerIdleAfterNumSeconds', using default of "+ str (LogoutWarning.pComputerIdleAfterNumSeconds) ) end if // How often should we check to see how long the Mac has been idle? if ( PlistHelper.readPlist(LogoutWarning.pDefaultPrefsFSPath, LogoutWarning.pDefaultPrefsFileName, "IdleLoopDelaySeconds", mTempFoundPlistData ) ) then LogoutWarning.pIdleLoopDelaySeconds = val( mTempFoundPlistData ) LogToFile(CurrentMethodName + ": Found the default key data, = " + str(LogoutWarning.pIdleLoopDelaySeconds) ) else // Failed! LogToFile(CurrentMethodName + ": Warning! Failed to find the default key 'IdleLoopDelaySeconds', using default of "+ str (LogoutWarning.pIdleLoopDelaySeconds) ) end if // How long should we wait for the user to respond for More Time or to Log Out? if ( PlistHelper.readPlist(LogoutWarning.pDefaultPrefsFSPath, LogoutWarning.pDefaultPrefsFileName, "WaitForUserPromptSeconds", mTempFoundPlistData ) ) then LogoutWarning.pWaitForUserPromptSeconds = val( mTempFoundPlistData ) LogToFile(CurrentMethodName + ": Found the default key data, = " + str(LogoutWarning.pWaitForUserPromptSeconds) ) else // Failed! LogToFile(CurrentMethodName + ": Warning! Failed to find the default key 'WaitForUserPromptSeconds', using default of "+ str (LogoutWarning.pWaitForUserPromptSeconds) ) end if // Set default LogToFile(CurrentMethodName + ": Setting pMoreTimeAskedFor as True") Dim pMoreTimeAskedFor as Boolean = true // Hide window from view at start LogoutWarning.Hide() // Start IdleThread LogToFile(CurrentMethodName + ": Running IdleThread") LogoutWarning.IdleThread.Run // exit app now LogToFile(CurrentMethodName + ": <---") End Sub #tag EndEvent #tag Note, Name = Icon Application Icon use with CC license: From http://www.flickr.com/photos/23453447@N02/5107438855/sizes/o/in/photostream/ By zyrquel http://www.flickr.com/photos/23453447@N02/ #tag EndNote #tag Property, Flags = &h0 pAppVersion As String = "1.1" #tag EndProperty #tag Constant, Name = kEditClear, Type = String, Dynamic = False, Default = \"&Delete", Scope = Public #Tag Instance, Platform = Windows, Language = Default, Definition = \"&Delete" #Tag Instance, Platform = Linux, Language = Default, Definition = \"&Delete" #tag EndConstant #tag Constant, Name = kFileQuit, Type = String, Dynamic = False, Default = \"&Quit", Scope = Public #Tag Instance, Platform = Windows, Language = Default, Definition = \"E&xit" #tag EndConstant #tag Constant, Name = kFileQuitShortcut, Type = String, Dynamic = False, Default = \"", Scope = Public #Tag Instance, Platform = Mac OS, Language = Default, Definition = \"Cmd+Q" #Tag Instance, Platform = Linux, Language = Default, Definition = \"Ctrl+Q" #tag EndConstant #tag ViewBehavior #tag ViewProperty Name="pAppVersion" Group="Behavior" InitialValue="1.1" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag EndViewBehavior End Class #tag EndClass
\ No newline at end of file
#tag Class Protected Class IdleLogout Inherits Application #tag Event Sub Open() Dim debugFileName as string Dim theDate as date dim mXMLtreeToFollow(-1) as string dim mPrefKeyFoundData(-1) as string dim mTempFoundPlistData as string = "" // Local variable to use for gathering plist settings theDate = new Date Globals.gAppFolderItem = GetFolderItem("/Users/Shared/", FolderItem.PathTypeShell) if Globals.gAppFolderItem.Exists = false then Globals.gAppFolderItem = GetFolderItem("/tmp/", FolderItem.PathTypeShell) MsgBox "Can't find /Users/Shared! Using /tmp/ for logs" end // Set the name of the log debugFileName = "psuIdleLogout.RUN" + MiscMethods.PadData("0",2,str(theDate.Year),Globals.kLogToFileDisable) _ + "-" + MiscMethods.PadData("0",2,str(theDate.Month),Globals.kLogToFileDisable) + "-" debugFileName = debugFileName + MiscMethods.PadData("0",2,str(theDate.Day),Globals.kLogToFileDisable) + _ "-" + MiscMethods.PadData("0",2,str(theDate.Hour),Globals.kLogToFileDisable) + "-" debugFileName = debugFileName + MiscMethods.PadData("0",2,str(theDate.Minute),Globals.kLogToFileDisable) + _ "-" + MiscMethods.PadData("0",2,str(theDate.Second),Globals.kLogToFileDisable) + ".log" // Initilize the log, quit if we can't create the log if not (LogToFile.Initialize(debugFileName,Globals.gAppFolderItem)) then beep MsgBox "Error creating run log file! Exiting..." quit end if // Keep only the last 5 logs if ( LogToFile.DeleteOldLogs(5) ) then LogToFile("Deleted Old Logs") end if // CFPref calls 'dim ComputerIdleAfterNumSeconds as Integer = "900" 'dim IdleLoopDelaySeconds as Integer = "60" 'dim WaitForUserPromptSeconds = "90" // Set version number in pref file // prefs.Value ("version") = App.pAppVersion // dim AppVersionPref as String = prefs.Value("version", App.pAppVersion) // Get version from plist file 'dim ComputerIdleAfterNumSecondsPref as string = prefs.Value("ComputerIdleAfterNumSeconds", App.pComputerIdleAfterNumSeconds) 'dim IdleLoopDelaySecondsPref as string = prefs.Value("IdleLoopDelaySeconds", App.pIdleLoopDelaySeconds) 'dim WaitForUserPromptSecondsPref as string = prefs.Value("WaitForUserPromptSeconds", App.pWaitForUserPromptSeconds) ' 'LogToFile("CFPrefs Return of ComputerIdleAfterNumSeconds: " + ComputerIdleAfterNumSecondsPref ) // Are there any users that we should ignore running for? if ( PlistHelper.readPlist(pDefaultPrefsFSPath, pDefaultPrefsFileName, "IgnoreUser", mTempFoundPlistData ) ) then pIgnoreUser = mTempFoundPlistData LogToFile(CurrentMethodName + ": Found the default key data, = " + str(pIgnoreUser) ) else // Failed! LogToFile(CurrentMethodName + ": Warning! Failed to find the default key 'IgnoreUser', using default of "+ str (pIgnoreUser) ) end if // Are there any groups that we should ignore running for? if ( PlistHelper.readPlist(pDefaultPrefsFSPath, pDefaultPrefsFileName, "IgnoreGroup", mTempFoundPlistData ) ) then pIgnoreGroup = mTempFoundPlistData LogToFile(CurrentMethodName + ": Found the default key data, = " + str(pIgnoreGroup) ) else // Failed! LogToFile(CurrentMethodName + ": Warning! Failed to find the default key 'IgnoreGroup', using default of "+ str (pIgnoreGroup) ) end if // Is this user macadmin? if ( MiscMethods.CurrentUsername(pIgnoreUser) ) then // It is macadmin, quit the app LogToFile("Current user is " + pIgnoreUser + ", quiting app") quit else LogToFile("User is not " + pIgnoreUser + ", continuing") end if // Is this user an admin? if ( MiscMethods.CurrentGroup(pIgnoreGroup) ) then // It is macadmin, quit the app LogToFile("Current user is an " + pIgnoreGroup + ", quiting app") //[p=quit else LogToFile("User is not an " + pIgnoreGroup + ", continuing") end if // What should the Title Be in the Popup Window if ( PlistHelper.readPlist(pDefaultPrefsFSPath, pDefaultPrefsFileName, "WindowTitle", mTempFoundPlistData ) ) then LogoutWarning.WarningTitle.setString(str(mTempFoundPlistData)) LogToFile(CurrentMethodName + ": Found the default key data, = " + str(mTempFoundPlistData) ) else // Failed! LogToFile(CurrentMethodName + ": Warning! Failed to find the default key 'WindowTitle', using default of "+ str(LogoutWarning.WarningTitle.Text)) end if // How long should we wait before considering the Mac is idle too long? if ( PlistHelper.readPlist(pDefaultPrefsFSPath, pDefaultPrefsFileName, "ComputerIdleAfterNumSeconds", mTempFoundPlistData ) ) then pComputerIdleAfterNumSeconds = val( mTempFoundPlistData ) LogToFile(CurrentMethodName + ": Found the default key data, = " + str(pComputerIdleAfterNumSeconds) ) else // Failed! LogToFile(CurrentMethodName + ": Warning! Failed to find the default key 'ComputerIdleAfterNumSeconds', using default of "+ str (pComputerIdleAfterNumSeconds) ) end if // How often should we check to see how long the Mac has been idle? if ( PlistHelper.readPlist(pDefaultPrefsFSPath, pDefaultPrefsFileName, "IdleLoopDelaySeconds", mTempFoundPlistData ) ) then pIdleLoopDelaySeconds = val( mTempFoundPlistData ) LogToFile(CurrentMethodName + ": Found the default key data, = " + str(pIdleLoopDelaySeconds) ) else // Failed! LogToFile(CurrentMethodName + ": Warning! Failed to find the default key 'IdleLoopDelaySeconds', using default of "+ str (pIdleLoopDelaySeconds) ) end if // How long should we wait for the user to respond for More Time or to Log Out? if ( PlistHelper.readPlist(pDefaultPrefsFSPath, pDefaultPrefsFileName, "WaitForUserPromptSeconds", mTempFoundPlistData ) ) then pWaitForUserPromptSeconds = val( mTempFoundPlistData ) LogToFile(CurrentMethodName + ": Found the default key data, = " + str(pWaitForUserPromptSeconds) ) else // Failed! LogToFile(CurrentMethodName + ": Warning! Failed to find the default key 'WaitForUserPromptSeconds', using default of "+ str (pWaitForUserPromptSeconds) ) end if // Hide window from view at start LogoutWarning.Hide() // Start IdleThread LogToFile(CurrentMethodName + ": Running IdleThread") // start thread to watch for idle StartIdleWatch() // exit app now LogToFile(CurrentMethodName + ": <---") End Sub #tag EndEvent #tag Method, Flags = &h0 Sub forceLogout() LogToFile(CurrentMethodName + ": --->") // Testing mode, use say instead of logout Dim s As Shell s=New Shell dim ShellResults as string s.Mode = 0 // Log LogToFile(CurrentMethodName + ": START Killing Apps") // kill the apps that are open from /Apps LogToFile(CurrentMethodName + ": Killing all launched from /Applications") // s.Execute("kill -9 `ps axxx | grep ""/Applications"" | awk '{print $1}'`") ShellResults = s.Result LogToFile(CurrentMethodName + ": App Kill Results: " + ShellResults) // Kill PSU specific Applescript that can cause issues LogToFile(CurrentMethodName + ": Killing the psuStartupManger") //s.Execute("kill -9 `ps axxx | grep ""/Library/CLMshared/Startup Items/psuStartupManager.app"" |grep applet | awk '{print $1}'`") ShellResults = s.Result LogToFile(CurrentMethodName + ": StartupManager Kill Results: " + ShellResults) // Log out our user with force LogToFile(CurrentMethodName + ": Tell AppleScript to log it out") // New method to logout with osascript. //s.Execute("osascript -e 'tell application ""System Events"" to keystroke ""q"" using {command down, shift down, option down}'") ShellResults = s.Result LogToFile(CurrentMethodName + ": LogOut AS Results: " + ShellResults) // Log and quit LogToFile(CurrentMethodName + ": <---") Quit End Sub #tag EndMethod #tag Method, Flags = &h0 Function IdleSeconds() As Integer // Set up variables for idle time // Shell result Dim mIdleSecs As String // Shell exit code Dim merrCode As Integer // Set up shell Dim s As Shell s=New Shell s.Mode = 0 // Check idle time //s.Execute code to check idle time from USB input devices s.Execute "/bin/echo $((`/usr/sbin/ioreg -c IOHIDSystem | /usr/bin/sed -e '/HIDIdleTime/ !{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'` / 1000000000))" // Set results to mIdleResult mIdleSecs = s.Result // Set error code to mIdleError merrCode = s.ErrorCode // Log mIdleResult for debugging // System.Log(System.LogLevelError, "Method: " + midleSecs) // LogToFile("mIdleSeconds: " + str(mIdleSecs)) Return val(mIdleSecs) End Function #tag EndMethod #tag Method, Flags = &h0 Function makeFolder(mkdirPath As string) As Boolean // Set up variables for idle time // Shell result = mkdirPath // Shell exit code Dim merrCode As Integer // Set up shell Dim s As Shell s=New Shell s.Mode = 0 // Check idle time //s.Execute code to check idle time from USB input devices s.Execute "mkdir -p /Users/Shared" // Set results to mIdleResult mkdirPath = s.Result // Set error code to mIdleError merrCode = s.ErrorCode // Log mIdleResult for debugging // System.Log(System.LogLevelError, "Method: " + midleSecs) // LogToFile("mIdleSeconds: " + str(mIdleSecs)) if mkdirPath = "0" then return true else return false end End Function #tag EndMethod #tag Method, Flags = &h0 Function RemoteControlCheck() As Boolean // Set up variables for idle time Dim stablished as String = "ESTABLISHED" // Shell result Dim rccheck As String // Shell exit code Dim merrCode As Integer // Set up shell Dim s As Shell s=New Shell s.Mode = 0 // Check idle time //s.Execute code to check for connection s.Execute "/usr/sbin/netstat -n | /usr/bin/grep '.5900'| /usr/bin/awk '{print $6}'" // Set results to rccheck // Make the entire returned text uppercase in case Apple ever changes the case to CaMeL CaSe, which would break our code: rccheck = Uppercase(s.Result) //LogToFile("rccheck: " + rccheck) // Set error code to merrCode merrCode = s.ErrorCode // LogToFile("rccheck: "+ rccheck) // LogToFile("stablished: "+ stablished) If ( InStr( rccheck, stablished ) > 0 ) then return true else //LogToFile("rccheck: false") return false End if // System.Log(System.LogLevelError, "Method: " + midleSecs) // LogToFile("mIdleSeconds: " + str(mIdleSecs)) End Function #tag EndMethod #tag Method, Flags = &h0 Sub StartIdleWatch() // if the new WatchForIdleThread is not created, do it now if ( pWatchForIdleThread = nil ) then // instatiate new thread with enumerated type pWatchForIdleThread = _ new WatchForIdleThread(Int32(eTaskType.StartIdleWatch )) // add custom methods for run and finished handlers AddHandler pWatchForIdleThread.Run, WeakAddressOf Thread_WaitForIdleTime AddHandler pWatchForIdleThread.Finished, WeakAddressOf Thread_Finished end if // Run the thread if it's not already running: if ( pWatchForIdleThread.State <> Thread.Running ) then // Hide window during idle watch LogoutWarning.Hide() // Set label to default countdown time LogoutWarning.TimeLabel.setString(str(pWaitForUserPromptSeconds)) // run the new thread pWatchForIdleThread.Run end if End Sub #tag EndMethod #tag Method, Flags = &h0 Sub StartUserCountDown() // if the new WatchForIdleThread is not created, do it now if ( pIdleCountDownThread = nil ) then // instatiate new thread with enumerated type pIdleCountDownThread = _ new WatchForIdleThread(Int32(eTaskType.StartUserCountDown )) // add custom methods for run and finished handlers AddHandler pIdleCountDownThread.Run, WeakAddressOf Thread_WaitForUserInput AddHandler pIdleCountDownThread.Finished, WeakAddressOf Thread_Finished end if // Run the thread if it's not already running if ( pIdleCountDownThread.State <> Thread.Running ) then // run the new thread pIdleCountDownThread.Run end if End Sub #tag EndMethod #tag Method, Flags = &h21 Private Sub Thread_Finished(paramThread as WatchForIdleThread) LogToFile(CurrentMethodName + ": --->") // Kill the thread that was used to get here paramThread.Kill // Found out which thread just finished select case Int32 ( paramThread.pTaskType ) // If the StartIdleWatch thread just finished case int32( eTaskType.StartIdleWatch ) // LogToFile(CurrentMethodName + ": Idle time has expired.") // Show Login Window LogoutWarning.Show() // start logout countdown window StartUserCountDown() case int32 ( eTaskType.StartUserCountDown ) // LogToFile(CurrentMethodName + ": No user response from countdown.") // LogToFile(CurrentMethodName + ": LogoutWarning.pMoreTimeAskedFor = " +str(pMoreTimeAskedFor)) // If the user (or anyone) asked for more time if (pMoreTimeAskedFor) then // if the user asks for more time, start the idle watch thread again // Restart Idle Watch StartIdleWatch() else // if the user ran out of time, start the logout // kill user logins forceLogout() end if else end select End Sub #tag EndMethod #tag Method, Flags = &h21 Private Sub Thread_WaitForIdleTime(paramThread as WatchForIdleThread) // Set up new integer to store idle seconds Dim mIdleResult As Integer // get current idle seconds mIdleResult = IdleSeconds() // LogToFile(CurrentMethodName + " Idle Seconds: " + str(mIdleResult)) // LogToFile(CurrentMethodName + " waiting for " + str(LogoutWarning.pComputerIdleAfterNumSeconds)) // While our idle result is less than max time while ( mIdleResult < pComputerIdleAfterNumSeconds ) // Wait pIdleLoopDelaySeconds each loop App.SleepCurrentThread( pIdleLoopDelaySeconds * 1000 ) // Check idle time: mIdleResult = IdleSeconds() // Log our time idle LogToFile(CurrentMethodName + ": Idle Seconds: " + str(mIdleResult)) wend // while there is a ARD/VNC session, don't idle out (netstat -n | grep '.5900') while (RemoteControlCheck() ) LogToFile(CurrentMethodName + ": Someone is controlling via ARD/VNC, waiting...") wend // When there is not remote control LogToFile(CurrentMethodName + ": No one is controlling via ARD/VNC, continuing...") End Sub #tag EndMethod #tag Method, Flags = &h21 Private Sub Thread_WaitForUserInput(paramThread as WatchForIdleThread) LogToFile(CurrentMethodName + ": --->") // Set how long to wait before logging out user, set from global variable for LogOutDelay Dim pLogoutDelay as Integer = pWaitForUserPromptSeconds // While we're waiting for the countdown to finish... While pLogoutDelay >= 0 // LogToFile(CurrentMethodName + "Time Left: " + str(pLogoutDelay)) // Set global variable to the time left pCountDownTime = pLogoutDelay // call updateUI to set countdown label pIdleCountDownThread.UpdateUI() // take a second away from the time left pLogoutDelay = pLogoutDelay - 1 // do nothing for 1 second App.SleepCurrentThread( 1000 ) // sleep 1 second Wend // If we're here, the user didn't cancel or log out manaully // user did not ask for more time pMoreTimeAskedFor = false // Log LogToFile(CurrentMethodName + ": Time Out for Response. Log User Out...") // Done here LogToFile(CurrentMethodName + ": <---") // Return to Thread_Finished End Sub #tag EndMethod #tag Note, Name = Icon Application Icon use with CC license: From http://www.flickr.com/photos/23453447@N02/5107438855/sizes/o/in/photostream/ By zyrquel http://www.flickr.com/photos/23453447@N02/ #tag EndNote #tag Property, Flags = &h0 pAppVersion As String = "2.0" #tag EndProperty #tag Property, Flags = &h0 pComputerIdleAfterNumSeconds As Integer = 900 #tag EndProperty #tag Property, Flags = &h0 pCountDownTime As Integer #tag EndProperty #tag Property, Flags = &h0 pDefaultPrefsFileName As String = "edu.psu.its.clc.IdleLogoutSettings.plist" #tag EndProperty #tag Property, Flags = &h0 pDefaultPrefsFSPath As String = "/Library/CLMadmin/Config/" #tag EndProperty #tag Property, Flags = &h0 pIdleCountDownThread As WatchForIdleThread #tag EndProperty #tag Property, Flags = &h0 pIdleLoopDelaySeconds As Integer = 60 #tag EndProperty #tag Property, Flags = &h0 pIgnoreGroup As String = "admin" #tag EndProperty #tag Property, Flags = &h0 pIgnoreUser As String = "macadmin" #tag EndProperty #tag Property, Flags = &h0 pMoreTimeAskedFor As Boolean = true #tag EndProperty #tag Property, Flags = &h0 pWaitForUserPromptSeconds As Integer = 90 #tag EndProperty #tag Property, Flags = &h0 pWatchForIdleThread As WatchForIdleThread #tag EndProperty #tag Constant, Name = kEditClear, Type = String, Dynamic = False, Default = \"&Delete", Scope = Public #Tag Instance, Platform = Windows, Language = Default, Definition = \"&Delete" #Tag Instance, Platform = Linux, Language = Default, Definition = \"&Delete" #tag EndConstant #tag Constant, Name = kFileQuit, Type = String, Dynamic = False, Default = \"&Quit", Scope = Public #Tag Instance, Platform = Windows, Language = Default, Definition = \"E&xit" #tag EndConstant #tag Constant, Name = kFileQuitShortcut, Type = String, Dynamic = False, Default = \"", Scope = Public #Tag Instance, Platform = Mac OS, Language = Default, Definition = \"Cmd+Q" #Tag Instance, Platform = Linux, Language = Default, Definition = \"Ctrl+Q" #tag EndConstant #tag Enum, Name = eTaskType, Type = Int32, Flags = &h0 StartIdleWatch StartUserCountDown #tag EndEnum #tag ViewBehavior #tag ViewProperty Name="pAppVersion" Group="Behavior" InitialValue="1.1" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Untitled" Group="Behavior" Type="Integer" #tag EndViewProperty #tag EndViewBehavior End Class #tag EndClass
\ No newline at end of file
......
#tag Window Begin Window LogoutWarning BackColor = &cFFFFFF00 Backdrop = 0 CloseButton = False Compatibility = "" Composite = False Frame = 7 FullScreen = False FullScreenButton= False HasBackColor = False Height = 237 ImplicitInstance= True LiveResize = False MacProcID = 0 MaxHeight = 32000 MaximizeButton = False MaxWidth = 32000 MenuBar = 0 MenuBarVisible = False MinHeight = 64 MinimizeButton = False MinWidth = 64 Placement = 2 Resizeable = False Title = "Idle Logout" Visible = True Width = 600 Begin PushButton BLogOut AutoDeactivate = True Bold = False ButtonStyle = "0" Cancel = False Caption = "Log Out" Default = False Enabled = True Height = 20 HelpTag = "" Index = -2147483648 InitialParent = "" Italic = False Left = 397 LockBottom = False LockedInPosition= False LockLeft = True LockRight = False LockTop = True Scope = 0 TabIndex = 1 TabPanelIndex = 0 TabStop = True TextFont = "System" TextSize = 0.0 TextUnit = 0 Top = 197 Underline = False Visible = True Width = 80 End Begin PushButton BMoreTime AutoDeactivate = False Bold = False ButtonStyle = "0" Cancel = False Caption = "More time" Default = True Enabled = True Height = 20 HelpTag = "" Index = -2147483648 InitialParent = "" Italic = False Left = 500 LockBottom = False LockedInPosition= False LockLeft = True LockRight = False LockTop = True Scope = 0 TabIndex = 2 TabPanelIndex = 0 TabStop = True TextFont = "System" TextSize = 0.0 TextUnit = 0 Top = 197 Underline = False Visible = True Width = 80 End Begin Label WarningTitle AutoDeactivate = True Bold = False DataField = "" DataSource = "" Enabled = True Height = 39 HelpTag = "" Index = -2147483648 InitialParent = "" Italic = False Left = 112 LockBottom = False LockedInPosition= False LockLeft = True LockRight = False LockTop = True Multiline = False Scope = 0 Selectable = False TabIndex = 3 TabPanelIndex = 0 TabStop = True Text = "PSU Idle Logout" TextAlign = 1 TextColor = &c00000000 TextFont = "System" TextSize = 30.0 TextUnit = 0 Top = 0 Transparent = False Underline = False Visible = True Width = 377 End Begin Label WarningMessage AutoDeactivate = True Bold = False DataField = "" DataSource = "" Enabled = True Height = 84 HelpTag = "" Index = -2147483648 InitialParent = "" Italic = False Left = 20 LockBottom = False LockedInPosition= False LockLeft = True LockRight = False LockTop = True Multiline = True Scope = 0 Selectable = False TabIndex = 4 TabPanelIndex = 0 TabStop = True Text = "This Mac is idle.\r\rClick the ""More Time"" button to continue using the Mac.\r\rOtherwise, an automatic logout will occur and all unsaved documents will be LOST!" TextAlign = 0 TextColor = &c00000000 TextFont = "System" TextSize = 0.0 TextUnit = 0 Top = 34 Transparent = False Underline = False Visible = True Width = 560 End Begin Label Seconds AutoDeactivate = True Bold = False DataField = "" DataSource = "" Enabled = True Height = 25 HelpTag = "" Index = -2147483648 InitialParent = "" Italic = False Left = 20 LockBottom = False LockedInPosition= False LockLeft = True LockRight = False LockTop = True Multiline = False Scope = 0 Selectable = False TabIndex = 6 TabPanelIndex = 0 TabStop = True Text = "Seconds remaining before automatic logout..." TextAlign = 0 TextColor = &c00000000 TextFont = "System" TextSize = 0.0 TextUnit = 0 Top = 127 Transparent = False Underline = False Visible = True Width = 301 End Begin Thread IdleThread Enabled = True Height = "32" Index = -2147483648 InitialParent = "" Left = 13 LockedInPosition= False Priority = 5 Scope = 0 StackSize = 0 TabPanelIndex = 0 Top = 268 Visible = True Width = "32" End Begin Thread CountdownThread Enabled = True Height = "32" Index = -2147483648 InitialParent = "" Left = 57 LockedInPosition= False Priority = 5 Scope = 0 StackSize = 0 TabPanelIndex = 0 Top = 268 Visible = True Width = "32" End Begin Label TimeLabel AutoDeactivate = True Bold = False DataField = "" DataSource = "" Enabled = True Height = 51 HelpTag = "" Index = -2147483648 InitialParent = "" Italic = False Left = 268 LockBottom = False LockedInPosition= False LockLeft = True LockRight = False LockTop = True Multiline = False Scope = 0 Selectable = False TabIndex = 5 TabPanelIndex = 0 TabStop = True Text = "" TextAlign = 1 TextColor = &c00000000 TextFont = "System" TextSize = 30.0 TextUnit = 0 Top = 166 Transparent = False Underline = False Visible = True Width = 64 End End #tag EndWindow #tag WindowCode #tag Method, Flags = &h0 Sub forceLogout() // Testing mode, use say instead of logout Dim s As Shell s=New Shell dim ShellResults as string s.Mode = 0 // s.Execute "say Logging Out" // Testing line pMoreTimeAskedFor = false LogToFile(CurrentMethodName + ": Time Out for Response. Log User Out...") // s.Execute "/bin/bash /Library/CLMadmin/psuForceLogOut.sh" // Use this line to test logouts LogToFile("Found User $currentuser") LogToFile("Killing Apps") LogToFile("Killing all launched from /Applications") s.Execute("kill -9 `ps axxx | grep ""/Applications"" | awk '{print $1}'`") ShellResults = s.Result LogToFile("App Kill Results: " + ShellResults) LogToFile("Killing the psuStartupManger") s.Execute("kill -9 `ps axxx | grep ""/Library/CLMshared/Startup Items/psuStartupManager.app"" |grep applet | awk '{print $1}'`") ShellResults = s.Result LogToFile("StartupManager Kill Results: " + ShellResults) LogToFile("Tell AppleScript to log it out") // Old method seems to fail now on 10.10.3! //s.Execute("osascript -e 'tell application ""System Events""' -e 'keystroke ""q"" using {command down, shift down, option down}' -e 'end tell'") // New method to logout with osascript. s.Execute("osascript -e 'tell application ""System Events"" to keystroke ""q"" using {command down, shift down, option down}'") ShellResults = s.Result LogToFile("LogOut AS Results: " + ShellResults) LogToFile(CurrentMethodName + ": <---") End Sub #tag EndMethod #tag Method, Flags = &h0 Function IdleSeconds() As Integer // Set up variables for idle time // Shell result Dim mIdleSecs As String // Shell exit code Dim merrCode As Integer // Set up shell Dim s As Shell s=New Shell s.Mode = 0 // Check idle time //s.Execute code to check idle time from USB input devices s.Execute "/bin/echo $((`/usr/sbin/ioreg -c IOHIDSystem | /usr/bin/sed -e '/HIDIdleTime/ !{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'` / 1000000000))" // Set results to mIdleResult mIdleSecs = s.Result // Set error code to mIdleError merrCode = s.ErrorCode // Log mIdleResult for debugging // System.Log(System.LogLevelError, "Method: " + midleSecs) // LogToFile("mIdleSeconds: " + str(mIdleSecs)) Return val(mIdleSecs) End Function #tag EndMethod #tag Method, Flags = &h0 Function makeFolder(mkdirPath As string) As Boolean // Set up variables for idle time // Shell result = mkdirPath // Shell exit code Dim merrCode As Integer // Set up shell Dim s As Shell s=New Shell s.Mode = 0 // Check idle time //s.Execute code to check idle time from USB input devices s.Execute "mkdir -p /Users/Shared" // Set results to mIdleResult mkdirPath = s.Result // Set error code to mIdleError merrCode = s.ErrorCode // Log mIdleResult for debugging // System.Log(System.LogLevelError, "Method: " + midleSecs) // LogToFile("mIdleSeconds: " + str(mIdleSecs)) if mkdirPath = "0" then return true else return false end End Function #tag EndMethod #tag Method, Flags = &h0 Function RemoteControlCheck() As Boolean // Set up variables for idle time Dim stablished as String = "ESTABLISHED" // Shell result Dim rccheck As String // Shell exit code Dim merrCode As Integer // Set up shell Dim s As Shell s=New Shell s.Mode = 0 // Check idle time //s.Execute code to check for connection s.Execute "/usr/sbin/netstat -n | /usr/bin/grep '.5900'| /usr/bin/awk '{print $6}'" // Set results to rccheck // Make the entire returned text uppercase in case Apple ever changes the case to CaMeL CaSe, which would break our code: rccheck = Uppercase(s.Result) //Testing line below // rccheck ="ESTABLISHED" //LogToFile("rccheck: " + rccheck) // Set error code to merrCode merrCode = s.ErrorCode // LogToFile("rccheck: "+ rccheck) // LogToFile("stablished: "+ stablished) If ( InStr( rccheck, stablished ) > 0 ) then return true else //LogToFile("rccheck: false") return false End if // System.Log(System.LogLevelError, "Method: " + midleSecs) // LogToFile("mIdleSeconds: " + str(mIdleSecs)) End Function #tag EndMethod #tag Method, Flags = &h0 Function WaitForIdleTime(paramNumSecondsIdleToWait as integer) As Boolean Dim mIdleResult As Integer mIdleResult = IdleSeconds() while ( mIdleResult < paramNumSecondsIdleToWait ) // Wait pIdleLoopDelaySeconds: App.SleepCurrentThread( pIdleLoopDelaySeconds * 1000 ) // Check idle time: mIdleResult = IdleSeconds() LogToFile(CurrentMethodName + ": Idle Seconds: " + str(mIdleResult)) wend // if there is a ARD/VNC session, don't idle out // netstat -n | grep '.5900' if ( RemoteControlCheck() ) then //LogToFile("rcCheck = true") LogToFile(CurrentMethodName + ": Someone is controlling via ARD/VNC, waiting...") return false else //LogToFile("rcCheck = false") LogToFile(CurrentMethodName + ": No one is controlling via ARD/VNC, continuing...") return true end if End Function #tag EndMethod #tag Property, Flags = &h0 pComputerIdleAfterNumSeconds As Integer = 900 #tag EndProperty #tag Property, Flags = &h0 pDefaultPrefsFileName As String = "edu.psu.its.clc.IdleLogoutSettings.plist" #tag EndProperty #tag Property, Flags = &h0 pDefaultPrefsFSPath As String = "/Library/CLMadmin/Config/" #tag EndProperty #tag Property, Flags = &h0 pIdleLoopDelaySeconds As Integer = 60 #tag EndProperty #tag Property, Flags = &h0 pIgnoreGroup As String = "admin" #tag EndProperty #tag Property, Flags = &h0 pIgnoreUser As String = "macadmin" #tag EndProperty #tag Property, Flags = &h0 pMoreTimeAskedFor As Boolean = true #tag EndProperty #tag Property, Flags = &h0 pWaitForUserPromptSeconds As Integer = 90 #tag EndProperty #tag EndWindowCode #tag Events BLogOut #tag Event Sub Action() // Testing code Dim s As Shell s=New Shell s.Mode = 0 // s.execute "say logout" // Use this line to test logouts LogToFile("User chose LogOut") // No more time, please pMoreTimeAskedFor = false LogToFile("Kill open threads") CountdownThread.Kill IdleThread.Kill // Log out the user LogToFile("Quitting") s.Execute "/bin/bash /Library/CLMadmin/psuForceLogOut.sh" // Use this line to test logouts //s.execute "/usr/bin/sudo /Library/CLMshared/psuRebootNow.pl" // Use this line to test logouts Quit End Sub #tag EndEvent #tag EndEvents #tag Events BMoreTime #tag Event Sub Action() // Testing code Dim s As Shell s=New Shell s.Mode = 0 // s.execute "say More Time" LogToFile("More Time Requested") // Ask for more time //pMoreTimeAskedFor = true // Resume IdleThread IdleThread.Resume // Stop the current countdown CountdownThread.Kill // Get rid of the window LogoutWarning.Hide End Sub #tag EndEvent #tag EndEvents #tag Events IdleThread #tag Event Sub Run() LogToFile(CurrentMethodName + ": --->") // User has been idle 0 seconds so far Dim idleTime as Integer = 0 // How long to wait between checking idle time // Dim gLoopDelay as Integer = 30 // pIdleTime = How long to wait before considering computer abandonded pMoreTimeAskedFor = false do if ( WaitForIdleTime( pComputerIdleAfterNumSeconds ) ) then LogToFile(CurrentMethodName + ": CountdownThread Start") CountdownThread.Run else // Do Nothing... LogToFile(CurrentMethodName + ": Not Time Yet...") end if //LogToFile("pMoreTimeAskedFor = " + str(pMoreTimeAskedFor)) Loop until ( pMoreTimeAskedFor ) LogToFile(CurrentMethodName + ": <---") End Sub #tag EndEvent #tag EndEvents #tag Events CountdownThread #tag Event Sub Run() LogToFile(CurrentMethodName + ": --->") // Set how long to wait before logging out user, set from global variable for LogOutDelay Dim pLogoutDelay as Integer = pWaitForUserPromptSeconds LogoutWarning.Show() // Stop the idle thread IdleThread.Suspend // While we're waiting for the countdown to finish... While pLogoutDelay >= 0 // Set label to the time left TimeLabel.setString(str(pLogoutDelay)) // Refresh it TimeLabel.Refresh // take a second away from the time left pLogoutDelay = pLogoutDelay - 1 // do nothing for 1 second App.SleepCurrentThread( 1000 ) // sleep 1 second Wend // If we're here, the user didn't cancel or log out manaully // Testing mode, use say instead of logout Dim s As Shell s=New Shell s.Mode = 0 // s.Execute "say Logging Out" // Testing line pMoreTimeAskedFor = false LogToFile(CurrentMethodName + ": Time Out for Response. Log User Out...") LogToFile(CurrentMethodName + ": <---") //s.Execute "/usr/bin/sudo /Library/CLMshared/psuRebootNow.pl" // Run script to reboot Mac //s.Execute "/bin/bash /Library/CLMadmin/psuForceLogOut.sh" // Use this line to test logouts LogoutWarning.forceLogout // Quit app Quit End Sub #tag EndEvent #tag EndEvents #tag ViewBehavior #tag ViewProperty Name="BackColor" Visible=true Group="Appearance" InitialValue="&hFFFFFF" Type="Color" #tag EndViewProperty #tag ViewProperty Name="Backdrop" Visible=true Group="Appearance" Type="Picture" EditorType="Picture" #tag EndViewProperty #tag ViewProperty Name="CloseButton" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="Composite" Visible=true Group="Appearance" InitialValue="False" Type="Boolean" #tag EndViewProperty #tag ViewProperty Name="Frame" Visible=true Group="Appearance" InitialValue="0" Type="Integer" EditorType="Enum" #tag EnumValues "0 - Document" "1 - Movable Modal" "2 - Modal Dialog" "3 - Floating Window" "4 - Plain Box" "5 - Shadowed Box" "6 - Rounded Window" "7 - Global Floating Window" "8 - Sheet Window" "9 - Metal Window" "10 - Drawer Window" "11 - Modeless Dialog" #tag EndEnumValues #tag EndViewProperty #tag ViewProperty Name="FullScreen" Group="Appearance" InitialValue="False" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="FullScreenButton" Visible=true Group="Appearance" InitialValue="False" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="HasBackColor" Visible=true Group="Appearance" InitialValue="False" Type="Boolean" #tag EndViewProperty #tag ViewProperty Name="Height" Visible=true Group="Position" InitialValue="400" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="ImplicitInstance" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="Interfaces" Visible=true Group="ID" Type="String" EditorType="String" #tag EndViewProperty #tag ViewProperty Name="LiveResize" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="MacProcID" Visible=true Group="Appearance" InitialValue="0" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="MaxHeight" Visible=true Group="Position" InitialValue="32000" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="MaximizeButton" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="MaxWidth" Visible=true Group="Position" InitialValue="32000" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="MenuBar" Visible=true Group="Appearance" Type="MenuBar" EditorType="MenuBar" #tag EndViewProperty #tag ViewProperty Name="MenuBarVisible" Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="MinHeight" Visible=true Group="Position" InitialValue="64" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="MinimizeButton" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="MinWidth" Visible=true Group="Position" InitialValue="64" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" Type="String" EditorType="String" #tag EndViewProperty #tag ViewProperty Name="pComputerIdleAfterNumSeconds" Group="Behavior" InitialValue="900" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="pDefaultPrefsFileName" Group="Behavior" InitialValue="edu.psu.its.clc.IdleLogoutSettings.plist" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="pDefaultPrefsFSPath" Group="Behavior" InitialValue="/Library/CLMadmin/Config/" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="pIdleLoopDelaySeconds" Group="Behavior" InitialValue="30" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="pIgnoreGroup" Group="Behavior" InitialValue="admin" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="pIgnoreUser" Group="Behavior" InitialValue="macadmin" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Placement" Visible=true Group="Position" InitialValue="0" Type="Integer" EditorType="Enum" #tag EnumValues "0 - Default" "1 - Parent Window" "2 - Main Screen" "3 - Parent Window Screen" "4 - Stagger" #tag EndEnumValues #tag EndViewProperty #tag ViewProperty Name="pMoreTimeAskedFor" Group="Behavior" InitialValue="true" Type="Boolean" #tag EndViewProperty #tag ViewProperty Name="pWaitForUserPromptSeconds" Group="Behavior" InitialValue="90" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="Resizeable" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" Type="String" EditorType="String" #tag EndViewProperty #tag ViewProperty Name="Title" Visible=true Group="Appearance" InitialValue="Untitled" Type="String" #tag EndViewProperty #tag ViewProperty Name="Visible" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="Width" Visible=true Group="Position" InitialValue="600" Type="Integer" #tag EndViewProperty #tag EndViewBehavior
\ No newline at end of file
#tag Window Begin Window LogoutWarning BackColor = &cFFFFFF00 Backdrop = 0 CloseButton = False Compatibility = "" Composite = False Frame = 7 FullScreen = False FullScreenButton= False HasBackColor = False Height = 237 ImplicitInstance= True LiveResize = False MacProcID = 0 MaxHeight = 32000 MaximizeButton = False MaxWidth = 32000 MenuBar = 0 MenuBarVisible = False MinHeight = 64 MinimizeButton = False MinWidth = 64 Placement = 2 Resizeable = False Title = "Idle Logout" Visible = True Width = 600 Begin PushButton BLogOut AutoDeactivate = True Bold = False ButtonStyle = "0" Cancel = False Caption = "Log Out" Default = False Enabled = True Height = 20 HelpTag = "" Index = -2147483648 InitialParent = "" Italic = False Left = 397 LockBottom = False LockedInPosition= False LockLeft = True LockRight = False LockTop = True Scope = 0 TabIndex = 1 TabPanelIndex = 0 TabStop = True TextFont = "System" TextSize = 0.0 TextUnit = 0 Top = 197 Underline = False Visible = True Width = 80 End Begin PushButton BMoreTime AutoDeactivate = False Bold = False ButtonStyle = "0" Cancel = False Caption = "More time" Default = True Enabled = True Height = 20 HelpTag = "" Index = -2147483648 InitialParent = "" Italic = False Left = 500 LockBottom = False LockedInPosition= False LockLeft = True LockRight = False LockTop = True Scope = 0 TabIndex = 2 TabPanelIndex = 0 TabStop = True TextFont = "System" TextSize = 0.0 TextUnit = 0 Top = 197 Underline = False Visible = True Width = 80 End Begin Label WarningTitle AutoDeactivate = True Bold = False DataField = "" DataSource = "" Enabled = True Height = 39 HelpTag = "" Index = -2147483648 InitialParent = "" Italic = False Left = 112 LockBottom = False LockedInPosition= False LockLeft = True LockRight = False LockTop = True Multiline = False Scope = 0 Selectable = False TabIndex = 3 TabPanelIndex = 0 Text = "PSU Idle Logout" TextAlign = 1 TextColor = &c00000000 TextFont = "System" TextSize = 30.0 TextUnit = 0 Top = 0 Transparent = False Underline = False Visible = True Width = 377 End Begin Label WarningMessage AutoDeactivate = True Bold = False DataField = "" DataSource = "" Enabled = True Height = 84 HelpTag = "" Index = -2147483648 InitialParent = "" Italic = False Left = 20 LockBottom = False LockedInPosition= False LockLeft = True LockRight = False LockTop = True Multiline = True Scope = 0 Selectable = False TabIndex = 4 TabPanelIndex = 0 Text = "This Mac is idle.\r\rClick the ""More Time"" button to continue using the Mac.\r\rOtherwise, an automatic logout will occur and all unsaved documents will be LOST!" TextAlign = 0 TextColor = &c00000000 TextFont = "System" TextSize = 0.0 TextUnit = 0 Top = 34 Transparent = False Underline = False Visible = True Width = 560 End Begin Label Seconds AutoDeactivate = True Bold = False DataField = "" DataSource = "" Enabled = True Height = 25 HelpTag = "" Index = -2147483648 InitialParent = "" Italic = False Left = 20 LockBottom = False LockedInPosition= False LockLeft = True LockRight = False LockTop = True Multiline = False Scope = 0 Selectable = False TabIndex = 6 TabPanelIndex = 0 Text = "Seconds remaining before automatic logout..." TextAlign = 0 TextColor = &c00000000 TextFont = "System" TextSize = 0.0 TextUnit = 0 Top = 127 Transparent = False Underline = False Visible = True Width = 301 End Begin Label TimeLabel AutoDeactivate = True Bold = False DataField = "" DataSource = "" Enabled = True Height = 51 HelpTag = "" Index = -2147483648 InitialParent = "" Italic = False Left = 268 LockBottom = False LockedInPosition= False LockLeft = True LockRight = False LockTop = True Multiline = False Scope = 0 Selectable = False TabIndex = 5 TabPanelIndex = 0 Text = "" TextAlign = 1 TextColor = &c00000000 TextFont = "System" TextSize = 30.0 TextUnit = 0 Top = 166 Transparent = False Underline = False Visible = True Width = 64 End End #tag EndWindow #tag WindowCode #tag Property, Flags = &h0 mTimeLabelValue As Integer = 0 #tag EndProperty #tag EndWindowCode #tag Events BLogOut #tag Event Sub Action() // Log our action LogToFile("User chose LogOut") // No more time, please App.pMoreTimeAskedFor = false // Kill any countdown thread App.pIdleCountDownThread.kill // Log out the user LogToFile("Quitting") // Forcing logout App.forceLogout() End Sub #tag EndEvent #tag EndEvents #tag Events BMoreTime #tag Event Sub Action() LogToFile("More Time Requested") // Ask for more time App.pMoreTimeAskedFor = true // kill the current threads App.pIdleCountDownThread.kill App.pWatchForIdleThread.kill // start the idle watch thread App.StartIdleWatch() End Sub #tag EndEvent #tag Event Function KeyDown(Key As String) As Boolean If Key = chr(13) or Key = chr(3) Then //catch "Enter" key as well LogToFile(CurrentMethodName + "Got Enter Key. Make it do the same as the Action") LogToFile("More Time Requested") // Ask for more time App.pMoreTimeAskedFor = true // kill the current threads App.pIdleCountDownThread.kill App.pWatchForIdleThread.kill // start the idle watch thread App.StartIdleWatch() end if End Function #tag EndEvent #tag EndEvents #tag ViewBehavior #tag ViewProperty Name="BackColor" Visible=true Group="Appearance" InitialValue="&hFFFFFF" Type="Color" #tag EndViewProperty #tag ViewProperty Name="Backdrop" Visible=true Group="Appearance" Type="Picture" EditorType="Picture" #tag EndViewProperty #tag ViewProperty Name="CloseButton" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="Composite" Visible=true Group="Appearance" InitialValue="False" Type="Boolean" #tag EndViewProperty #tag ViewProperty Name="Frame" Visible=true Group="Appearance" InitialValue="0" Type="Integer" EditorType="Enum" #tag EnumValues "0 - Document" "1 - Movable Modal" "2 - Modal Dialog" "3 - Floating Window" "4 - Plain Box" "5 - Shadowed Box" "6 - Rounded Window" "7 - Global Floating Window" "8 - Sheet Window" "9 - Metal Window" "10 - Drawer Window" "11 - Modeless Dialog" #tag EndEnumValues #tag EndViewProperty #tag ViewProperty Name="FullScreen" Group="Appearance" InitialValue="False" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="FullScreenButton" Visible=true Group="Appearance" InitialValue="False" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="HasBackColor" Visible=true Group="Appearance" InitialValue="False" Type="Boolean" #tag EndViewProperty #tag ViewProperty Name="Height" Visible=true Group="Position" InitialValue="400" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="ImplicitInstance" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="Interfaces" Visible=true Group="ID" Type="String" EditorType="String" #tag EndViewProperty #tag ViewProperty Name="LiveResize" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="MacProcID" Visible=true Group="Appearance" InitialValue="0" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="MaxHeight" Visible=true Group="Position" InitialValue="32000" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="MaximizeButton" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="MaxWidth" Visible=true Group="Position" InitialValue="32000" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="MenuBar" Visible=true Group="Appearance" Type="MenuBar" EditorType="MenuBar" #tag EndViewProperty #tag ViewProperty Name="MenuBarVisible" Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="MinHeight" Visible=true Group="Position" InitialValue="64" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="MinimizeButton" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="MinWidth" Visible=true Group="Position" InitialValue="64" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="mTimeLabelValue" Group="Behavior" InitialValue="0" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" Type="String" EditorType="String" #tag EndViewProperty #tag ViewProperty Name="pComputerIdleAfterNumSeconds" Group="Behavior" InitialValue="900" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="pDefaultPrefsFileName" Group="Behavior" InitialValue="edu.psu.its.clc.IdleLogoutSettings.plist" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="pDefaultPrefsFSPath" Group="Behavior" InitialValue="/Library/CLMadmin/Config/" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="pIdleLoopDelaySeconds" Group="Behavior" InitialValue="30" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="pIgnoreGroup" Group="Behavior" InitialValue="admin" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="pIgnoreUser" Group="Behavior" InitialValue="macadmin" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Placement" Visible=true Group="Position" InitialValue="0" Type="Integer" EditorType="Enum" #tag EnumValues "0 - Default" "1 - Parent Window" "2 - Main Screen" "3 - Parent Window Screen" "4 - Stagger" #tag EndEnumValues #tag EndViewProperty #tag ViewProperty Name="pMoreTimeAskedFor" Group="Behavior" InitialValue="true" Type="Boolean" #tag EndViewProperty #tag ViewProperty Name="pWaitForUserPromptSeconds" Group="Behavior" InitialValue="90" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="readyToQuit" Group="Behavior" InitialValue="false" Type="Boolean" #tag EndViewProperty #tag ViewProperty Name="Resizeable" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" Type="String" EditorType="String" #tag EndViewProperty #tag ViewProperty Name="Title" Visible=true Group="Appearance" InitialValue="Untitled" Type="String" #tag EndViewProperty #tag ViewProperty Name="Visible" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" EditorType="Boolean" #tag EndViewProperty #tag ViewProperty Name="Width" Visible=true Group="Position" InitialValue="600" Type="Integer" #tag EndViewProperty #tag EndViewBehavior
\ No newline at end of file
......
#tag Class Protected Class Task Inherits Thread #tag Event Sub Run() InternalPushEvent( New TaskEvent( TaskEvent.Types.Begin ) ) Try RaiseEvent Run Catch exc As ThreadEndException // FIXME: we probably want to make sure this isn't being sent because // the app is quitting? InternalPushEvent( New TaskEvent( TaskEvent.Types.Killed ) ) Raise exc End Try InternalPushEvent( New TaskEvent( TaskEvent.Types.Finished ) ) End Sub #tag EndEvent #tag Method, Flags = &h1000 Sub Constructor() mLock = New CriticalSection mTimer = New Timer AddHandler mTimer.Action, WeakAddressOf InternalDispatchEvents End Sub #tag EndMethod #tag Method, Flags = &h21 Private Sub InternalDispatchEvents(sender as Timer) // Takes the events in the queue and dispatches them to the correct event handler. // // NOTE: must be called from the main thread. While True Dim currentEvent As TaskEvent mLock.Enter If mEvents.UBound >= 0 Then currentEvent = mEvents( 0 ) mEvents.Remove( 0 ) Else mLock.Leave Exit Sub End If mLock.Leave Select Case currentEvent.type Case TaskEvent.Types.Begin RaiseEvent Begin Case TaskEvent.Types.UpdateUI RaiseEvent UpdateUI( currentEvent.Arguments ) Case TaskEvent.Types.Finished RaiseEvent Finished Case TaskEvent.Types.Killed RaiseEvent Killed End Select Wend End Sub #tag EndMethod #tag Method, Flags = &h21 Private Sub InternalPushEvent(evt as TaskEvent) // Adds an event to the event queue. This can be called from any thread, but is // usually called from the non-main thread. mLock.Enter mEvents.Append( evt ) mTimer.Period = 0 mTimer.Mode = Timer.ModeSingle mLock.Leave End Sub #tag EndMethod #tag Method, Flags = &h0 Sub UpdateUI(args as Dictionary) // Adds an UpdateUI event to the queue, which will eventually be dequeued // on the main thread and raise the UpdateUI event. Dim evt As New TaskEvent( TaskEvent.Types.updateUI ) evt.Arguments = args internalPushEvent( evt ) End Sub #tag EndMethod #tag Method, Flags = &h0 Sub UpdateUI(paramarray args as Pair) // Adds an UpdateUI event to the queue, which will eventually be dequeued // on the main thread and raise the UpdateUI event. // // This specific method is a convenience function in order to be able to // use Pair literals. For example: // UpdateUI( "progress": 10, "total_progress": 100 ) Dim d As New Dictionary For Each arg As Pair In args d.Value( arg.Left ) = arg.Right Next Self.UpdateUI( d ) End Sub #tag EndMethod #tag Hook, Flags = &h0 Event Begin() #tag EndHook #tag Hook, Flags = &h0 Event Finished() #tag EndHook #tag Hook, Flags = &h0 Event Killed() #tag EndHook #tag Hook, Flags = &h0 Event Run() #tag EndHook #tag Hook, Flags = &h0 Event UpdateUI(args as Dictionary) #tag EndHook #tag Property, Flags = &h21 #tag Note The queue of pending events. This is protected by mLock in order to provide thread safety. #tag EndNote Private mEvents() As TaskEvent #tag EndProperty #tag Property, Flags = &h21 Private mLock As CriticalSection #tag EndProperty #tag Property, Flags = &h21 #tag Note This timer is used to punt events from the thread onto the main thread, where InternalDispatchEvents will process all of the queued events. #tag EndNote Private mTimer As Timer #tag EndProperty #tag ViewBehavior #tag ViewProperty Name="Index" Visible=true Group="ID" Type="Integer" EditorType="Integer" #tag EndViewProperty #tag ViewProperty Name="Left" Visible=true Group="Position" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" Type="String" EditorType="String" #tag EndViewProperty #tag ViewProperty Name="Priority" Visible=true Group="Behavior" InitialValue="5" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="StackSize" Visible=true Group="Behavior" InitialValue="0" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" Type="String" EditorType="String" #tag EndViewProperty #tag ViewProperty Name="Top" Visible=true Group="Position" Type="Integer" #tag EndViewProperty #tag EndViewBehavior End Class #tag EndClass
\ No newline at end of file
#tag Class Protected Class TaskEvent #tag Method, Flags = &h0 Sub Constructor(type as Types) Self.Type = type End Sub #tag EndMethod #tag Property, Flags = &h0 Arguments As Dictionary #tag EndProperty #tag Property, Flags = &h0 Type As Types #tag EndProperty #tag Enum, Name = Types, Type = Integer, Flags = &h0 Begin Finished UpdateUI Killed #tag EndEnum #tag ViewBehavior #tag ViewProperty Name="Index" Visible=true Group="ID" InitialValue="-2147483648" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="Left" Visible=true Group="Position" InitialValue="0" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" Type="String" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" Type="String" #tag EndViewProperty #tag ViewProperty Name="Top" Visible=true Group="Position" InitialValue="0" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="Type" Group="Behavior" Type="Types" EditorType="Enum" #tag EnumValues "0 - Begin" "1 - Finished" "2 - UpdateUI" "3 - Killed" #tag EndEnumValues #tag EndViewProperty #tag EndViewBehavior End Class #tag EndClass
\ No newline at end of file
#tag Class Protected Class WatchForIdleThread Inherits Task #tag Event Sub UpdateUI(args as Dictionary) // Set the label to our current count time LogoutWarning.TimeLabel.setString(str(App.pCountDownTime)) End Sub #tag EndEvent #tag Method, Flags = &h1000 Sub Constructor(paramTaskType as integer) // Calling the overridden superclass constructor. Super.Constructor( ) // set the new object to one of our enumerated list values pTaskType = paramTaskType End Sub #tag EndMethod #tag Property, Flags = &h0 pTaskType As Int32 #tag EndProperty #tag ViewBehavior #tag ViewProperty Name="Index" Visible=true Group="ID" InitialValue="-2147483648" Type="Integer" EditorType="Integer" #tag EndViewProperty #tag ViewProperty Name="Left" Visible=true Group="Position" InitialValue="0" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" Type="String" EditorType="String" #tag EndViewProperty #tag ViewProperty Name="Priority" Visible=true Group="Behavior" InitialValue="5" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="pTaskType" Group="Behavior" Type="Int32" #tag EndViewProperty #tag ViewProperty Name="StackSize" Visible=true Group="Behavior" InitialValue="0" Type="Integer" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" Type="String" EditorType="String" #tag EndViewProperty #tag ViewProperty Name="Top" Visible=true Group="Position" InitialValue="0" Type="Integer" #tag EndViewProperty #tag EndViewBehavior End Class #tag EndClass
\ No newline at end of file
No preview for this file type
Type=Desktop RBProjectVersion=2014.03 MinIDEVersion=20070100 Class=IdleLogout;IdleLogout.rbbas;&h3007783E;&h0;false Window=LogoutWarning;LogoutWarning.rbfrm;&h3A6788BA;&h0;false MenuBar=MenuBar1;MenuBar1.rbmnu;&h6341CAF0;&h0;false BuildSteps=Build Automation;Build Automation.rbbas;&h2A7E2380;&h0;false Module=LogToFile;LogToFile.rbbas;&h236DD59E;&h0;false Module=Globals;Globals.rbbas;&h7FE3CBE3;&h0;false Module=MiscMethods;MiscMethods.rbbas;&h445F2753;&h0;false Module=myXMLTools;myXMLTools.rbbas;&h6DD0A4A2;&h0;false Module=PlistHelper;PlistHelper.rbbas;&h4AA6652A;&h0;false MajorVersion=1 MinorVersion=2 SubVersion=0 NonRelease=0 Release=2 InfoVersion= LongVersion=1.2, Penn State University/ITS/CLC ShortVersion=1.2 WinCompanyName= WinInternalName= WinProductName= WinFileDescription= AutoIncrementVersionInformation=False BuildFlags=&h1800 BuildLanguage=&h0 DebugLanguage=&h0 Region= WindowsName=My Application.exe MacCarbonMachName=Idle Logout LinuxX86Name=MyApplication MacCreator= MDI=0 MDICaption= DefaultEncoding=&h0 AppIcon=psuIdleLogout.rbres;&h0 OSXBundleID=edu.psu.idlelogout DebuggerCommandLine= UseGDIPlus=True UseBuildsFolder=True IsWebProject=False
\ No newline at end of file
Type=Desktop RBProjectVersion=2015.03 MinIDEVersion=20070100 Class=WatchForIdleThread;WatchForIdleThread.xojo_code;&h2ACCF4D1;&h0;false Class=TaskEvent;Task/TaskEvent.xojo_code;&h112EBBEE;&h41C1A8C2;false Class=IdleLogout;IdleLogout.rbbas;&h3007783E;&h0;false Window=LogoutWarning;LogoutWarning.rbfrm;&h3A6788BA;&h0;false MenuBar=MenuBar1;MenuBar1.rbmnu;&h6341CAF0;&h0;false Class=Task;Task/Task.xojo_code;&h133450B8;&h41C1A8C2;false BuildSteps=Build Automation;Build Automation.rbbas;&h2A7E2380;&h0;false Module=LogToFile;LogToFile.rbbas;&h236DD59E;&h0;false Module=Globals;Globals.rbbas;&h7FE3CBE3;&h0;false Module=MiscMethods;MiscMethods.rbbas;&h445F2753;&h0;false Module=myXMLTools;myXMLTools.rbbas;&h6DD0A4A2;&h0;false Module=PlistHelper;PlistHelper.rbbas;&h4AA6652A;&h0;false Folder=Task;Task;&h41C1A8C2;&h0;false MajorVersion=2 MinorVersion=0 SubVersion=0 NonRelease=0 Release=2 InfoVersion= LongVersion=1.2, Penn State University/ITS/CLC ShortVersion=2.0 WinCompanyName= WinInternalName= WinProductName= WinFileDescription= AutoIncrementVersionInformation=False BuildFlags=&h1800 BuildLanguage=&h0 DebugLanguage=&h0 Region= WindowsName=My Application.exe MacCarbonMachName=Idle Logout LinuxX86Name=MyApplication MacCreator= MDI=0 MDICaption= DefaultEncoding=&h0 AppIcon=psuIdleLogout.rbres;&h0 OSXBundleID=edu.psu.idlelogout DebuggerCommandLine= UseGDIPlus=True UseBuildsFolder=True IsWebProject=False
\ No newline at end of file
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment