From 5dd145a8e8faecd73679b68c0c6579588a4596d3 Mon Sep 17 00:00:00 2001
From: faush01 <shaun@bluebit.com.au>
Date: Fri, 20 Mar 2015 14:04:54 +1100
Subject: [PATCH] use a map for movie to make to lookup easier and faster

---
 resources/lib/LibrarySync.py | 18 +++++++-----------
 resources/lib/ReadKodiDB.py  | 32 +++++++++++++++++++-------------
 2 files changed, 26 insertions(+), 24 deletions(-)

diff --git a/resources/lib/LibrarySync.py b/resources/lib/LibrarySync.py
index 71c3d27b..970fafe6 100644
--- a/resources/lib/LibrarySync.py
+++ b/resources/lib/LibrarySync.py
@@ -159,10 +159,9 @@ class LibrarySync():
                         item['Tag'] = []
                         item['Tag'].append(view.get('title'))
                         
-                        for kodimovie in allKodiMovies:
-                            if item["Id"] in kodimovie["file"]:
-                                WriteKodiDB().updateMovieToKodiLibrary(item,kodimovie)
-                                break
+                        kodimovie = allKodiMovies.get(item["Id"], None)
+                        if(kodimovie != None):
+                            WriteKodiDB().updateMovieToKodiLibrary(item,kodimovie)
                         
                         if(self.ShouldStop()):
                             return True
@@ -541,15 +540,12 @@ class LibrarySync():
                 
                     for item in allMB3Movies:
                         
-                        if not item.get('IsFolder'):
-                            kodiItem = None
-                            for kodimovie in allKodiMovies:
-                                if item["Id"] in kodimovie["file"]:
-                                    kodiItem = kodimovie
-                                    break
+                        if not item.get('IsFolder'):                           
+                            kodiItem = allKodiMovies.get(item["Id"], None)
                             
-                            userData=API().getUserData(item)
+                            userData = API().getUserData(item)
                             timeInfo = API().getTimeInfo(item)
+                            
                             if kodiItem != None:
                                 WriteKodiDB().updateProperty(kodiItem,"playcount",int(userData.get("PlayCount")),"movie")
                                 kodiresume = int(round(kodiItem['resume'].get("position")))
diff --git a/resources/lib/ReadKodiDB.py b/resources/lib/ReadKodiDB.py
index 0f7c6677..e5b78a87 100644
--- a/resources/lib/ReadKodiDB.py
+++ b/resources/lib/ReadKodiDB.py
@@ -49,26 +49,32 @@ class ReadKodiDB():
             if(result.has_key('movies')):
                 movies = result['movies']
 
-        return movies
+        kodiMovieMap = None
+        if(movies != None and len(movies) > 0):
+            kodiMovieMap = {}
+            for kodimovie in movies:
+                key = kodimovie["file"][-37:-5] #extract the id from the file name
+                kodiMovieMap[key] = kodimovie
+                
+        return kodiMovieMap
     
     def getKodiMoviesIds(self,returnMB3Ids = False):
         # returns a list of movieIds or MB3 Id's from all movies currently in the Kodi library
         allKodiMovies = self.getKodiMovies(False)
-        allKodiMovieIds = list()
         
-        if allKodiMovies != None:
-            for kodimovie in allKodiMovies:
-                if returnMB3Ids:
-                    filepath = kodimovie["file"]
-                    filepath = filepath.replace(movieLibrary + os.sep, "")
-                    filepath = filepath.replace(".strm", "")
-                    filepath = filepath.split(os.sep)[0]
-                    id = filepath
-                else:
-                    id = str(kodimovie["movieid"])
+        if(allKodiMovies == None):
+            return list()
+        
+        if(returnMB3Ids):
+            allKodiMovieIds = list(allKodiMovies.keys())
+            return allKodiMovieIds
+        else:
+            allKodiMovieIds = list()
+            for kodimovie in allKodiMovies.values():
+                id = str(kodimovie["movieid"])
                 allKodiMovieIds.append(id)
         
-        return allKodiMovieIds
+            return allKodiMovieIds
     
     def getKodiTvShowsIds(self,returnMB3Ids = False):
         # returns a list of tvshowIds or MB3 Id's from all tvshows currently in the Kodi library