2 # -*- coding: utf-8 -*-
5 # gPodder - A media aggregator and podcast client
6 # Copyright (c) 2005-2014 Thomas Perl and the gPodder Team
8 # gPodder is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 3 of the License, or
11 # (at your option) any later version.
13 # gPodder is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
23 # gpodder-migrate2tres - Migrate data from gPodder 2.x to gPodder 3
24 # by Thomas Perl <thp@gpodder.org>; 2011-04-28
33 gpodder_script
= sys
.argv
[0]
34 if os
.path
.islink(gpodder_script
):
35 gpodder_script
= os
.readlink(gpodder_script
)
36 gpodder_dir
= os
.path
.join(os
.path
.dirname(gpodder_script
), '..')
37 prefix
= os
.path
.abspath(os
.path
.normpath(gpodder_dir
))
39 src_dir
= os
.path
.join(prefix
, 'src')
41 if os
.path
.exists(os
.path
.join(src_dir
, 'gpodder', '__init__.py')):
42 # Run gPodder from local source folder (not installed)
43 sys
.path
.insert(0, src_dir
)
47 gpodder
.prefix
= prefix
49 # Platform detection (i.e. MeeGo 1.2 Harmattan, etc..)
50 gpodder
.detect_platform()
53 from gpodder
import schema
54 from gpodder
import util
56 old_database
= os
.path
.expanduser('~/.config/gpodder/database.sqlite')
57 new_database
= gpodder
.database_file
59 old_config
= os
.path
.expanduser('~/.config/gpodder/gpodder.conf')
60 new_config
= gpodder
.config_file
62 if not os
.path
.exists(old_database
):
63 print >>sys
.stderr
, """
64 Turns out that you never ran gPodder 2.
65 Can't find this required file:
73 if os
.path
.exists(old_config
):
74 parser
= ConfigParser
.RawConfigParser()
75 parser
.read(old_config
)
77 old_downloads
= parser
.get('gpodder-conf-1', 'download_dir')
78 except ConfigParser
.NoSectionError
:
79 # The file is empty / section (gpodder-conf-1) not found
81 except ConfigParser
.NoOptionError
:
82 # The section is available, but the key (download_dir) is not
85 if old_downloads
is None:
86 # The user has no configuration. This usually happens when
87 # only the CLI version of gPodder is used. In this case, the
88 # download directory is most likely the default (bug 1434)
89 old_downloads
= os
.path
.expanduser('~/gpodder-downloads')
91 new_downloads
= gpodder
.downloads
93 if not os
.path
.exists(old_downloads
):
94 print >>sys
.stderr
, """
95 Old download directory does not exist. Creating empty one.
97 os
.makedirs(old_downloads
)
99 if any(os
.path
.exists(x
) for x
in (new_database
, new_downloads
)):
100 print >>sys
.stderr
, """
101 Existing gPodder 3 user data found.
102 To continue, please remove:
109 print >>sys
.stderr
, """
110 Would carry out the following actions:
112 Move downloads from %(old_downloads)s
115 Convert database from %(old_database)s
120 result
= raw_input('Continue? (Y/n) ')
123 util
.make_directory(gpodder
.home
)
124 schema
.convert_gpodder2_db(old_database
, new_database
)
125 if not os
.path
.exists(new_database
):
126 print >>sys
.stderr
, 'Could not convert database.'
129 shutil
.move(old_downloads
, new_downloads
)
130 if not os
.path
.exists(new_downloads
):
131 print >>sys
.stderr
, 'Could not move downloads.'
134 print 'Done. Have fun with gPodder 3!'