add a filewatcher to automatically reindex if new file is added
This commit is contained in:
		
							
								
								
									
										58
									
								
								apiGo/videoparser/FileWatcher.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								apiGo/videoparser/FileWatcher.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
package videoparser
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/fsnotify/fsnotify"
 | 
			
		||||
	"log"
 | 
			
		||||
	"openmediacenter/apiGo/config"
 | 
			
		||||
	"openmediacenter/apiGo/database"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func InitFileWatcher() {
 | 
			
		||||
	watcher, err := fsnotify.NewWatcher()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal("NewWatcher failed: ", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mSettings, _, _ := database.GetSettings()
 | 
			
		||||
	vidFolder := config.GetConfig().General.ReindexPrefix + mSettings.VideoPath
 | 
			
		||||
	epsfolder := config.GetConfig().General.ReindexPrefix + mSettings.EpisodePath
 | 
			
		||||
 | 
			
		||||
	defer watcher.Close()
 | 
			
		||||
	go func() {
 | 
			
		||||
		for {
 | 
			
		||||
			select {
 | 
			
		||||
			case event, ok := <-watcher.Events:
 | 
			
		||||
				if !ok {
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
				// start new reindex
 | 
			
		||||
				// (may be optimized by checking here if added file is video
 | 
			
		||||
				// and start reindex just for one file)
 | 
			
		||||
				if strings.Contains(event.Name, vidFolder) {
 | 
			
		||||
					StartReindex()
 | 
			
		||||
				} else if strings.Contains(event.Name, epsfolder) {
 | 
			
		||||
					StartTVShowReindex()
 | 
			
		||||
				} else {
 | 
			
		||||
					log.Printf("Event in wrong folder: %s %s\n", event.Name, event.Op)
 | 
			
		||||
				}
 | 
			
		||||
			case err, ok := <-watcher.Errors:
 | 
			
		||||
				if !ok {
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
				log.Println("error:", err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	err = watcher.Add(vidFolder)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Println("Adding of file watcher failed: ", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = watcher.Add(epsfolder)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Println("Adding of file watcher failed: ", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user