001package ca.bc.webarts.tools.mythtv; 002 003import ca.bc.webarts.widgets.Util; 004 005import com.dpillay.tools.tail4j.model.TailContents; 006import com.dpillay.tools.tail4j.core.TailListener; 007 008public class TailDoerTailReseter<T> implements TailDoer<T> 009{ 010 private String version_ = "0.6"; 011 private TailListener<T> listener = null; 012 private boolean doReset_ = false; 013 private boolean immediateReset_ = false; 014 private String resetCommand = "/home/tgutwin/bin/setupHDPVRandLirc.sh"; 015 016 017 public TailDoerTailReseter() 018 { 019 super(); 020 } 021 022 023 public TailDoerTailReseter(TailListener<T> listener) 024 { 025 super(); 026 this.listener = listener; 027 } 028 029 030 public TailListener<T> getListener() { 031 return listener; 032 } 033 034 035 public void setListener(TailListener<T> listener) 036 { 037 this.listener = listener; 038 } 039 040 041 @Override 042 public void doer(TailContents<T> tailContents) 043 { 044 long resetWaitTime = 15000; 045 String currDump = (String) tailContents.getContents(); 046 //System.out.println(currDump); 047 System.out.print((doReset_?"!":".")); 048 if ( currDump.indexOf( "Tuning => Recorder Failed") >-1 049 || currDump.indexOf( "Error: Start encoding failed") >-1 050 || currDump.indexOf( "Stop(): Not running.") >-1) 051 { 052 immediateReset_ = true; 053 System.out.println("\n"+Util.createCurrentDateTimeStamp()+" Matched Recorder Error. Will reset immediately."); 054 } 055 // Check for "Error: Device error detected" 056 else if ( !doReset_ && currDump.indexOf( "Error: Device error detected") >-1 ) 057 { 058 doReset_ = true; 059 System.out.println("\n"+Util.createCurrentDateTimeStamp()+" Matched Error. Will reset when done recording"); 060 } 061 062 // then wait until current recording is done 063 // Check for "Finished Recording" 064 if (!immediateReset_ && doReset_ && currDump.indexOf( "Finished recording") >-1) 065 { 066 // wait 30 seconds then and reset 067 //call the reset 068 System.out.println("\n"+Util.createCurrentDateTimeStamp()+" Matched Done Recording. I will reset in "+(resetWaitTime/1000)+" seconds. then Ka-POW.\n"); 069 Util.sleep(resetWaitTime); 070 System.out.println("\n"+Util.createCurrentDateTimeStamp()+" *!*!*! Ka-POW.\n"); 071 Util.executeNativeApp(resetCommand, (java.util.Vector) null, false ); 072 doReset_ = false; 073 System.out.println("\n\n"+Util.createCurrentDateTimeStamp()+" Reset Complete. I Will continue watching."); 074 } 075 076 if (immediateReset_ ) 077 { 078 System.out.println("\n"+Util.createCurrentDateTimeStamp()+" ^%^%^% Ka-POW.\n"); 079 Util.executeNativeApp(resetCommand, (java.util.Vector) null, false ); 080 doReset_ = false; 081 immediateReset_ = false; 082 System.out.println("\n\n"+Util.createCurrentDateTimeStamp()+" Reset Complete. I Will continue watching."); 083 } 084 085 } 086 087 088 @Override 089 public T call() throws Exception { 090 TailContents<T> tailContents = null; 091 System.out.println("\n\nInitiating MythTVWatchdog (v"+version_+")..."); 092 while ((tailContents = this.listener.poll()) != null) 093 { 094 this.doer(tailContents); 095 } 096 return null; 097 } 098}