コード例 #1
0
 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
コード例 #2
0
 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
コード例 #3
0
 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
コード例 #4
0
 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
コード例 #5
0
 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
コード例 #6
0
 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
コード例 #7
0
 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 []