Пример #1
0
 def parse_chatroom(self, dbPath, deleteFlag):
     '''解析群组数据'''
     db = SQLite.SQLiteConnection('Data Source = {}; ReadOnly = True'.format(dbPath))
     db.Open()
     db_cmd = SQLite.SQLiteCommand(db)
     if deleteFlag is 1:
         self.db = SQLite.SQLiteConnection('Data Source = {}'.format(self.cachedb))
         self.db.Open()
         self.db_cmd = SQLite.SQLiteCommand(self.db)
     try:
         if db is None:
             return
         db_cmd.CommandText = '''select distinct _id, date, participant_id_1, participant_id_2, participant_id_3, participant_id_4, name from conversations where conversation_type = 1'''
         sr = db_cmd.ExecuteReader()
         dic = {}
         while (sr.Read()):
             try:
                 id = self._db_reader_get_int_value(sr, 0)
                 if id != 0:
                     if id not in dic.keys():
                         dic[id] = []
                         dic[id].append(deleteFlag)
                     elif deleteFlag in dic[id]:
                         continue
                 chatroom = model_im.Chatroom()
                 if canceller.IsCancellationRequested:
                     break
                 chatroom.account_id = self.account_id
                 chatroom.chatroom_id = self._db_reader_get_int_value(sr, 0)
                 chatroom.create_time = self._get_timestamp(sr[1]) if not IsDBNull(sr[1]) else 0
                 chatroom.deleted = deleteFlag
                 if sr[5] != 0:
                     count = 4
                 elif sr[4] != 0:
                     count = 3
                 elif sr[3] != 0:
                     count = 2
                 else:
                     count = 0
                 chatroom.member_count = count
                 chatroom.name = self._db_reader_get_string_value(sr, 6)
                 chatroom.source = self.node.AbsolutePath
                 self.db_insert_table_chatroom(chatroom)
             except:
                 traceback.print_exc()
         sr.Close()
         if deleteFlag is 0: 
             self.db_commit()
         db_cmd.Dispose()
         db.Close()
     except Exception as e:
         print(e)
Пример #2
0
 def analyze_account(self, mailPath, deleteFlag):
     '''保存账户数据到中间数据库'''
     self.db = SQLite.SQLiteConnection(
         'Data Source = {}; ReadOnly = True'.format(mailPath))
     self.db.Open()
     self.db_cmd = SQLite.SQLiteCommand(self.db)
     try:
         if self.db is None:
             return
         self.db_cmd.CommandText = SQL_ASSOCIATE_TABLE_ACCOUNT
         sr = self.db_cmd.ExecuteReader()
         while (sr.Read()):
             account = Account()
             if canceller.IsCancellationRequested:
                 break
             account.account_id = sr[0]
             account.account_user = sr[1]
             account.account_alias = sr[2]
             account.account_email = sr[1]
             account.source = self.node.AbsolutePath
             account.deleted = deleteFlag
             self.mm.db_insert_table_account(account)
         self.mm.db_commit()
         self.db_cmd.Dispose()
         self.db.Close()
     except Exception as e:
         print(e)
Пример #3
0
 def analyze_account(self):
     '''保存账户数据到中间数据库'''
     self.db = SQLite.SQLiteConnection('Data Source = {}'.format(
         self.recoverDB))
     self.db.Open()
     self.db_cmd = SQLite.SQLiteCommand(self.db)
     try:
         if self.db is None:
             return
         self.db_cmd.CommandText = SQL_ASSOCIATE_TABLE_ACCOUNT
         sr = self.db_cmd.ExecuteReader()
         while (sr.Read()):
             try:
                 account = Account()
                 if canceller.IsCancellationRequested:
                     break
                 account.account_id = self._db_reader_get_int_value(sr, 0)
                 account.account_user = self._db_reader_get_string_value(
                     sr, 1)
                 account.account_alias = self._db_reader_get_string_value(
                     sr, 2)
                 account.account_email = self._db_reader_get_string_value(
                     sr, 1)
                 account.account_passwd = self._db_reader_get_string_value(
                     sr, 3)
                 account.source = self.node.AbsolutePath
                 account.deleted = self._db_reader_get_int_value(sr, 4)
                 self.mm.db_insert_table_account(account)
             except:
                 traceback.print_exc()
         self.mm.db_commit()
         self.db_cmd.Dispose()
         self.db.Close()
     except Exception as e:
         print(e)
