summaryrefslogtreecommitdiff
blob: 446ae2e9a0e1780d1e7e3461c4cbecaab8a86629 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
https://dev.deluge-torrent.org/changeset/23b3f144fce3424ae

Index: deluge/core/torrentmanager.py
===================================================================
--- deluge-2.0.3/deluge/core/torrentmanager.py	(revision 8b62e50eb8bf81a177c4d62484a44b766c6f54a6)
+++ deluge-2.0.3/deluge/core/torrentmanager.py	(revision 23b3f144fce3424ae874d54a659cb7b8dd624ade)
@@ -26,5 +26,5 @@
 import deluge.component as component
 from deluge._libtorrent import lt
-from deluge.common import archive_files, decode_bytes, get_magnet_info, is_magnet
+from deluge.common import PY2, archive_files, decode_bytes, get_magnet_info, is_magnet
 from deluge.configmanager import ConfigManager, get_config_dir
 from deluge.core.authmanager import AUTH_LEVEL_ADMIN
@@ -810,5 +810,8 @@
             try:
                 with open(filepath, 'rb') as _file:
-                    state = pickle.load(_file)
+                    if PY2:
+                        state = pickle.load(_file)
+                    else:
+                        state = pickle.load(_file, encoding='utf8')
             except (IOError, EOFError, pickle.UnpicklingError) as ex:
                 message = 'Unable to load {}: {}'.format(filepath, ex)
Index: deluge/tests/data/utf8_filename_torrents.state
===================================================================
--- deluge-2.0.3/deluge/tests/data/utf8_filename_torrents.state	(revision 23b3f144fce3424ae874d54a659cb7b8dd624ade)
+++ deluge-2.0.3/deluge/tests/data/utf8_filename_torrents.state	(revision 23b3f144fce3424ae874d54a659cb7b8dd624ade)
@@ -0,0 +1,85 @@
+(ideluge.core.torrentmanager
+TorrentManagerState
+p1
+(dp2
+S'torrents'
+p3
+(lp4
+(ideluge.core.torrentmanager
+TorrentState
+p5
+(dp6
+S'max_download_speed'
+p7
+I-1
+sS'move_completed_path'
+p8
+S'/home/calum/Downloads'
+p9
+sS'paused'
+p10
+I00
+sS'max_upload_slots'
+p11
+I-1
+sS'prioritize_first_last'
+p12
+I00
+sS'max_connections'
+p13
+I-1
+sS'compact'
+p14
+I00
+sS'queue'
+p15
+I0
+sS'file_priorities'
+p16
+(lp17
+I4
+asS'filename'
+p18
+S'\xc2\xa2.torrent'
+p19
+sS'max_upload_speed'
+p20
+I-1
+sS'save_path'
+p21
+S'/home/calum/Downloads'
+p22
+sS'time_added'
+p23
+F1573563097.749759
+sS'total_uploaded'
+p24
+I0
+sS'torrent_id'
+p25
+S'80d81d55ef3b85f3c1b634c362e014b35594dc71'
+p26
+sS'auto_managed'
+p27
+I01
+sS'stop_at_ratio'
+p28
+I00
+sS'move_completed'
+p29
+I00
+sS'trackers'
+p30
+(lp31
+sS'magnet'
+p32
+NsS'remove_at_ratio'
+p33
+I00
+sS'stop_ratio'
+p34
+F2
+sS'is_finished'
+p35
+I00
+sbasb.
Index: deluge/tests/test_torrentmanager.py
===================================================================
--- deluge-2.0.3/deluge/tests/test_torrentmanager.py	(revision c6b6902e9f3e37f5b15184eb509b48b43817a331)
+++ deluge-2.0.3/deluge/tests/test_torrentmanager.py	(revision 23b3f144fce3424ae874d54a659cb7b8dd624ade)
@@ -8,4 +8,6 @@
 from __future__ import unicode_literals
 
+import os
+import shutil
 import warnings
 from base64 import b64encode
@@ -29,5 +31,5 @@
 class TorrentmanagerTestCase(BaseTestCase):
     def set_up(self):
-        common.set_tmp_config_dir()
+        self.config_dir = common.set_tmp_config_dir()
         self.rpcserver = RPCServer(listen=False)
         self.core = Core()
@@ -119,2 +121,11 @@
             InvalidTorrentError, self.tm.remove, 'torrentidthatdoesntexist'
         )
+
+    def test_open_state_from_python2(self):
+        """Open a Python2 state with a UTF-8 encoded torrent filename."""
+        shutil.copy(
+            common.get_test_data_file('utf8_filename_torrents.state'),
+            os.path.join(self.config_dir, 'state', 'torrents.state'),
+        )
+        state = self.tm.open_state()
+        self.assertEqual(len(state.torrents), 1)