コード例 #1
0
ファイル: userlist.py プロジェクト: porridge/gaduhistory
 def __init__(self):
     bar = BARS['userlist']
     super( UserlistView, self ).__init__(u"Lista użytkowników", bar = bar )
     self._about = self.AboutDialog( 5, 5 )
     self._old = None
     numbers = []
     for obj in Users():
         text = "%10d: %-35s" % ( obj.ggnumber, obj.show )
         self.add_menu_item( text, UserView( obj ) )
         numbers.append( obj.ggnumber )
     dir = FileManager._history_dir()
     dirs = []
     for number in listdir( dir ):
         try:
             number = int( number )
         except:
             # the file is not a GG number, so it's not a history file
             continue
         if number in numbers:
             continue
         dirs.append( number )
     dirs.sort()
     for number in dirs:
         text = "%10s: %-35s" % ( number, '' )
         self.add_menu_item( text, UserView( obj ) )
     self.refresh()
コード例 #2
0
ファイル: userlist.py プロジェクト: jelmer/gaduhistory
 def __init__(self):
     bar = BARS['userlist']
     super(UserlistView, self).__init__(u"Lista użytkowników", bar=bar)
     self._about = self.AboutDialog(5, 5)
     self._old = None
     numbers = []
     for obj in Users():
         text = "%10d: %-35s" % (obj.ggnumber, obj.show)
         self.add_menu_item(text, UserView(obj))
         numbers.append(obj.ggnumber)
     dir = FileManager._history_dir()
     dirs = []
     for number in listdir(dir):
         try:
             number = int(number)
         except:
             # the file is not a GG number, so it's not a history file
             continue
         if number in numbers:
             continue
         dirs.append(number)
     dirs.sort()
     for number in dirs:
         text = "%10s: %-35s" % (number, '')
         self.add_menu_item(text, UserView(obj))
     self.refresh()
コード例 #3
0
def SQL_MSG(uid):
    global _SQL_MSG
    uid = strip_gg(uid)
    if not _SQL_MSG.has_key(uid):
        _SQL_MSG[uid] = sqlite3.connect(FileManager._gg_history_sql_of(uid))
        create_tables_msg( _SQL_MSG[uid] )
        _SQL_MSG[uid].text_factory = unicode
        _SQL_MSG[uid].row_factory = sqlite3.Row
    return _SQL_MSG[uid]
コード例 #4
0
ファイル: userlist.py プロジェクト: porridge/gaduhistory
 def show_number(self, ggnumber):
     if FileManager.has_history( ggnumber ):
         sql = SQL()
         query = 'select * from users where ggnumber=:ggnumber;'
         ret = sql.execute(query, {'ggnumber' : ggnumber })
         row = ret.fetchone()
         user = User(row, ggnumber)
         view = UserView( user )
         self.clear()
         view()
     else:
         self.refresh()
         ROText(1, 0, u'Nie znaleziono histori dla podanego numeru.', u'Błąd' ).run()
コード例 #5
0
ファイル: userlist.py プロジェクト: jelmer/gaduhistory
 def show_number(self, ggnumber):
     if FileManager.has_history(ggnumber):
         sql = SQL()
         query = 'select * from users where ggnumber=:ggnumber;'
         ret = sql.execute(query, {'ggnumber': ggnumber})
         row = ret.fetchone()
         user = User(row, ggnumber)
         view = UserView(user)
         self.clear()
         view()
     else:
         self.refresh()
         ROText(1, 0, u'Nie znaleziono histori dla podanego numeru.',
                u'Błąd').run()
コード例 #6
0
def is_cache_needed(ggnumber):
    """is_cache_needed(ggnumber) -> bool
    Is new cache for the GG number needed.
    """
    sql = SQL()
    query = 'select seek from cache_info where ggnumber=:ggnumber'
    tab = {
        'ggnumber' : ggnumber,
    }
    try:
        seek = sql.execute( query, tab ).fetchall()[0][0]
    except:
        return True
    fp = open(FileManager.history_of(ggnumber), "rb")
    fp.seek(0, 2) #seek to the end
    if seek != fp.tell():
        return True
    else:
        return False
コード例 #7
0
def cache_history( number ):
    """cache_history( number ) -> None
    Update cache for the specific user.
    number - GG number of the person to reloads cache
    """
    def create_time(text):
        if EKG_CONFIG.get('log_timestamp') != None:
            time_struct = time.strptime(text, EKG_CONFIG.get('log_timestamp'))
            return time.mktime(time_struct)
        else:
            return int(text)
        
    main_sql = SQL()
    ret = main_sql.execute( 'select seek from cache_info where ggnumber=:ggnumber', {'ggnumber':number} )
    row = ret.fetchone()
    if row != None:
        offset = row[0]
    else:
        offset = 0
    
    sql = SQL_MSG(number)
    if not FileManager.has_history(number):
        return
    file = open(FileManager.history_of(number), "rb")
    file.seek(offset)
    
    reader = GaduReader(file, encoding=FileManager.history_encoding)
    loop = -1
    for row in reader:
        try:
            #jeśli jest już taki rekord, to nie dodawaj nowego
            query = 'select * from msg where time=:time'
            tab = {}
            if row[0] in ['chatsend', 'msgsend']:
                tab['msg']  = row[4]
                tab['time'] = create_time(row[3])
            else:    
                tab['msg']  = row[5]
                tab['time'] = create_time(row[4])
            ret = sql.execute(query,tab)
            rows = ret.fetchall()
            if len(rows) > 0:
                continue
            #--------------------------------
            
            loop += 1
            if row[0] == 'status':
                tab = {
                    'type'      : row[0],
                    #'ggnumber'  : int( strip_gg( row[1] ) ),
                    'nick'      : row[2],
                    'ip'        : row[3],
                    'time'      : create_time( row[4] ),
                    'status'    : row[5],
                }
                if len( row ) > 6:
                    tab['descr'] = row[6]
                else:
                    tab['descr'] = None
                query = '''insert into msg( type, nick, ip, time, status, descr ) values
                ( :type, :nick, :ip, datetime(:time, 'unixepoch'), :status, :descr);'''
            elif row[0] in ['chatrecvign', 'msgrecvign', 'chatrecv', 'msgrecv', 'chatrcv']:
                tab = {
                    'type'      : row[0],
                    #'ggnumber'  : int( strip_gg( row[1] ) ),
                    'nick'      : row[2],
                    'time'      : create_time( row[3] ),
                    'send_time' : create_time( row[4] ),
                    'msg'       : row[5],
                }
                query = '''insert into msg( type, nick, time, send_time, msg ) values
                ( :type, :nick, datetime(:time, 'unixepoch'), :send_time, :msg);'''
            elif row[0] in ['chatsend', 'msgsend']:
                tab = {
                    'type'      : row[0],
                    #'ggnumber'  : int( strip_gg( row[1] ) ),
                    'nick'      : row[2],
                    'time'      : create_time( row[3] ),
                    'msg'       : row[4],
                }
                query = '''insert into msg( type, nick, time, msg ) values
                ( :type, :nick, datetime(:time, 'unixepoch'), :msg);'''
            else:
                raise ValueError('Unknown row type [%s] in %s when reading line %d from %s.' %
                                  (row[0], str(row), loop, str(file)))
            sql.execute( query, tab )
        except IndexError:
            raise ValueError('Row %s has less fields (%d) than expected when reading '
                             'line %d from %s, counting from byte %d.' %
                             (str(row), len(row), loop, str(file), offset))
        except UnicodeEncodeError:
            print 'Unicode Encoding Error in %s when reading line %d from %s, couting from byte %d.' % (str(row), loop, str(file), offset)
            #raise ValueError('Unicode Encoding Error in %s when reading line %d from %s, '
            #                 'couting from byte %d.' % (str(row), loop, str(file), offset))
        except ValueError:
            print "Error in line %d: '%s'. Probalby wrong timestamp." % (loop, str(row) )
    from datetime import datetime
    tab = {
        'ggnumber'  : number,
        'seek'      : file.tell(),
    }
    try:
        query = 'insert into cache_info values ( :ggnumber, :seek );'
        main_sql.execute( query, tab )
    except sqlite3.IntegrityError:
        query = 'update cache_info set seek=:seek where ggnumber=:ggnumber;'
        main_sql.execute( query, tab )
    main_sql.commit()
    sql.commit()