Пример #4
0
    def read_deleted_records(self):
        '''获取删除数据保存至删除数据库'''
        self.create_deleted_db()

        self.rdb = SQLite.SQLiteConnection('Data Source = {}'.format(
            self.recoverDB))
        self.rdb.Open()
        self.rdb_cmd = SQLite.SQLiteCommand(self.rdb)

        dbid = re.findall('\d+', os.path.basename(self.node.AbsolutePath))[0]
        fs = self.node.FileSystem
        nodes = fs.Search('buzz_' + dbid + '.db$')
        for node in nodes:
            self.fnode = node
            break

        self.rdb_trans = self.rdb.BeginTransaction()
        self.read_deleted_table_account()
        self.read_deleted_table_contact()
        self.read_deleted_table_group_user_id()
        self.read_deleted_table_group()
        self.read_deleted_table_group_user()
        self.read_deleted_table_message()
        self.read_deleted_table_group_chat()
        self.read_deleted_table_feed()
        self.read_deleted_table_feed_comments()
        self.rdb_trans.Commit()

        self.rdb_cmd.Dispose()
        self.rdb.Close()
Пример #5
0
 def create_deleted_db(self):
     '''创建恢复数据库'''
     if os.path.exists(self.recoverDB):
         os.remove(self.recoverDB)
     self.db = SQLite.SQLiteConnection('Data Source = {}'.format(
         self.recoverDB))
     self.db.Open()
     self.db_cmd = SQLite.SQLiteCommand(self.db)
     if self.db_cmd is not None:
         self.db_cmd.CommandText = SQL_CREATE_TABLE_RECOVER_MAILACCOUNT
         self.db_cmd.ExecuteNonQuery()
         self.db_cmd.CommandText = SQL_CREATE_TABLE_RECOVER_MAILATTACH
         self.db_cmd.ExecuteNonQuery()
         self.db_cmd.CommandText = SQL_CREATE_TABLE_RECOVER_MAILCONTACT
         self.db_cmd.ExecuteNonQuery()
         self.db_cmd.CommandText = SQL_CREATE_TABLE_RECOVER_MAILCONTACTGROUP
         self.db_cmd.ExecuteNonQuery()
         self.db_cmd.CommandText = SQL_CREATE_TABLE_RECOVER_MAILCONTACTITEM
         self.db_cmd.ExecuteNonQuery()
         self.db_cmd.CommandText = SQL_CREATE_TABLE_RECOVER_MAILCONTENT
         self.db_cmd.ExecuteNonQuery()
         self.db_cmd.CommandText = SQL_CREATE_TABLE_RECOVER_MAILFOLDER
         self.db_cmd.ExecuteNonQuery()
         self.db_cmd.CommandText = SQL_CREATE_TABLE_RECOVER_MAILINFO
         self.db_cmd.ExecuteNonQuery()
     self.db_cmd.Dispose()
     self.db.Close()
Пример #6
0
 def parse_chatroom(self, dbPath):
     '''解析群组数据'''
     db = SQLite.SQLiteConnection(
         'Data Source = {}; ReadOnly = True'.format(dbPath))
     db.Open()
     db_cmd = SQLite.SQLiteCommand(db)
     try:
         if db is None:
             return
         db_cmd.CommandText = '''select a.discussionid, a.title, a.memberver, count(b.memberid) as member_count, a.deleted from bb_discussion_info as a 
             left join bb_discussion_member_info as b on a.discussionid = b.discussionid group by a.discussionid'''
         sr = db_cmd.ExecuteReader()
         while (sr.Read()):
             try:
                 chatroom = model_im.Chatroom()
                 if canceller.IsCancellationRequested:
                     break
                 chatroom.account_id = self.account_id
                 chatroom.chatroom_id = self._db_reader_get_int_value(sr, 0)
                 chatroom.create_time = self._db_reader_get_int_value(sr, 2)
                 chatroom.deleted = self._db_reader_get_int_value(sr, 4)
                 chatroom.member_count = self._db_reader_get_int_value(
                     sr, 3)
                 chatroom.name = self._db_reader_get_string_value(sr, 1)
                 chatroom.source = self.node.AbsolutePath
                 self.db_insert_table_chatroom(chatroom)
             except:
                 traceback.print_exc()
         sr.Close()
         self.db_commit()
         db_cmd.Dispose()
         db.Close()
     except Exception as e:
         print(e)
