diff --git a/CHANGES.md b/CHANGES.md
index 932612e5..6ea69be9 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -8,7 +8,9 @@
* Update profilehooks module 1.10.0 (0ce1e29) to 1.10.1 (fdbf19d)
* Update PySocks 1.6.8 (524ceb4) to 1.6.8 (b687a34)
* Update Requests library 2.15.1 (282b01a) to 2.19.1 (33b41c7)
+* Update scandir module 1.6 (c3592ee) to 1.9.0 (9ab3d1f)
* Add urllib3 release 1.23 (7c216f4)
+* Change if old scandir binary module is installed, fallback to slow Python module and inform user to upgrade binary
[develop changelog]
diff --git a/HACKS.txt b/HACKS.txt
index c8727b41..0dd835eb 100644
--- a/HACKS.txt
+++ b/HACKS.txt
@@ -10,6 +10,7 @@ Libs with customisations...
/lib/hachoir_parser/guess.py
/lib/hachoir_parser/misc/torrent.py
/lib/lockfile/mkdirlockfile.py
+/lib/scandir/scandir.py
/lib/tmdb_api/tmdb_api.py
/lib/tornado
/lib/tvdb_api/tvdb_api.py
diff --git a/gui/slick/interfaces/default/inc_top.tmpl b/gui/slick/interfaces/default/inc_top.tmpl
index 5928bafa..a6695957 100644
--- a/gui/slick/interfaces/default/inc_top.tmpl
+++ b/gui/slick/interfaces/default/inc_top.tmpl
@@ -265,6 +265,11 @@
$sg_str('NEWEST_VERSION_STRING')
#end if
+#if $sg_str('MODULE_UPDATE_STRING')
+
+ $sg_str('MODULE_UPDATE_STRING')
+
+#end if
##
#set $items = []
#try
diff --git a/lib/scandir/scandir.py b/lib/scandir/scandir.py
index 73d6fbf5..a01379ad 100644
--- a/lib/scandir/scandir.py
+++ b/lib/scandir/scandir.py
@@ -35,15 +35,14 @@ try:
except ImportError:
ctypes = None
-if not getattr(_scandir, 'DirEntry', None):
+
+if None is not _scandir and None is not ctypes and not getattr(_scandir, 'DirEntry', None):
import warnings
- warnings.warn("scandir compiled _scandir C module is too old"
- ", using slow generic fallback")
+ warnings.warn("scandir compiled _scandir C module is too old, using slow generic fallback")
_scandir = None
elif _scandir is None and ctypes is None:
import warnings
- warnings.warn("scandir can't find the compiled _scandir C module "
- "or ctypes, using slow generic fallback")
+ warnings.warn("scandir can't find the compiled _scandir C module or ctypes, using slow generic fallback")
__version__ = '1.9.0'
__all__ = ['scandir', 'walk']
diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py
index 8f88cb35..08622f4b 100755
--- a/sickbeard/__init__.py
+++ b/sickbeard/__init__.py
@@ -108,6 +108,7 @@ newznabProviderList = []
torrentRssProviderList = []
metadata_provider_dict = {}
+MODULE_UPDATE_STRING = None
NEWEST_VERSION_STRING = None
VERSION_NOTIFY = False
AUTO_UPDATE = False
@@ -572,7 +573,7 @@ def initialize(console_logging=True):
global __INITIALIZED__, showList, providerList, newznabProviderList, torrentRssProviderList, \
WEB_HOST, WEB_ROOT, ACTUAL_CACHE_DIR, CACHE_DIR, ZONEINFO_DIR, ADD_SHOWS_WO_DIR, CREATE_MISSING_SHOW_DIRS, \
RECENTSEARCH_STARTUP, NAMING_FORCE_FOLDERS, SOCKET_TIMEOUT, DEBUG, INDEXER_DEFAULT, CONFIG_FILE, \
- REMOVE_FILENAME_CHARS, IMPORT_DEFAULT_CHECKED_SHOWS, WANTEDLIST_CACHE
+ REMOVE_FILENAME_CHARS, IMPORT_DEFAULT_CHECKED_SHOWS, WANTEDLIST_CACHE, MODULE_UPDATE_STRING
# Schedulers
# global traktCheckerScheduler
global recentSearchScheduler, backlogSearchScheduler, showUpdateScheduler, \
@@ -1460,6 +1461,23 @@ def initialize(console_logging=True):
run_delay=datetime.timedelta(minutes=5),
threadName='PLEXWATCHEDSTATE')
+ try:
+ import _scandir
+ except ImportError:
+ _scandir = None
+
+ try:
+ import ctypes
+ except ImportError:
+ ctypes = None
+
+ if None is not _scandir and None is not ctypes and not getattr(_scandir, 'DirEntry', None):
+ MODULE_UPDATE_STRING = \
+ 'Your scandir binary module is outdated, using the slow but newer Python module.' \
+ '
Upgrade the binary at a command prompt with' \
+ ' # python -m pip install -U scandir' \
+ '
Important: You must Shutdown SickGear before upgrading'
+
__INITIALIZED__ = True
return True