def _get_media_log(self, media_id): model = [] try: db_cmd = SQLite.SQLiteCommand(self.db) db_cmd.CommandText = '''select distinct * from media_log where media_id = {}'''.format(media_id) sr = db_cmd.ExecuteReader() while(sr.Read()): try: if canceller.IsCancellationRequested: break add_date = self.transtime(sr, 2) adj_date = self.transtime(sr, 3) cloudshare_date = self.transtime(sr, 4) create_date = self.transtime(sr, 5) faceadj_date = self.transtime(sr, 6) lastshare_date = self.transtime(sr, 7) modify_date = self.transtime(sr, 8) taken_date = self.transtime(sr, 9) trash_date = self.transtime(sr, 10) dates = {add_date:"添加", adj_date:"调整", cloudshare_date:"icloud分享", create_date:"创建", faceadj_date:"面部调整", lastshare_date:"分享", modify_date:"修改", taken_date:"拍摄", trash_date:"删除"} for date in sorted(dates.items(), key = lambda x:x[0], reverse=True): if date[0] is None: continue log = MediaFile.MediaLog() #log.FilePath = self._db_reader_get_string_value(sr, 14) log.Operating = date[1] log.OperatingTime = str(date[0]) model.append(log) except: pass except: return [] return model
def _get_media_thumbnail(self, media_id): try: db_cmd = SQLite.SQLiteCommand(self.db) db_cmd.CommandText = '''select distinct * from thumbnails where media_id = {}'''.format(media_id) sr = db_cmd.ExecuteReader() while(sr.Read()): try: if canceller.IsCancellationRequested: break thumbnail = MediaFile.ThumbnailFile() filePath = self._db_reader_get_string_value(sr, 1) thumbnail.FileName = os.path.basename(filePath) thumbnail.Path = filePath thumbnail.Height = self._db_reader_get_int_value(sr, 4) thumbnail.Width = self._db_reader_get_int_value(sr, 3) addTime = self._db_reader_get_int_value(sr, 5) thumbnail.AddTime = self._get_timestamp(addTime) thumbnail.FileSuffix = self._db_reader_get_string_value(sr, 6) thumbnail.MimeType = self._db_reader_get_string_value(sr, 6) thumbnail.SourceFile = self._get_source_file(str(sr[7])) thumbnail.Deleted = self._convert_deleted_status(sr[8]) return thumbnail except: traceback.print_exc() except: pass
def get_video_info(self, node): '''获取视频文件信息''' try: video = MediaFile.VideoFile() path = node.PathWithMountPoint video.FileName = os.path.basename(path) video.Path = node.AbsolutePath video.Size = os.path.getsize(path) addTime = os.path.getctime(path) video.FileSuffix = re.sub('.*\.', '', node.AbsolutePath) video.MimeType = 'video' video.AddTime = self._get_timestamp(addTime) return video except: pass
def get_normal_image_info(self, node): '''获取非jpg图片文件信息''' try: image = MediaFile.ImageFile() path = node.PathWithMountPoint image.FileName = os.path.basename(path) image.Path = node.AbsolutePath image.Size = os.path.getsize(path) addTime = os.path.getctime(path) image.FileSuffix = re.sub('.*\.', '', node.AbsolutePath) image.MimeType = 'image' image.AddTime = self._get_timestamp(addTime) image.SourceFile = node.AbsolutePath return image except: return
def _get_model_thumbnail(self): model = [] try: self.db_cmd.CommandText = '''select distinct * from thumbnails order by deleted ASC''' sr = self.db_cmd.ExecuteReader() pk = [] while(sr.Read()): try: if canceller.IsCancellationRequested: break if sr[0] is None or sr[0] == 0: continue id = sr[0] if id in pk: continue else: pk.append(id) thumbnail = MediaFile.ThumbnailFile() filePath = self._db_reader_get_string_value(sr, 1) thumbnail.FileName = os.path.basename(filePath) thumbnail.Path = filePath thumbnail.Height = self._db_reader_get_int_value(sr, 4) thumbnail.Width = self._db_reader_get_int_value(sr, 3) addTime = self._db_reader_get_int_value(sr, 5) thumbnail.AddTime = self._get_timestamp(addTime) thumbnail.FileSuffix = self._db_reader_get_string_value(sr, 6) thumbnail.MimeType = self._db_reader_get_string_value(sr, 6) thumbnail.SourceFile = self._get_source_file(str(sr[7])) thumbnail.Deleted = self._convert_deleted_status(sr[8]) model.append(thumbnail) except: traceback.print_exc() sr.Close() except: traceback.print_exc() return model
def _get_model_media(self): model = [] try: self.db_cmd.CommandText = '''select distinct * from media order by deleted ASC''' sr = self.db_cmd.ExecuteReader() pk = [] while(sr.Read()): try: if canceller.IsCancellationRequested: break if sr[1] is None or sr[6] is None: continue if sr[0] is None or sr[0] == 0: continue media_type = sr[6] media_id = sr[0] deleted = sr[19] #remove duplication if media_id in pk: continue else: pk.append(media_id) #audio convert if media_type == "audio": audio = MediaFile.AudioFile() audio.FileName = self._db_reader_get_string_value(sr, 7) audio.Path = self._db_reader_get_string_value(sr, 1) #audio.NodeOrUrl.Init(path) audio.Size = self._db_reader_get_int_value(sr, 2) addTime = self._db_reader_get_int_value(sr, 3) audio.AddTime = self._get_timestamp(addTime) audio.Description = self._db_reader_get_string_value(sr, 17) media_log = self._get_media_log(sr[0]) for log in media_log: video.Logs.Add(log) modifyTime = self._db_reader_get_int_value(sr, 4) audio.FileSuffix = self._db_reader_get_string_value(sr, 5) audio.MimeType = self._db_reader_get_string_value(sr, 5) audio.ModifyTime = self._get_timestamp(modifyTime) audio.Album = self._db_reader_get_string_value(sr, 14) audio.Artist = self._db_reader_get_string_value(sr, 13) if not IsDBNull(sr[12]): hours = int(sr[12])/3600 minutes = (int(sr[12])-hours*3600)/60 seconds = int(sr[12])-hours*3600-minutes*60 audio.Duration = System.TimeSpan(hours, minutes, seconds) #image convert elif media_type == "image": image = MediaFile.ImageFile() image.FileName = self._db_reader_get_string_value(sr, 7) image.Path = self._db_reader_get_string_value(sr, 1) #image.NodeOrUrl.Init(path) image.Size = self._db_reader_get_int_value(sr, 2) addTime = self._db_reader_get_int_value(sr, 3) image.FileSuffix = self._db_reader_get_string_value(sr, 5) image.MimeType = self._db_reader_get_string_value(sr, 5) image.AddTime = self._get_timestamp(addTime) image.Description = self._db_reader_get_string_value(sr, 17) location = Base.Location(image) coordinate = Base.Coordinate() if not IsDBNull(sr[8]): coordinate.Latitude = float(sr[8]) if not IsDBNull(sr[9]): coordinate.Longitude = float(sr[9]) coordinate.Type = CoordinateType.Google if self.coordinate_type == COORDINATE_TYPE_GOOGLE else CoordinateType.GPS location.Coordinate = coordinate location.Time = image.AddTime location.AddressName = self._db_reader_get_string_value(sr, 10) location.SourceType = LocationSourceType.Media image.Location = location media_log = self._get_media_log(sr[0]) for log in media_log: image.Logs.Add(log) modifyTime = self._db_reader_get_int_value(sr, 4) image.ModifyTime = self._get_timestamp(modifyTime) image.Height = self._db_reader_get_int_value(sr, 16) image.Width = self._db_reader_get_int_value(sr, 15) takenDate = self._db_reader_get_int_value(sr, 11) image.TakenDate = self._get_timestamp(takenDate) image.Thumbnail = self._get_media_thumbnail(media_id) image.Aperture = self._db_reader_get_string_value(sr,18) image.Artist = self._db_reader_get_string_value(sr,13) image.ColorSpace = self._db_reader_get_string_value(sr,19) image.ExifVersion = self._db_reader_get_string_value(sr,20) image.ExposureProgram = self._db_reader_get_string_value(sr,21) image.ExposureTime = self._db_reader_get_string_value(sr,22) image.FocalLength = self._db_reader_get_string_value(sr,23) image.ISO = self._db_reader_get_string_value(sr,24) image.Make = self._db_reader_get_string_value(sr,25) image.Model = self._db_reader_get_string_value(sr,26) image.Resolution = self._db_reader_get_string_value(sr,27) image.Software = self._db_reader_get_string_value(sr,28) image.XResolution = self._db_reader_get_string_value(sr,29) if image.XResolution is not '': image.XResolution = image.XResolution + ' dpi' image.YResolution = self._db_reader_get_string_value(sr,30) if image.YResolution is not '': image.YResolution = image.YResolution + ' dpi' image.SourceFile = self._get_source_file(str(sr[31])) image.Deleted = self._convert_deleted_status(sr[32]) #location = Base.Location(image) #coordinate = Base.Coordinate() #if not IsDBNull(sr[8]): # coordinate.Latitude = float(sr[8]) #if not IsDBNull(sr[9]): # coordinate.Longitude = float(sr[9]) # coordinate.Type = CoordinateType.Google if self.coordinate_type == COORDINATE_TYPE_GOOGLE else CoordinateType.GPS #location.Coordinate = coordinate #location.Time = image.AddTime #location.AddressName = self._db_reader_get_string_value(sr, 10) if not IsDBNull(sr[9]): model.append(location) model.append(image) #video convert elif media_type == "video": video = MediaFile.VideoFile() video.FileName = self._db_reader_get_string_value(sr, 7) video.Path = self._db_reader_get_string_value(sr, 1) #video.NodeOrUrl.Init(path) video.Size = self._db_reader_get_int_value(sr, 2) addTime = self._db_reader_get_int_value(sr, 3) video.FileSuffix = self._db_reader_get_string_value(sr, 5) video.MimeType = self._db_reader_get_string_value(sr, 5) video.AddTime = self._get_timestamp(addTime) video.Description = self._db_reader_get_string_value(sr, 17) location = Base.Location(video) coordinate = Base.Coordinate() if not IsDBNull(sr[8]): coordinate.Latitude = float(sr[8]) if not IsDBNull(sr[9]): coordinate.Longitude = float(sr[9]) coordinate.Type = CoordinateType.Google if self.coordinate_type == COORDINATE_TYPE_GOOGLE else CoordinateType.GPS location.Coordinate = coordinate location.Time = video.AddTime location.AddressName = self._db_reader_get_string_value(sr, 10) location.SourceType = LocationSourceType.Media video.Location = location media_log = self._get_media_log(sr[0]) for log in media_log: video.Logs.Add(log) modifyTime = self._db_reader_get_int_value(sr, 4) takenDate = self._db_reader_get_int_value(sr, 11) video.TakenDate = self._get_timestamp(takenDate) video.ModifyTime = self._get_timestamp(modifyTime) if not IsDBNull(sr[12]): hours = int(sr[12])/3600 minutes = (int(sr[12])-hours*3600)/60 seconds = int(sr[12])-hours*3600-minutes*60 video.Duration = System.TimeSpan(hours, minutes, seconds) video.SourceFile = self._get_source_file(str(sr[31])) video.Deleted = self._convert_deleted_status(sr[32]) #location = Base.Location(video) #coordinate = Base.Coordinate() #if not IsDBNull(sr[8]): # coordinate.Latitude = float(sr[8]) #if not IsDBNull(sr[9]): # coordinate.Longitude = float(sr[9]) # coordinate.Type = CoordinateType.Google if self.coordinate_type == COORDINATE_TYPE_GOOGLE else CoordinateType.GPS #location.Coordinate = coordinate #location.Time = video.AddTime #location.AddressName = self._db_reader_get_string_value(sr, 10) if not IsDBNull(sr[9]): model.append(location) model.append(video) except: traceback.print_exc() sr.Close() except: pass return model
def get_exif_info(self, ret, node): '''获取媒体文件的exif信息''' try: if not ret: return model = [] image = MediaFile.ImageFile() path = node.PathWithMountPoint image.FileName = os.path.basename(path) image.Path = node.AbsolutePath image.Size = os.path.getsize(path) addTime = os.path.getctime(path) image.FileSuffix = re.sub('.*\.', '', node.AbsolutePath) image.MimeType = 'image' image.AddTime = self._get_timestamp(addTime) location = None if 'GPSInfo' in ret.keys(): try: location = Base.Location(image) coordinate = Base.Coordinate() GPSInfo = ret['GPSInfo'] latitudeFlag = GPSInfo[1] latitude = float(GPSInfo[2][0][0])/float(GPSInfo[2][0][1]) + float(GPSInfo[2][1][0])/float(GPSInfo[2][1][1])/float(60) + float(GPSInfo[2][2][0])/float(GPSInfo[2][2][1])/float(3600) longitudeFlag = GPSInfo[3] longitude = float(GPSInfo[4][0][0])/float(GPSInfo[4][0][1]) + float(GPSInfo[4][1][0])/float(GPSInfo[4][1][1])/float(60) + float(GPSInfo[4][2][0])/float(GPSInfo[4][2][1])/float(3600) coordinate.Longitude = longitude coordinate.Latitude = latitude coordinate.Type = CoordinateType.Google if self.coordinate_type == COORDINATE_TYPE_GOOGLE else CoordinateType.GPS location.Coordinate = coordinate location.Time = image.AddTime location.SourceType = LocationSourceType.Media image.Location = location except: pass modifyTime = os.path.getmtime(path) image.ModifyTime = self._get_timestamp(modifyTime) if 'ExifImageWidth' in ret.keys() and 'ImageLength' in ret.keys(): width = ret['ExifImageWidth'] height = ret['ImageLength'] image.Height = height image.Width = width takenDate = os.path.getctime(path) image.TakenDate = self._get_timestamp(takenDate) if '42036' in ret: image.Aperture = str(ret['42036']) if 'Artist' in ret: image.Artist = ret['Artist'] if 'ColorSpace' in ret: ss = 'sRGB' if ret['ColorSpace'] == 1 else ret['ColorSpace'] image.ColorSpace = str(ss) if 'ExifVersion' in ret: image.ExifVersion = str(ret['ExifVersion']) if 'ExposureProgram' in ret: image.ExposureProgram = str(ret['ExposureProgram']) if 'ExposureTime' in ret: if len(ret['ExposureTime']) == 2: et = ret['ExposureTime'] image.ExposureTime = str(int(et[0]/et[1])) if 'FocalLength' in ret: if len(ret['FocalLength']) == 2: fl = ret['FocalLength'] image.FocalLength = str(int(fl[0]/fl[1])) if 'ISOSpeedRatings' in ret: image.ISO = str(ret['ISOSpeedRatings']) if 'Make' in ret: image.Make = ret['Make'] if 'Model' in ret: image.Model = ret['Model'] if 'ExifImageWidth' in ret: image.Resolution = str(ret['ExifImageWidth']) + '*' + str(ret['ExifImageHeight']) if 'Software' in ret: image.Software = ret['Software'] if 'XResolution' in ret: if len(ret['XResolution']) == 2: xr = ret['XResolution'] image.XResolution = str(int(xr[0]/xr[1])) if image.XResolution is not '' and image.XResolution is not None: image.XResolution = image.XResolution + ' dpi' if 'YResolution' in ret: if len(ret['YResolution']) == 2: yr = ret['YResolution'] image.XResolution = str(int(yr[0]/yr[1])) if image.YResolution is not '' and image.YResolution is not None: image.YResolution = image.YResolution + ' dpi' image.SourceFile = node.AbsolutePath if location is not None: model.append(location) model.append(image) return model except: return []