[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Mldonkey-commits] mldonkey distrib/ChangeLog src/networks/bittorr...
From: |
mldonkey-commits |
Subject: |
[Mldonkey-commits] mldonkey distrib/ChangeLog src/networks/bittorr... |
Date: |
Sat, 01 Sep 2007 13:51:23 +0000 |
CVSROOT: /sources/mldonkey
Module name: mldonkey
Changes by: spiralvoice <spiralvoice> 07/09/01 13:51:23
Modified files:
distrib : ChangeLog
src/networks/bittorrent: bTTorrent.ml
Log message:
patch #6174
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/mldonkey/distrib/ChangeLog?cvsroot=mldonkey&r1=1.1315&r2=1.1316
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/networks/bittorrent/bTTorrent.ml?cvsroot=mldonkey&r1=1.14&r2=1.15
Patches:
Index: distrib/ChangeLog
===================================================================
RCS file: /sources/mldonkey/mldonkey/distrib/ChangeLog,v
retrieving revision 1.1315
retrieving revision 1.1316
diff -u -b -r1.1315 -r1.1316
--- distrib/ChangeLog 31 Aug 2007 19:48:09 -0000 1.1315
+++ distrib/ChangeLog 1 Sep 2007 13:51:23 -0000 1.1316
@@ -14,6 +14,10 @@
ChangeLog
=========
+2007/09/01
+6174: BT: Encode non-UTF8 filenames using "encoding" or "codepage" data
+ from .torrent if present
+
2007/08/31
6175: Yet another patch for share_scan_interval
- new default 30 minutes for newly created ini files
Index: src/networks/bittorrent/bTTorrent.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/networks/bittorrent/bTTorrent.ml,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- src/networks/bittorrent/bTTorrent.ml 25 Jul 2007 19:25:48 -0000
1.14
+++ src/networks/bittorrent/bTTorrent.ml 1 Sep 2007 13:51:23 -0000
1.15
@@ -78,12 +78,14 @@
let file_creation_date = ref zero in
let file_modified_by = ref "" in
let file_encoding = ref "" in
+ let file_codepage = ref zero in
let file_ed2k_hash = ref "" in
let file_is_private = ref zero in
let file_aps = ref (List []) in
let file_dht_backup_enable = ref zero in
let length = ref zero in
let file_files = ref [] in
+ let file_files_utf8 = ref [] in
let parse_files files =
let current_pos = ref zero in
@@ -91,6 +93,7 @@
match v with
Dictionary list ->
let current_file = ref "" in
+ let current_file_utf8 = ref "" in
let current_length = ref zero in
let length_set = ref false in
@@ -108,13 +111,11 @@
List.iter (fun (key, value) ->
match key, value with
String "path", List path ->
- if !current_file = "" then begin
current_file := path_list_to_string path;
if !verbose_msg_servers then
lprintf_nl "[BT] Parsed a new path: [%s]" !current_file
- end
| String "path.utf-8", List path_utf8 ->
- current_file := path_list_to_string path_utf8;
+ current_file_utf8 := path_list_to_string path_utf8;
if !verbose_msg_servers then
lprintf_nl "[BT] Parsed path.utf-8: [%s]" !current_file
| String "length", Int n ->
@@ -129,8 +130,10 @@
) list;
assert (!length_set);
- assert (!current_file <> "");
+ assert (!current_file <> "" || !current_file_utf8 <> "");
file_files := (!current_file, !current_length) :: !file_files;
+ if !current_file_utf8 <> "" then
+ file_files_utf8 := (!current_file_utf8, !current_length) ::
!file_files_utf8;
current_pos := !current_pos ++ !current_length
| _ -> assert false
@@ -239,6 +242,8 @@
file_modified_by := modified_by
| String "encoding", String encoding ->
file_encoding := encoding
+ | String "codepage", Int codepage ->
+ file_codepage := codepage
| String "torrent filename", String torrent_filename ->
file_torrent_filename := torrent_filename
| String "nodes", nodes -> ()
@@ -271,6 +276,10 @@
| _ -> assert false
end;
+(* Convert codepage number to Charset name, for example: 936 -> CP936 *)
+ if !file_codepage <> 0L && !file_encoding = "" then
+ file_encoding := "CP" ^ (Int64.to_string !file_codepage);
+
let real_file_name =
match !file_name_utf8 with
| None -> Charset.safe_convert !file_encoding !file_name
@@ -289,6 +298,21 @@
Sha1.direct_of_string s
) in
+(* Only at this point we know if the torrent contains an "encoding" field
+ If UTF8 filenames were found, use them. If not and we have a charset
+ value used for encoding, convert non-UTF8 filenames to UTF8 ones. *)
+ if !file_files_utf8 <> [] then
+ file_files := !file_files_utf8
+ else
+ if !file_encoding <> "" then
+ begin
+ let file_files_encoded = ref [] in
+ List.iter (fun (name, length) ->
+ file_files_encoded := [(Charset.safe_convert !file_encoding name),
length] @ !file_files_encoded
+ ) !file_files;
+ file_files := !file_files_encoded
+ end;
+
(match List.length !file_files with
| 0 -> ()
| 1 -> file_name := (fst (List.hd !file_files));
- [Mldonkey-commits] mldonkey distrib/ChangeLog src/networks/bittorr...,
mldonkey-commits <=