mirror of
https://git.deluge-torrent.org/deluge
synced 2025-04-19 19:14:55 +00:00
Fix showing non-utf8 encoded torrents in add torrent dialog -- this adds an additional dependency on chardet.
This commit is contained in:
parent
2f955b62f9
commit
2856e948de
3 changed files with 33 additions and 9 deletions
|
@ -5,6 +5,8 @@
|
|||
|
||||
==== GtkUI ====
|
||||
* Fix high cpu usage when displaying speeds in titlebar
|
||||
* Fix showing non-utf8 encoded torrents in add torrent dialog -- this adds
|
||||
an additional dependency on chardet.
|
||||
|
||||
==== WebUI ====
|
||||
* Fix starting when -l option is used
|
||||
|
|
3
README
3
README
|
@ -41,7 +41,8 @@ sudo apt-get install g++ make python-all-dev python-all python-dbus \
|
|||
python-gtk2 python-notify librsvg2-common python-xdg python-support \
|
||||
subversion libboost-dev libboost-python-dev libboost-iostreams-dev \
|
||||
libboost-thread-dev libboost-date-time-dev libboost-filesystem-dev \
|
||||
libboost-serialization-dev libssl-dev zlib1g-dev python-setuptools
|
||||
libboost-serialization-dev libssl-dev zlib1g-dev python-setuptools \
|
||||
python-chardet
|
||||
|
||||
The names of the packages may vary depending on your OS / distro.
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# deluge/ui/common.py
|
||||
#
|
||||
# Copyright (C) Damien Churchill 2008 <damoxc@gmail.com>
|
||||
# Copyright (C) Andrew Resch 2009 <andrewresch@gmail.com>
|
||||
#
|
||||
# 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
|
||||
|
@ -32,9 +32,6 @@
|
|||
# statement from all source files in the program, then also delete it here.
|
||||
#
|
||||
|
||||
#
|
||||
|
||||
|
||||
import os
|
||||
try:
|
||||
from hashlib import sha1 as sha
|
||||
|
@ -46,6 +43,28 @@ from deluge import bencode
|
|||
from deluge.log import LOG as log
|
||||
import deluge.configmanager
|
||||
|
||||
def decode_string(s, encoding="utf8"):
|
||||
"""
|
||||
Decodes a string and re-encodes it in utf8. If it cannot decode using
|
||||
`:param:encoding` then it will try to detect the string encoding and
|
||||
decode it.
|
||||
|
||||
:param s: str to decode
|
||||
:param encoding: str, the encoding to use in the decoding
|
||||
|
||||
"""
|
||||
|
||||
try:
|
||||
s = s.decode(encoding).encode("utf8")
|
||||
except UnicodeDecodeError:
|
||||
try:
|
||||
import chardet
|
||||
except ImportError:
|
||||
s = s.decode(encoding, "replace").encode("utf8")
|
||||
else:
|
||||
s = s.decode(chardet.detect(s)["encoding"]).encode("utf8")
|
||||
return s
|
||||
|
||||
class TorrentInfo(object):
|
||||
def __init__(self, filename):
|
||||
# Get the torrent data from the torrent file
|
||||
|
@ -65,29 +84,31 @@ class TorrentInfo(object):
|
|||
elif "codepage" in self.__m_metadata:
|
||||
self.encoding = str(self.__m_metadata["codepage"])
|
||||
|
||||
self.__m_name = decode_string(self.__m_metadata["info"]["name"])
|
||||
|
||||
# Get list of files from torrent info
|
||||
self.__m_files = []
|
||||
if self.__m_metadata["info"].has_key("files"):
|
||||
prefix = ""
|
||||
if len(self.__m_metadata["info"]["files"]) > 1:
|
||||
prefix = self.__m_metadata["info"]["name"].decode(self.encoding, "replace").encode("utf8")
|
||||
prefix = self.__m_name
|
||||
|
||||
for f in self.__m_metadata["info"]["files"]:
|
||||
self.__m_files.append({
|
||||
'path': os.path.join(prefix, *f["path"]).decode(self.encoding, "replace").encode("utf8"),
|
||||
'path': decode_string(os.path.join(prefix, *f["path"])),
|
||||
'size': f["length"],
|
||||
'download': True
|
||||
})
|
||||
else:
|
||||
self.__m_files.append({
|
||||
"path": self.__m_metadata["info"]["name"].decode(self.encoding, "replace").encode("utf8"),
|
||||
"path": self.__m_name,
|
||||
"size": self.__m_metadata["info"]["length"],
|
||||
"download": True
|
||||
})
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self.__m_metadata["info"]["name"].decode(self.encoding, "replace").encode("utf8")
|
||||
return self.__m_name
|
||||
|
||||
@property
|
||||
def info_hash(self):
|
||||
|
|
Loading…
Add table
Reference in a new issue