Пример #7
0
 def analyze_logic_calendar(self):
     try:
         db_source = self.node.PathWithMountPoint
         self.db = SQLite.SQLiteConnection(
             'Data Source = {}'.format(db_source))
         self.db.Open()
         self.db_cmd = SQLite.SQLiteCommand(self.db)
         if self.db is None:
             return
         self.db_cmd.CommandText = '''select distinct * from Calendar'''
         sr = self.db_cmd.ExecuteReader()
         while (sr.Read()):
             calendar = Calendar()
             if canceller.IsCancellationRequested:
                 break
             try:
                 calendar.calendar_id = sr[0]
                 calendar.title = sr[1]
                 calendar.description = sr[3]
                 calendar.dtstart = sr[5]
                 calendar.dtend = sr[6]
                 calendar.rrule = self._extractData(sr[4], 'FREQ')
                 calendar.interval = self._extractData(sr[4], 'INTERVAL')
                 calendar.until = self._extractData(sr[4], 'UNTIL')
                 calendar.source = self.node.AbsolutePath
                 self.mc.db_insert_calendar(calendar)
             except:
                 pass
         self.mc.db_commit()
         sr.Close()
         self.db.Close()
     except:
         pass
Пример #8
0
 def read_deleted_table_mailaccount(self):
     self.db = SQLite.SQLiteConnection('Data Source = {}'.format(
         self.recoverDB))
     self.db.Open()
     self.db_cmd = SQLite.SQLiteCommand(self.db)
     try:
         node = self.node
         if node is None:
             return
         db = SQLiteParser.Database.FromNode(node, canceller)
         if db is None:
             return
         ts = SQLiteParser.TableSignature('FM_Account_Setting')
         for rec in db.ReadTableDeletedRecords(ts, False):
             if canceller.IsCancellationRequested:
                 break
             param = ()
             param = param + (rec['id'].Value, )
             param = param + (rec['name'].Value, )
             param = param + (rec['nickname'].Value, )
             self.db_insert_table(SQL_INSERT_TABLE_RECOVER_MAILACCOUNT,
                                  param)
         self.db_cmd.Dispose()
         self.db.Close()
     except Exception as e:
         print(e)
Пример #9
0
 def read_deleted_table_mailcontactgroup(self):
     self.db = SQLite.SQLiteConnection('Data Source = {}'.format(
         self.recoverDB))
     self.db.Open()
     self.db_cmd = SQLite.SQLiteCommand(self.db)
     try:
         node = self.node.Parent.GetByPath("/FMContact.db")
         if node is None:
             return
         db = SQLiteParser.Database.FromNode(node, canceller)
         if db is None:
             return
         ts = SQLiteParser.TableSignature('FMContactGroup')
         for rec in db.ReadTableDeletedRecords(ts, False):
             if canceller.IsCancellationRequested:
                 break
             param = ()
             param = param + (rec['groupid'].Value, )
             param = param + (rec['name'].Value, )
             self.db_insert_table(SQL_INSERT_TABLE_RECOVER_MAILCONTACTGROUP,
                                  param)
         self.db_cmd.Dispose()
         self.db.Close()
     except Exception as e:
         print(e)
