mirror of
https://github.com/spl0k/supysonic.git
synced 2024-11-13 21:52:18 +00:00
Fixed scanner for DB schemas with NOT NULL constraints
This commit is contained in:
parent
ed9399da79
commit
5645ca6bbd
21
scanner.py
21
scanner.py
@ -88,6 +88,7 @@ class Scanner:
|
|||||||
|
|
||||||
def __scan_file(self, path, folder):
|
def __scan_file(self, path, folder):
|
||||||
tr = self.__store.find(Track, Track.path == path).one()
|
tr = self.__store.find(Track, Track.path == path).one()
|
||||||
|
add = False
|
||||||
if tr:
|
if tr:
|
||||||
if not os.path.getmtime(path) > tr.last_modification:
|
if not os.path.getmtime(path) > tr.last_modification:
|
||||||
return
|
return
|
||||||
@ -104,11 +105,7 @@ class Scanner:
|
|||||||
|
|
||||||
tr = Track()
|
tr = Track()
|
||||||
tr.path = path
|
tr.path = path
|
||||||
tr.root_folder = folder
|
add = True
|
||||||
tr.folder = self.__find_folder(path, folder)
|
|
||||||
|
|
||||||
self.__store.add(tr)
|
|
||||||
self.__added_tracks += 1
|
|
||||||
|
|
||||||
tr.disc = self.__try_read_tag(tag, 'discnumber', 1, lambda x: int(x[0].split('/')[0]))
|
tr.disc = self.__try_read_tag(tag, 'discnumber', 1, lambda x: int(x[0].split('/')[0]))
|
||||||
tr.number = self.__try_read_tag(tag, 'tracknumber', 1, lambda x: int(x[0].split('/')[0]))
|
tr.number = self.__try_read_tag(tag, 'tracknumber', 1, lambda x: int(x[0].split('/')[0]))
|
||||||
@ -116,11 +113,25 @@ class Scanner:
|
|||||||
tr.year = self.__try_read_tag(tag, 'date', None, lambda x: int(x[0].split('-')[0]))
|
tr.year = self.__try_read_tag(tag, 'date', None, lambda x: int(x[0].split('-')[0]))
|
||||||
tr.genre = self.__try_read_tag(tag, 'genre')
|
tr.genre = self.__try_read_tag(tag, 'genre')
|
||||||
tr.duration = int(tag.info.length)
|
tr.duration = int(tag.info.length)
|
||||||
|
if not add:
|
||||||
tr.album = self.__find_album(self.__try_read_tag(tag, 'artist', ''), self.__try_read_tag(tag, 'album', ''))
|
tr.album = self.__find_album(self.__try_read_tag(tag, 'artist', ''), self.__try_read_tag(tag, 'album', ''))
|
||||||
tr.bitrate = (tag.info.bitrate if hasattr(tag.info, 'bitrate') else int(os.path.getsize(path) * 8 / tag.info.length)) / 1000
|
tr.bitrate = (tag.info.bitrate if hasattr(tag.info, 'bitrate') else int(os.path.getsize(path) * 8 / tag.info.length)) / 1000
|
||||||
tr.content_type = get_mime(os.path.splitext(path)[1][1:])
|
tr.content_type = get_mime(os.path.splitext(path)[1][1:])
|
||||||
tr.last_modification = os.path.getmtime(path)
|
tr.last_modification = os.path.getmtime(path)
|
||||||
|
|
||||||
|
if add:
|
||||||
|
tralbum = self.__find_album(self.__try_read_tag(tag, 'artist', ''), self.__try_read_tag(tag, 'album', ''))
|
||||||
|
trfolder = self.__find_folder(path, folder)
|
||||||
|
|
||||||
|
# Set the references at the very last as searching for them will cause the added track to be flushed, even if
|
||||||
|
# it is incomplete, causing not null constraints errors.
|
||||||
|
tr.album = tralbum
|
||||||
|
tr.folder = trfolder
|
||||||
|
tr.root_folder = folder
|
||||||
|
|
||||||
|
self.__store.add(tr)
|
||||||
|
self.__added_tracks += 1
|
||||||
|
|
||||||
def __find_album(self, artist, album):
|
def __find_album(self, artist, album):
|
||||||
ar = self.__find_artist(artist)
|
ar = self.__find_artist(artist)
|
||||||
al = ar.albums.find(name = album).one()
|
al = ar.albums.find(name = album).one()
|
||||||
|
Loading…
Reference in New Issue
Block a user