When synchronizing with an iPod or iPhone, iTunes offers two key options: 'x least recent unwatched' or 'x most recent unwatched'. Unfortunately for us users, recent is determined, not by sensible things such as air-date or episode number, but by the date items are added to a user's iTunes library. All works fine when items are purchased from the iTunes Music Store and downloads complete in order. Encounter a few failed downloads or add items manually however and iPod synchronization never again works as one might reasonably expect.

Since we, as users, have suffered this strange behaviour for a good number of iTunes releases, I can only assume that somewhere in Cupertino it's deemed a feature (although I have yet to work out what it achieves).

Fortunately, for OS X users, AppleScript comes to the rescue:

tell application "iTunes"

    if selection is {} then
        display dialog "Select some TV Shows…" buttons {"Cancel"} default button 1 with icon 2 giving up after 15
    end if

    set sel to selection

    repeat with i from 1 to (count sel)
        set t to item i of sel
        tell t

            set my_kind to TV show
            set filename to location
            set my_state to unplayed
            set my_played_count to played count
            set my_track to (add filename)
            tell my_track
                set video kind to TV show
                set unplayed to my_state
                set played count to my_played_count
            end tell

        end tell
    end repeat

end tell

The above script iterates over the selected items in iTunes, sequentially deleting them and then re-adding them. Assuming this list of TV Shows is in the correct order, this will ensure all 'added' times are sequential and iPod and iPhone synchronization should now proceed as expected.