Пример #10
0
 def create_deleted_db(self):
     '''创建删除数据库'''
     if os.path.exists(self.recoverDB):
         os.remove(self.recoverDB)
     db = SQLite.SQLiteConnection('Data Source = {}'.format(self.recoverDB))
     db.Open()
     db_cmd = SQLite.SQLiteCommand(db)
     if db_cmd is not None:
         db_cmd.CommandText = '''create table if not exists cfurl_cache_receiver_data
             (entry_ID INTEGER, IsDataOnFS INTEGER, receiver_data BLOB, deleted INTEGER)'''
         db_cmd.ExecuteNonQuery()
         db_cmd.CommandText = '''create table if not exists DBTableName_UserRelation
             (otheruid INTEGER, icon TEXT, relation INTEGER, nickname TEXT, myuid INTEGER, gender INTEGER, sign TEXT, deleted INTEGER)'''
         db_cmd.ExecuteNonQuery()
         db_cmd.CommandText = '''create table if not exists DBTableNmae_GroupMsg
             (groupname TEXT, myuid INTEGER, groupicon TEXT, groupId INTEGER, deleted INTEGER)'''
         db_cmd.ExecuteNonQuery()
         db_cmd.CommandText = '''create table if not exists DBTableName_P2PMsg
             (time INTEGER, otheruid INTEGER, msgid INTEGER, msgstate INTEGER, attachment TEXT, distance INTEGER, myuid INTEGER, content TEXT, msgtype INTEGER, deleted INTEGER)'''
         db_cmd.ExecuteNonQuery()
         db_cmd.CommandText = '''create table if not exists DBTableName_MySendDynamic
             (address TEXT, userid INTEGER, sendTime INTEGER, nickname TEXT, icon TEXT, myuid INTEGER, likecount INTEGER, datetime INTEGER, reviewcount INTEGER, gender INTEGER, dynamicid INTEGER, sendPhotos BLOB, content TEXT, deleted INTEGER)'''
         db_cmd.ExecuteNonQuery()
     db_cmd.Dispose()
     db.Close()
Пример #11
0
 def parse_feed_comment(self, dbPath):
     '''解析评论点赞数据'''
     db = SQLite.SQLiteConnection(
         'Data Source = {}; ReadOnly = True'.format(dbPath))
     db.Open()
     db_cmd = SQLite.SQLiteCommand(db)
     fs = self.node.FileSystem
     try:
         if self.db is None:
             return
         db_cmd.CommandText = ''''''
         sr = db_cmd.ExecuteReader()
         while (sr.Read()):
             try:
                 feed_like = model_im.FeedLike()
                 feed_comment = model_im.FeedComment()
                 if canceller.IsCancellationRequested:
                     break
                 pass
             except:
                 traceback.print_exc()
         sr.Close()
         self.db_commit()
         db_cmd.Dispose()
         db.Close()
     except Exception as e:
         print(e)
Пример #12
0
 def parse_chatroom(self, dbPath):
     '''解析群组数据'''
     db = SQLite.SQLiteConnection(
         'Data Source = {}; ReadOnly = True'.format(dbPath))
     db.Open()
     db_cmd = SQLite.SQLiteCommand(db)
     try:
         if db is None:
             return
         db_cmd.CommandText = '''select groupname, myuid, groupicon, groupId, deleted from DBTableNmae_GroupMsg'''
         sr = db_cmd.ExecuteReader()
         while (sr.Read()):
             try:
                 chatroom = model_im.Chatroom()
                 if canceller.IsCancellationRequested:
                     break
                 chatroom.account_id = self.account_id
                 chatroom.chatroom_id = self._db_reader_get_int_value(sr, 3)
                 chatroom.photo = self._db_reader_get_string_value(sr, 2)
                 chatroom.deleted = self._db_reader_get_int_value(sr, 4)
                 chatroom.name = self._db_reader_get_string_value(sr, 0)
                 chatroom.source = self.node.AbsolutePath
                 self.db_insert_table_chatroom(chatroom)
             except:
                 traceback.print_exc()
         sr.Close()
         self.db_commit()
         db_cmd.Dispose()
         db.Close()
     except Exception as e:
         print(e)
Пример #13
0
 def create_deleted_db(self):
     '''创建删除数据库'''
     if os.path.exists(self.recoverDB):
         os.remove(self.recoverDB)
     db = SQLite.SQLiteConnection('Data Source = {}'.format(self.recoverDB))
     db.Open()
     db_cmd = SQLite.SQLiteCommand(db)
     if db_cmd is not None:
         db_cmd.CommandText = '''create table if not exists participants_info
             (_id INTEGER, display_name TEXT, number TEXT)'''
         db_cmd.ExecuteNonQuery()
         db_cmd.CommandText = '''create table if not exists phonebookcontact
             (_id INTEGER, native_id INTEGER, display_name TEXT)'''
         db_cmd.ExecuteNonQuery()
         db_cmd.CommandText = '''create table if not exists phonebookdata
             (contact_id INTEGER, data2 TEXT)'''
         db_cmd.ExecuteNonQuery()
         db_cmd.CommandText = '''create table if not exists conversations
             (conversation_type INTEGER, _id INTEGER, date INTEGER, participant_id_1 INTEGER, participant_id_2 INTEGER, participant_id_3 INTEGER, participant_id_4 INTEGER, name TEXT)'''
         db_cmd.ExecuteNonQuery()
         db_cmd.CommandText = '''create table if not exists messages
             (body TEXT, send_type INTEGER, extra_uri TEXT, _id INTEGER, msg_date INTEGER, participant_id INTEGER, conversation_type INTEGER, conversation_id INTEGER, extra_mime INTEGER, description TEXT, msg_info TEXT)'''
         db_cmd.ExecuteNonQuery()
         db_cmd.CommandText = '''create table if not exists messages_calls
             (_id INTEGER, date INTEGER, duration INTEGER, type INTEGER, canonized_number TEXT)'''
         db_cmd.ExecuteNonQuery()
     db_cmd.Dispose()
     db.Close()
Пример #14
0
 def read_deleted_table_mailattach(self):
     self.db = SQLite.SQLiteConnection('Data Source = {}'.format(
         self.recoverDB))
     self.db.Open()
     self.db_cmd = SQLite.SQLiteCommand(self.db)
     try:
         node = self.node
         if node is None:
             return
         db = SQLiteParser.Database.FromNode(node, canceller)
         if db is None:
             return
         ts = SQLiteParser.TableSignature('FM_Mail_Attach')
         for rec in db.ReadTableDeletedRecords(ts, False):
             if canceller.IsCancellationRequested:
                 break
             if IsDBNull(
                     rec['attachId'].Value) or rec['attachId'].Value == 0:
                 continue
             param = ()
             param = param + (rec['attachId'].Value, )
             param = param + (rec['accountId'].Value, )
             param = param + (rec['mailId'].Value, )
             param = param + (rec['name'].Value, )
             param = param + (rec['downloadSize'].Value, )
             param = param + (rec['downloadUtc'].Value, )
             self.db_insert_table(SQL_INSERT_TABLE_RECOVER_MAILATTACH,
                                  param)
         self.db_cmd.Dispose()
         self.db.Close()
     except Exception as e:
         print(e)
Пример #15
0
 def parse_call_record(self, dbPath, deleteFlag):
     '''解析通话记录数据'''
     db = SQLite.SQLiteConnection('Data Source = {}; ReadOnly = True'.format(dbPath))
     db.Open()
     db_cmd = SQLite.SQLiteCommand(db)
     try:
         if db is None:
             return
         db_cmd.CommandText = '''select a._id, a.date, a.duration, a.type, a.canonized_number, b.display_name 
             from messages_calls as a left join participants_info as b on a.canonized_number = b.number'''
         sr = db_cmd.ExecuteReader()
         while (sr.Read()):
             try:
                 record = model_callrecord.Records()
                 if canceller.IsCancellationRequested:
                     break
                 record.date = self._get_timestamp(sr[1]) if not IsDBNull(sr[1]) else 0
                 record.deleted = deleteFlag
                 record.duration = self._db_reader_get_int_value(sr, 2)
                 record.id = self._db_reader_get_int_value(sr, 0)
                 record.name = self._db_reader_get_string_value(sr, 5)
                 record.phone_number = self._db_reader_get_string_value(sr, 4)
                 record.local_number = self.local_number
                 record.source = self.node.AbsolutePath
                 record.type = self._db_reader_get_int_value(sr, 3)
                 self.db_insert_table_call_records(record)
             except:
                 traceback.print_exc()
         sr.Close()
         if deleteFlag is 0: 
             self.db_commit()
         db_cmd.Dispose()
         db.Close()
     except Exception as e:
         print(e)
Пример #16
0
 def analyze_contact(self, contactPath, deleteFlag):
     """保存联系人数据到中间数据库"""
     self.db = SQLite.SQLiteConnection(
         'Data Source = {}; ReadOnly = True'.format(contactPath))
     self.db.Open()
     self.db_cmd = SQLite.SQLiteCommand(self.db)
     try:
         if self.db is None:
             return
         self.db_cmd.CommandText = SQL_ASSOCIATE_TABLE_CONTACT
         sr = self.db_cmd.ExecuteReader()
         while sr.Read():
             contact = Contact()
             if canceller.IsCancellationRequested:
                 break
             contact.contact_id = sr[0]
             contact.owner_account_id = sr[1]
             contact.contact_user = sr[2]
             contact.contact_email = sr[2]
             contact.contact_alias = sr[3]
             contact.contact_group = sr[4]
             contact.contact_remark = sr[5]
             contact.contact_phone = sr[6]
             contact.source = self.node.AbsolutePath
             contact.deleted = deleteFlag
             self.mm.db_insert_table_contact(contact)
         self.mm.db_commit()
         self.db_cmd.Dispose()
         self.db.Close()
     except Exception as e:
         print(e)
