Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
gajim
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Weblate
gajim
Commits
b3eba176
Commit
b3eba176
authored
18 years ago
by
Yann Leboulanger
Browse files
Options
Downloads
Patches
Plain Diff
remove log migration process, 0.8 is old
parent
748c62c3
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/gajim.py
+2
-40
2 additions, 40 deletions
src/gajim.py
src/migrate_logs_to_dot9_db.py
+0
-267
0 additions, 267 deletions
src/migrate_logs_to_dot9_db.py
with
2 additions
and
307 deletions
src/gajim.py
+
2
−
40
View file @
b3eba176
...
...
@@ -180,20 +180,6 @@ import systray
import
vcard
import
config
class
MigrateCommand
(
nslookup
.
IdleCommand
):
def
__init__
(
self
,
on_result
):
nslookup
.
IdleCommand
.
__init__
(
self
,
on_result
)
self
.
commandtimeout
=
10
def
_compose_command_args
(
self
):
return
[
'
python
'
,
'
migrate_logs_to_dot9_db.py
'
,
'
dont_wait
'
]
def
_return_result
(
self
):
print
self
.
result
if
self
.
result_handler
:
self
.
result_handler
(
self
.
result
)
self
.
result_handler
=
None
class
GlibIdleQueue
(
idlequeue
.
IdleQueue
):
'''
Extends IdleQueue to use glib io_add_wath, instead of select/poll
...
...
@@ -1942,30 +1928,6 @@ if __name__ == '__main__':
gtkgui_helpers
.
possibly_set_gajim_as_xmpp_handler
()
# Migrate old logs if we have such olds logs
from
common
import
logger
from
migrate_logs_to_dot9_db
import
PATH_TO_LOGS_BASE_DIR
LOG_DB_PATH
=
logger
.
LOG_DB_PATH
if
not
os
.
path
.
exists
(
LOG_DB_PATH
)
and
os
.
path
.
isdir
(
PATH_TO_LOGS_BASE_DIR
):
import
Queue
q
=
Queue
.
Queue
(
100
)
dialog
=
dialogs
.
ProgressDialog
(
_
(
'
Migrating Logs...
'
),
_
(
'
Please wait while logs are being migrated...
'
),
q
)
if
os
.
name
==
'
nt
'
and
gtk
.
pygtk_version
>
(
2
,
8
,
0
):
idlequeue
=
idlequeue
.
SelectIdleQueue
()
else
:
idlequeue
=
GlibIdleQueue
()
def
on_result
(
*
arg
):
dialog
.
dialog
.
destroy
()
dialog
.
dialog
=
None
gobject
.
source_remove
(
dialog
.
update_progressbar_timeout_id
)
gajim
.
logger
.
init_vars
()
check_paths
.
check_and_possibly_create_paths
()
Interface
()
m
=
MigrateCommand
(
on_result
)
m
.
set_idlequeue
(
idlequeue
)
m
.
start
()
else
:
check_paths
.
check_and_possibly_create_paths
()
Interface
()
check_paths
.
check_and_possibly_create_paths
()
Interface
()
gtk
.
main
()
This diff is collapsed.
Click to expand it.
src/migrate_logs_to_dot9_db.py
deleted
100755 → 0
+
0
−
267
View file @
748c62c3
#!/bin/sh
'''
:
'
exec python -OOt
"
$0
"
${1+
"
$@
"
}
'
'''
## Contributors for this file:
## - Yann Le Boulanger <asterix@lagaule.org>
## - Nikos Kouremenos <kourem@gmail.com>
##
## Copyright (C) 2003-2004 Yann Le Boulanger <asterix@lagaule.org>
## Vincent Hanquez <tab@snarc.org>
## Copyright (C) 2005 Yann Le Boulanger <asterix@lagaule.org>
## Vincent Hanquez <tab@snarc.org>
## Nikos Kouremenos <nkour@jabber.org>
## Dimitur Kirov <dkirov@gmail.com>
## Travis Shirk <travis@pobox.com>
## Norman Rasmussen <norman@rasmussen.co.za>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; version 2 only.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
import
os
import
sre
import
sys
import
time
from
common
import
logger
from
common
import
i18n
try
:
PREFERRED_ENCODING
=
sys
.
getpreferredencoding
()
except
:
PREFERRED_ENCODING
=
'
utf-8
'
from
common.helpers
import
from_one_line
,
decode_string
from
pysqlite2
import
dbapi2
as
sqlite
if
os
.
name
==
'
nt
'
:
try
:
PATH_TO_LOGS_BASE_DIR
=
os
.
path
.
join
(
os
.
environ
[
'
appdata
'
],
'
Gajim
'
,
'
Logs
'
)
PATH_TO_DB
=
os
.
path
.
join
(
os
.
environ
[
'
appdata
'
],
'
Gajim
'
,
'
logs.db
'
)
# database is called logs.db
except
KeyError
:
# win9x
PATH_TO_LOGS_BASE_DIR
=
'
../src/Logs
'
PATH_TO_DB
=
'
../src/logs.db
'
else
:
PATH_TO_LOGS_BASE_DIR
=
os
.
path
.
expanduser
(
'
~/.gajim/logs
'
)
PATH_TO_DB
=
os
.
path
.
expanduser
(
'
~/.gajim/logs.db
'
)
# database is called logs.db
class
Migration
:
def
__init__
(
self
):
self
.
constants
=
logger
.
Constants
()
self
.
DONE
=
False
self
.
PROCESSING
=
False
if
os
.
path
.
exists
(
PATH_TO_DB
):
print
'
%s already exists. Exiting..
'
%
PATH_TO_DB
sys
.
exit
()
self
.
jids_already_in
=
[]
# jid we already put in DB
def
get_jid
(
self
,
dirname
,
filename
):
# jids.jid text column will be JID if TC-related, room_jid if GC-related,
# ROOM_JID/nick if pm-related. Here I get names from filenames
if
dirname
.
endswith
(
'
logs
'
)
or
dirname
.
endswith
(
'
Logs
'
):
# we have file (not dir) in logs base dir, so it's TC
jid
=
filename
# file is JID
else
:
# we are in a room folder (so it can be either pm or message in room)
if
filename
==
os
.
path
.
basename
(
dirname
):
# room/room
jid
=
dirname
# filename is ROOM_JID
else
:
#room/nick it's pm
jid
=
dirname
+
'
/
'
+
filename
if
jid
.
startswith
(
'
/
'
):
p
=
len
(
PATH_TO_LOGS_BASE_DIR
)
jid
=
jid
[
p
+
1
:]
jid
=
jid
.
lower
()
return
jid
def
decode_jid
(
self
,
string
):
'''
try to decode (to make it Unicode instance) given jid
'''
string
=
decode_string
(
string
)
if
isinstance
(
string
,
str
):
return
None
# decode failed
return
string
def
visit
(
self
,
arg
,
dirname
,
filenames
):
s
=
_
(
'
Visiting %s
'
)
%
dirname
if
self
.
queue
:
self
.
queue
.
put
(
s
)
else
:
print
s
for
filename
in
filenames
:
# Don't take this file into account, this is dup info
# notifications are also in contact log file
if
filename
in
(
'
notify.log
'
,
'
README
'
):
continue
path_to_text_file
=
os
.
path
.
join
(
dirname
,
filename
)
if
os
.
path
.
isdir
(
path_to_text_file
):
continue
jid
=
self
.
get_jid
(
dirname
,
filename
)
jid
=
self
.
decode_jid
(
jid
)
if
not
jid
:
continue
if
filename
==
os
.
path
.
basename
(
dirname
):
# gajim@conf/gajim@conf then gajim@conf is type room
jid_type
=
self
.
constants
.
JID_ROOM_TYPE
#Type of log
typ
=
'
room
'
else
:
jid_type
=
self
.
constants
.
JID_NORMAL_TYPE
#Type of log
typ
=
_
(
'
normal
'
)
s
=
_
(
'
Processing %s of type %s
'
)
%
(
jid
,
typ
)
if
self
.
queue
:
self
.
queue
.
put
(
s
.
encode
(
PREFERRED_ENCODING
))
else
:
print
s
.
encode
(
PREFERRED_ENCODING
)
JID_ID
=
None
f
=
open
(
path_to_text_file
,
'
r
'
)
lines
=
f
.
readlines
()
for
line
in
lines
:
line
=
from_one_line
(
line
)
splitted_line
=
line
.
split
(
'
:
'
)
if
len
(
splitted_line
)
>
2
:
# type in logs is one of
# 'gc', 'gcstatus', 'recv', 'sent' and if nothing of those
# it is status
# new db has:
# status, gcstatus, gc_msg, (we only recv those 3),
# single_msg_recv, chat_msg_recv, chat_msg_sent, single_msg_sent
# to meet all our needs
# here I convert
# gc ==> gc_msg, gcstatus ==> gcstatus, recv ==> chat_msg_recv
# sent ==> chat_msg_sent, status ==> status
typ
=
splitted_line
[
1
]
# line[1] has type of logged message
message_data
=
splitted_line
[
2
:]
# line[2:] has message data
# line[0] is date,
# some lines can be fucked up, just drop them
try
:
tim
=
int
(
float
(
splitted_line
[
0
]))
except
:
continue
contact_name
=
None
show
=
None
if
typ
==
'
gc
'
:
contact_name
=
message_data
[
0
]
message
=
'
:
'
.
join
(
message_data
[
1
:])
kind
=
self
.
constants
.
KIND_GC_MSG
elif
typ
==
'
gcstatus
'
:
contact_name
=
message_data
[
0
]
show
=
message_data
[
1
]
message
=
'
:
'
.
join
(
message_data
[
2
:])
# status msg
kind
=
self
.
constants
.
KIND_GCSTATUS
elif
typ
==
'
recv
'
:
message
=
'
:
'
.
join
(
message_data
[
0
:])
kind
=
self
.
constants
.
KIND_CHAT_MSG_RECV
elif
typ
==
'
sent
'
:
message
=
'
:
'
.
join
(
message_data
[
0
:])
kind
=
self
.
constants
.
KIND_CHAT_MSG_SENT
else
:
# status
kind
=
self
.
constants
.
KIND_STATUS
show
=
message_data
[
0
]
message
=
'
:
'
.
join
(
message_data
[
1
:])
# status msg
message
=
message
[:
-
1
]
# remove last \n
if
not
message
:
continue
# jid is already in the DB, don't create a new row, just get his jid_id
if
not
JID_ID
:
if
jid
in
self
.
jids_already_in
:
self
.
cur
.
execute
(
'
SELECT jid_id FROM jids WHERE jid =
"
%s
"'
%
jid
)
JID_ID
=
self
.
cur
.
fetchone
()[
0
]
else
:
self
.
jids_already_in
.
append
(
jid
)
self
.
cur
.
execute
(
'
INSERT INTO jids (jid, type) VALUES (?, ?)
'
,
(
jid
,
jid_type
))
self
.
con
.
commit
()
JID_ID
=
self
.
cur
.
lastrowid
sql
=
'
INSERT INTO logs (jid_id, contact_name, time, kind, show, message)
'
\
'
VALUES (?, ?, ?, ?, ?, ?)
'
values
=
(
JID_ID
,
contact_name
,
tim
,
kind
,
show
,
message
)
self
.
cur
.
execute
(
sql
,
values
)
self
.
con
.
commit
()
def
migrate
(
self
,
queue
=
None
):
self
.
queue
=
queue
self
.
con
=
sqlite
.
connect
(
PATH_TO_DB
)
os
.
chmod
(
PATH_TO_DB
,
0600
)
# rw only for us
self
.
cur
=
self
.
con
.
cursor
()
# create the tables
# kind can be
# status, gcstatus, gc_msg, (we only recv for those 3),
# single_msg_recv, chat_msg_recv, chat_msg_sent, single_msg_sent
# to meet all our needs
# logs.jid_id --> jids.jid_id but Sqlite doesn't do FK etc so it's done in python code
self
.
cur
.
executescript
(
'''
CREATE TABLE jids(
jid_id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
jid TEXT UNIQUE,
type INTEGER
);
CREATE TABLE unread_messages(
message_id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
jid_id INTEGER
);
CREATE TABLE logs(
log_line_id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
jid_id INTEGER,
contact_name TEXT,
time INTEGER,
kind INTEGER,
show INTEGER,
message TEXT,
subject TEXT
);
'''
)
self
.
con
.
commit
()
self
.
PROCESSING
=
True
os
.
path
.
walk
(
PATH_TO_LOGS_BASE_DIR
,
self
.
visit
,
None
)
s
=
'''
We do not use plain-text files anymore, because they do not meet our needs.
Those files here are logs for Gajim up until 0.8.2
We now use an sqlite database called logs.db found in %s
You can now safely remove your %s folder
Thank you
'''
%
(
os
.
path
.
dirname
(
PATH_TO_LOGS_BASE_DIR
),
PATH_TO_LOGS_BASE_DIR
)
f
=
open
(
os
.
path
.
join
(
PATH_TO_LOGS_BASE_DIR
,
'
README
'
),
'
w
'
)
f
.
write
(
s
)
f
.
close
()
if
queue
:
queue
.
put
(
s
)
self
.
DONE
=
True
if
__name__
==
'
__main__
'
:
# magic argumen 'dont_wait' tells us that script is run from Gajim
if
len
(
sys
.
argv
)
<
2
or
sys
.
argv
[
1
]
!=
'
dont_wait
'
:
print
'
IMPORTNANT: PLEASE READ http://trac.gajim.org/wiki/MigrateLogToDot9DB
'
print
'
Migration will start in 40 seconds unless you press Ctrl+C
'
time
.
sleep
(
40
)
# give the user time to act
print
print
'
Starting Logs Migration
'
print
'
=======================
'
print
'
Please do NOT run Gajim until this script is over
'
m
=
Migration
()
m
.
migrate
()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment