Skip to main content
2 of 6
deleted 2 characters in body
tintwotin
  • 2.5k
  • 10
  • 24

Detect updates in Sequencer only via global variable?

This may be a two-fold question, but I think I got an answer on the first part, which then leads to the second part:

In order to keep the strain of running an "detect updates" function, as low as possible, I would like to make it as streamlined as possible. But there doesn't seem to be an equivalent to ex. "bpy.data.movieclips.is_updated" (for the motion tracker clip) for the sequencer?

So I guess the only way is to compare the currently active strip's data with the data of a previous active strip, but how do I do that?

import bpy 
from bpy.app.handlers import persistent

global oldStrip
oldStrip = bpy.context.scene.sequence_editor.active_strip
 
@persistent
def sequencer_update(context):
    #if bpy.data.movieclips.is_updated: # Updates on tracker file updates. No sequencer .is_updated function? 
    activeStrip = bpy.context.scene.sequence_editor.active_strip
    print("Active strip: "+str(activeStrip.name))
    """ # if oldStrip != activeStrip: # 
    if oldStrip.name = activeStrip.name:
        if oldStrip.frame_final_start == activeStrip.frame_final_start and oldStrip.frame_final_end == activeStrip.frame_final_end: print("Strip not moved, maybe a rename or other property changes?")
        if oldStrip.frame_final_start != activeStrip.frame_final_start and oldStrip.frame_final_end != activeStrip.frame_final_end: print("Entire strip moved")
        if oldStrip.frame_final_start != activeStrip.frame_final_start and oldStrip.frame_final_end == activeStrip.frame_final_end: print("Start handle moved")
        if oldStrip.frame_final_start == activeStrip.frame_final_start and oldStrip.frame_final_end != activeStrip.frame_final_end: print("End handle moved")    
        oldStrip=activeStrip                  
    else:
        print("New strip selected") """    
        oldStrip=activeStrip
    
#Register 
def register():
    
    handlers = bpy.app.handlers.scene_update_pre
    for handler in handlers:
        if ("sequencer_update" in str(handler)):
            handlers.remove(handler)
    handlers.append(sequencer_update)

def unregister():
    handlers = bpy.app.handlers.scene_update_pre
    for handler in handlers:
        if ("sequencer_update" in str(handler)):
            handlers.remove(handler)

    #Unregister operators
    bpy.utils.unregister_module(__name__)

if __name__ == "__main__":
    register()

#unregister()
tintwotin
  • 2.5k
  • 10
  • 24