Пример #17
0
 def db_create(self):
     self.conn = sql.SQLiteConnection("DataSource = {}".format(self.cache))
     self.conn.Open()
     self.cmd = sql.SQLiteCommand(self.conn)
     self.event = None
     self.im.db_create(self.cache + '.im')
     self.db_create_table()
     self.db_begin_transaction()
Пример #18
0
 def parse_chatroom_member(self, dbPath, deleteFlag):
     '''解析群组成员数据'''
     db = SQLite.SQLiteConnection('Data Source = {}; ReadOnly = True'.format(dbPath))
     db.Open()
     db_cmd = SQLite.SQLiteCommand(db)
     if deleteFlag is 1:
         self.db = SQLite.SQLiteConnection('Data Source = {}'.format(self.cachedb))
         self.db.Open()
         self.db_cmd = SQLite.SQLiteCommand(self.db)
     fs = self.node.FileSystem
     try:
         if self.db is None:
             return
         db_cmd.CommandText = '''select distinct a._id, a.date, a.participant_id_1, b.number, b.display_name, a.participant_id_2, c.number, c.display_name, 
         a.participant_id_3, d.number, d.display_name, a.participant_id_4, e.number, e.display_name, a.name from conversations as a 
         left join participants_info as b on a.participant_id_1 = b._id left join participants_info as c on a.participant_id_2 = c._id
         left join participants_info as d on a.participant_id_3 = d._id left join participants_info as e on a.participant_id_4 = e._id where conversation_type = 1'''
         sr = db_cmd.ExecuteReader()
         while (sr.Read()):
             try:
                 if canceller.IsCancellationRequested:
                     break
                 tags = [2, 5, 8, 11]
                 for tag in tags:
                     if IsDBNull(sr[tag]) or sr[tag] == 0:
                         break
                     chatroom_member = model_im.ChatroomMember()
                     chatroom_member.account_id = self.account_id
                     chatroom_member.chatroom_id = self._db_reader_get_int_value(sr, 0)
                     chatroom_member.deleted = deleteFlag
                     chatroom_member.display_name = self._db_reader_get_string_value(sr, tag+2)
                     chatroom_member.member_id = self._db_reader_get_int_value(sr, tag)
                     chatroom_member.source = self.node.AbsolutePath
                     chatroom_member.telephone = self._db_reader_get_string_value(sr, tag+1)
                     self.db_insert_table_chatroom_member(chatroom_member)
             except:
                 traceback.print_exc()
         sr.Close()
         if deleteFlag is 0: 
             self.db_commit()
         db_cmd.Dispose()
         db.Close()
     except Exception as e:
         print(e)
Пример #19
0
 def get_models(self):
     models = []
     self.db = SQLite.SQLiteConnection('Data Source = {}'.format(self.db_cache))
     self.db.Open()
     self.db_cmd = SQLite.SQLiteCommand(self.db)
     models.extend(self._get_model_media())
     models.extend(self._get_model_thumbnail())
     models.extend(self._get_model_media_log())
     self.db.Close()
     self.db = None
     return models
Пример #20
0
def create_connection_tentatively(db_node, read_only=True):
    cmd = 'DataSource = {}; ReadOnly = {}'
    cmd = cmd.format(db_node.PathWithMountPoint,
                     'True' if read_only else 'False')
    try:
        conn = None
        dcmd = None
        reader = None
        conn = sql.SQLiteConnection(cmd)
        conn.Open()
        dcmd = sql.SQLiteCommand(conn)
        dcmd.CommandText = '''
            select * from sqlite_master limit 1 offset 0
        '''
        reader = dcmd.ExecuteReader()
        reader.Read()
        reader.Close()
        dcmd.Dispose()
        return conn
    except:
        traceback.print_exc()
        if reader is not None:
            reader.Close()
        if dcmd is not None:
            dcmd.Dispose()
        if conn is not None:
            conn.Close()
        data = db_node.Data
        sz = db_node.Size
        cache = ds.OpenCachePath('C37R')
        if not os.path.exists(cache):
            os.mkdir(cache)
        cache_db = cache + '/' + md5(db_node.PathWithMountPoint)
        f = open(cache_db, 'wb+')
        f.write(data.read(sz))
        f.close()
        cmd = 'DataSource = {}; ReadOnly = {}'.format(
            cache_db, 'True' if read_only else 'False')
        conn = sql.SQLiteConnection(cmd)
        conn.Open()
        return conn
