| 2196 | |
| 2197 | |
| 2198 | class FileSwitchManager(object): |
| 2199 | def __init__(self, client): |
| 2200 | self._client = client |
| 2201 | self.mediaFilesCache = {} |
| 2202 | self.filenameWatchlist = [] |
| 2203 | self.currentDirectory = None |
| 2204 | self.mediaDirectories = client.getConfig().get('mediaSearchDirectories') |
| 2205 | self.lock = threading.Lock() |
| 2206 | self.folderSearchEnabled = True |
| 2207 | self.directorySearchError = None |
| 2208 | self.newInfo = False |
| 2209 | self.currentlyUpdating = False |
| 2210 | self.newWatchlist = [] |
| 2211 | self.fileSwitchTimer = task.LoopingCall(self.updateInfo) |
| 2212 | self.fileSwitchTimer.start(constants.FOLDER_SEARCH_DOUBLE_CHECK_INTERVAL, True) |
| 2213 | self.mediaDirectoriesNotFound = [] |
| 2214 | |
| 2215 | def setClient(self, newClient): |
| 2216 | self._client = newClient |
| 2217 | |
| 2218 | def setCurrentDirectory(self, curDir): |
| 2219 | self.currentDirectory = curDir |
| 2220 | |
| 2221 | def changeMediaDirectories(self, mediaDirs): |
| 2222 | from syncplay.ui.ConfigurationGetter import ConfigurationGetter |
| 2223 | ConfigurationGetter().setConfigOption("mediaSearchDirectories", mediaDirs) |
| 2224 | self._client._config["mediaSearchDirectories"] = mediaDirs |
| 2225 | self._client.ui.showMessage(getMessage("media-directory-list-updated-notification")) |
| 2226 | self.mediaDirectoriesNotFound = [] |
| 2227 | self.folderSearchEnabled = True |
| 2228 | self.setMediaDirectories(mediaDirs) |
| 2229 | if mediaDirs == "": |
| 2230 | self._client.ui.showErrorMessage(getMessage("no-media-directories-error")) |
| 2231 | self.mediaFilesCache = {} |
| 2232 | self.newInfo = True |
| 2233 | self.checkForFileSwitchUpdate() |
| 2234 | |
| 2235 | def setMediaDirectories(self, mediaDirs): |
| 2236 | self.mediaDirectories = mediaDirs |
| 2237 | self.updateInfo() |
| 2238 | |
| 2239 | def checkForFileSwitchUpdate(self): |
| 2240 | if self.newInfo: |
| 2241 | self.newInfo = False |
| 2242 | self.infoUpdated() |
| 2243 | if self.directorySearchError: |
| 2244 | self._client.ui.showErrorMessage(self.directorySearchError) |
| 2245 | self.directorySearchError = None |
| 2246 | |
| 2247 | def updateInfo(self): |
| 2248 | if not self.currentlyUpdating and self.mediaDirectories: |
| 2249 | threads.deferToThread(self._updateInfoThread).addCallback(lambda x: self.checkForFileSwitchUpdate()) |
| 2250 | |
| 2251 | def setFilenameWatchlist(self, unfoundFilenames): |
| 2252 | self.filenameWatchlist = unfoundFilenames |
| 2253 | |
| 2254 | def _updateInfoThread(self): |
| 2255 | with self.lock: |