Question

I am not sure what I am doing wrong, I also have no idea how to use NSTimer...I simply want to run a simple app, when you click Run...it loops a portion of the script (this is what I am trying to get NSTimer to do, and then when you click stop...it stops

So far I have this...

current application's NSTimer's timerWithTimeInterval_target_selector_userInfo_repeats_(1, me, "runOLEDWMESerial:", missing value, yes)
on runOLEDWMESerial_(sender)
    set player_active to false
    set theString to "Error;00:00:00:00"
    tell application "Finder"
        if (get name of every process) contains "NicePlayer" then set player_active to true
    end tell
    if player_active then
        try
            tell application "NicePlayer"
                if ((count of movies) is not 0) then
                    tell front playlist
                        set theName to name
                        set curSeconds to elapsed time as integer
                        set theSeconds to duration as integer
                        set theHours to theSeconds div 3600
                        set theSeconds to theSeconds - theHours * 3600
                        set theMinutes to theSeconds div 60
                        set theSeconds to theSeconds - theMinutes * 60
                        set theDuration to ""
                        if theHours > 0 then
                            if theHours < 10 then set theHours to "0" & theHours
                            set theDuration to theHours & ":"
                        end if
                        if theMinutes < 10 then set theMinutes to "0" & theMinutes
                        if theSeconds < 10 then set theSeconds to "0" & theSeconds
                        set theDuration to theDuration & theMinutes & ":" & theSeconds
                        set curHours to curSeconds div 3600
                        set curSeconds to curSeconds - curHours * 3600
                        set curMinutes to curSeconds div 60
                        set curSeconds to curSeconds - curMinutes * 60
                        set curTime to ""
                        if curHours > 0 then
                            if curHours < 10 then set curHours to "0" & curHours
                            set curDuration to curHours & ":"
                        end if
                        if curMinutes < 10 then set curMinutes to "0" & curMinutes
                        if curSeconds < 10 then set curSeconds to "0" & curSeconds
                        set curTime to curTime & curMinutes & ":" & curSeconds
                        set theString to theName & ";" & curTime & ";" & theDuration
                    end tell
                end if
            end tell
        on error errmsg
            set theString to "Error2;00:00;00:00"
        end try
    end if
    textName's setStringValue_(theName)
    textTime's setStringValue_(curTime & "/" & theDuration)
end runOLEDWMESerial_

Yes I am sure my code is ugly, but essentially this is going to be sending data via a serial port which is the main objective here, however right now I am just trying to get the window to echo what is being played...

So runOLEDWMESerial is tied to a run button...when you click the run button the loop triggers once, but then stops...if I add a repeat around everything in on runOLEDWMESERIAL_(sender) with a delay(1) it works, but also becomes un responsive in the ui and I cannot stop it...So can somebody help me understand why NSTimer is not working

Was it helpful?

Solution

I actually figured it out... I had it backwords...runOLEDWMESerial_ was the button...but if you do it this way...I also had to remove the try section as that was not allowing it to work correctly

on ClickButton_(sender)
    current application's NSTimer's timerWithTimeInterval_target_selector_userInfo_repeats_(1, me, "runOLEDWMESerial:", missing value, yes)
end Clickbutton_
    on runOLEDWMESerial_()
    set player_active to false
    set theString to "Error;00:00:00:00"
    tell application "Finder"
        if (get name of every process) contains "NicePlayer" then set player_active to true
    end tell
    if player_active then

        tell application "NicePlayer"
            if ((count of movies) is not 0) then
                tell front playlist
                    set theName to name
                    set curSeconds to elapsed time as integer
                    set theSeconds to duration as integer
                    set theHours to theSeconds div 3600
                    set theSeconds to theSeconds - theHours * 3600
                    set theMinutes to theSeconds div 60
                    set theSeconds to theSeconds - theMinutes * 60
                    set theDuration to ""
                    if theHours > 0 then
                        if theHours < 10 then set theHours to "0" & theHours
                        set theDuration to theHours & ":"
                    end if
                    if theMinutes < 10 then set theMinutes to "0" & theMinutes
                    if theSeconds < 10 then set theSeconds to "0" & theSeconds
                    set theDuration to theDuration & theMinutes & ":" & theSeconds
                    set curHours to curSeconds div 3600
                    set curSeconds to curSeconds - curHours * 3600
                    set curMinutes to curSeconds div 60
                    set curSeconds to curSeconds - curMinutes * 60
                    set curTime to ""
                    if curHours > 0 then
                        if curHours < 10 then set curHours to "0" & curHours
                        set curDuration to curHours & ":"
                    end if
                    if curMinutes < 10 then set curMinutes to "0" & curMinutes
                    if curSeconds < 10 then set curSeconds to "0" & curSeconds
                    set curTime to curTime & curMinutes & ":" & curSeconds
                    set theString to theName & ";" & curTime & ";" & theDuration
                end tell
            end if
        end tell
    end if
    textName's setStringValue_(theName)
    textTime's setStringValue_(curTime & "/" & theDuration)
end runOLEDWMESerial_
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top