Пример #21
0
 def db_create(self, db_path):
     try:
         if os.path.exists(db_path):
             os.remove(db_path)
     except Exception as e:
         print("bcp_mail db_create() remove %s error:%s" % (db_path, e))
     self.db = SQLite.SQLiteConnection('Data Source = {}'.format(db_path))
     self.db.Open()
     self.db_cmd = SQLite.SQLiteCommand(self.db)
     self.db_trans = self.db.BeginTransaction()
     self.db_create_table()
     self.db_commit()
Пример #22
0
 def analyze_deleted_data(self):
     '''分析删除数据'''
     self.read_deleted_records()
     self.db = SQLite.SQLiteConnection('Data Source = {}'.format(self.cachedb))
     self.db.Open()
     self.db_cmd = SQLite.SQLiteCommand(self.db)
     if self.recoverDB is not None:
         self.parse_friend(self.node, self.recoverDB, 1)
         self.parse_chatroom(self.recoverDB, 1)
         self.parse_chatroom_member(self.recoverDB, 1)
         self.parse_call_record(self.recoverDB, 1)
         self.parse_message(self.recoverDB, 1)
Пример #23
0
    def get_models(self):
        models = []

        self.db = SQLite.SQLiteConnection('Data Source = {}'.format(self.cache_db))
        self.db.Open()
        self.db_cmd = SQLite.SQLiteCommand(self.db)
        models.extend(self._get_charge_models())
        models.extend(self._get_blacklist_models())
        models.extend(self._get_blockedsms_models())
        models.extend(self._get_callrecord_models())
        models.extend(self._get_wifi_signal_models())
        self.db.Close()
        return models
Пример #24
0
 def parse_feed_comment(self, dbPath):
     '''解析评论点赞数据'''
     db = SQLite.SQLiteConnection(
         'Data Source = {}; ReadOnly = True'.format(dbPath))
     db.Open()
     db_cmd = SQLite.SQLiteCommand(db)
     try:
         if self.db is None:
             return
         db_cmd.CommandText = '''select action, comment, commend_id, item_id, timestamp, user_id, deleted from bb_dl_comment_info'''
         sr = db_cmd.ExecuteReader()
         while (sr.Read()):
             try:
                 feed_like = model_im.FeedLike()
                 feed_comment = model_im.FeedComment()
                 if canceller.IsCancellationRequested:
                     break
                 if sr[0] == 'like':
                     feed_like.like_id = self._db_reader_get_int_value(
                         sr, 2)
                     feed_like.sender_id = self._db_reader_get_int_value(
                         sr, 5)
                     feed_like.sender_name = 'BeeTalkUser'
                     feed_like.create_time = self._db_reader_get_int_value(
                         sr, 4)
                     feed_like.deleted = self._db_reader_get_int_value(
                         sr, 6)
                     feed_like.source = self.node.AbsolutePath
                     self.db_insert_table_feed_like(feed_like)
                 elif not IsDBNull(sr[4]):
                     feed_comment.comment_id = self._db_reader_get_int_value(
                         sr, 2)
                     feed_comment.sender_id = self._db_reader_get_int_value(
                         sr, 5)
                     feed_comment.sender_name = 'BeeTalkUser'
                     feed_comment.content = self._db_reader_get_string_value(
                         sr, 1)
                     feed_comment.create_time = self._db_reader_get_int_value(
                         sr, 4)
                     feed_comment.deleted = self._db_reader_get_int_value(
                         sr, 6)
                     feed_comment.source = self.node.AbsolutePath
                     self.db_insert_table_feed_comment(feed_comment)
             except:
                 traceback.print_exc()
         sr.Close()
         self.db_commit()
         db_cmd.Dispose()
         db.Close()
     except Exception as e:
         print(e)