Index: utils/ofhttp/OFHTTP.m ================================================================== --- utils/ofhttp/OFHTTP.m +++ utils/ofhttp/OFHTTP.m @@ -64,10 +64,11 @@ size_t _URLIndex; int _errorCode; OFString *_outputPath, *_currentFileName; bool _continue, _force, _detectFileName, _detectFileNameRequest; bool _detectedFileName, _quiet, _verbose, _insecure, _ignoreStatus; + bool _useUnicode; OFStream *_body; of_http_request_method_t _method; OFMutableDictionary *_clientHeaders; OFHTTPClient *_HTTPClient; char *_buffer; @@ -575,10 +576,12 @@ } if (_insecure) _HTTPClient.allowsInsecureRedirects = true; + _useUnicode = ([OFLocale encoding] == OF_STRING_ENCODING_UTF_8); + [self performSelector: @selector(downloadNextURL) afterDelay: 0]; } - (void)client: (OFHTTPClient *)client @@ -626,12 +629,16 @@ key, object]; objc_autoreleasePoolPop(pool); } - if (!_quiet) - [of_stdout writeFormat: @"☇ %@", URL.string]; + if (!_quiet) { + if (_useUnicode) + [of_stdout writeFormat: @"☇ %@", URL.string]; + else + [of_stdout writeFormat: @"< %@", URL.string]; + } _length = 0; return true; } @@ -708,11 +715,14 @@ if (!_quiet) { OFString *lengthString = [headers objectForKey: @"Content-Length"]; OFString *type = [headers objectForKey: @"Content-Type"]; - [of_stdout writeFormat: @" ➜ %hd\n", statusCode]; + if (_useUnicode) + [of_stdout writeFormat: @" ➜ %hd\n", statusCode]; + else + [of_stdout writeFormat: @" -> %hd\n", statusCode]; if (type == nil) type = OF_LOCALIZED(@"type_unknown", @"unknown"); if (lengthString != nil) { @@ -961,11 +971,12 @@ } if (!_quiet) { _progressBar = [[ProgressBar alloc] initWithLength: _length - resumedFrom: _resumedFrom]; + resumedFrom: _resumedFrom + useUnicode: _useUnicode]; [_progressBar setReceived: _received]; [_progressBar draw]; } [_currentFileName release]; @@ -1024,12 +1035,16 @@ } clientHeaders = [[_clientHeaders mutableCopy] autorelease]; if (_detectFileName && !_detectedFileName) { - if (!_quiet) - [of_stdout writeFormat: @"⠒ %@", URL.string]; + if (!_quiet) { + if (_useUnicode) + [of_stdout writeFormat: @"⠒ %@", URL.string]; + else + [of_stdout writeFormat: @"? %@", URL.string]; + } request = [OFHTTPRequest requestWithURL: URL]; request.headers = clientHeaders; request.method = OF_HTTP_REQUEST_METHOD_HEAD; @@ -1068,12 +1083,16 @@ forKey: @"Range"]; } @catch (OFRetrieveItemAttributesFailedException *e) { } } - if (!_quiet) - [of_stdout writeFormat: @"⇣ %@", URL.string]; + if (!_quiet) { + if (_useUnicode) + [of_stdout writeFormat: @"⇣ %@", URL.string]; + else + [of_stdout writeFormat: @"< %@", URL.string]; + } request = [OFHTTPRequest requestWithURL: URL]; request.headers = clientHeaders; request.method = _method; Index: utils/ofhttp/ProgressBar.h ================================================================== --- utils/ofhttp/ProgressBar.h +++ utils/ofhttp/ProgressBar.h @@ -22,10 +22,11 @@ #define BPS_WINDOW_SIZE 10 @interface ProgressBar: OFObject { + bool _useUnicode; unsigned long long _received, _lastReceived, _length, _resumedFrom; OFDate *_startDate, *_lastReceivedDate; OFTimer *_drawTimer, *_BPSTimer; bool _stopped; float _BPS; @@ -33,11 +34,12 @@ float _BPSWindow[BPS_WINDOW_SIZE]; size_t _BPSWindowIndex, _BPSWindowLength; } - (instancetype)initWithLength: (unsigned long long)length - resumedFrom: (unsigned long long)resumedFrom; + resumedFrom: (unsigned long long)resumedFrom + useUnicode: (bool)useUnicode OF_DESIGNATED_INITIALIZER; - (void)setReceived: (unsigned long long)received; - (void)draw; - (void)calculateBPSAndETA; - (void)stop; @end Index: utils/ofhttp/ProgressBar.m ================================================================== --- utils/ofhttp/ProgressBar.m +++ utils/ofhttp/ProgressBar.m @@ -33,16 +33,18 @@ #define UPDATE_INTERVAL 0.1 @implementation ProgressBar - (instancetype)initWithLength: (unsigned long long)length resumedFrom: (unsigned long long)resumedFrom + useUnicode: (bool)useUnicode { self = [super init]; @try { void *pool = objc_autoreleasePoolPush(); + _useUnicode = useUnicode; _length = length; _resumedFrom = resumedFrom; _startDate = [[OFDate alloc] init]; _lastReceivedDate = [[OFDate alloc] init]; _drawTimer = [[OFTimer @@ -99,39 +101,63 @@ bars = (float)(_resumedFrom + _received) / (float)(_resumedFrom + _length) * barWidth; percent = (float)(_resumedFrom + _received) / (float)(_resumedFrom + _length) * 100; - [of_stdout writeString: @"\r ▕"]; - - for (size_t i = 0; i < (size_t)bars; i++) - [of_stdout writeString: @"█"]; - if (bars < barWidth) { - float rem = bars - truncf(bars); - - if (rem >= 0.875) - [of_stdout writeString: @"▉"]; - else if (rem >= 0.75) - [of_stdout writeString: @"▊"]; - else if (rem >= 0.625) - [of_stdout writeString: @"▋"]; - else if (rem >= 0.5) - [of_stdout writeString: @"▌"]; - else if (rem >= 0.375) - [of_stdout writeString: @"▍"]; - else if (rem >= 0.25) - [of_stdout writeString: @"▎"]; - else if (rem >= 0.125) - [of_stdout writeString: @"▏"]; - else - [of_stdout writeString: @" "]; - - for (size_t i = 0; i < barWidth - (size_t)bars - 1; i++) - [of_stdout writeString: @" "]; - } - - [of_stdout writeFormat: @"▏ %,6.2f%% ", percent]; + if (_useUnicode) { + [of_stdout writeString: @"\r ▕"]; + + for (size_t i = 0; i < (size_t)bars; i++) + [of_stdout writeString: @"█"]; + if (bars < barWidth) { + float rem = bars - truncf(bars); + + if (rem >= 0.875) + [of_stdout writeString: @"▉"]; + else if (rem >= 0.75) + [of_stdout writeString: @"▊"]; + else if (rem >= 0.625) + [of_stdout writeString: @"▋"]; + else if (rem >= 0.5) + [of_stdout writeString: @"▌"]; + else if (rem >= 0.375) + [of_stdout writeString: @"▍"]; + else if (rem >= 0.25) + [of_stdout writeString: @"▎"]; + else if (rem >= 0.125) + [of_stdout writeString: @"▏"]; + else + [of_stdout writeString: @" "]; + + for (size_t i = 0; i < barWidth - (size_t)bars - 1; i++) + [of_stdout writeString: @" "]; + } + + [of_stdout writeFormat: @"▏ %,6.2f%% ", percent]; + } else { + [of_stdout writeString: @"\r ["]; + + for (size_t i = 0; i < (size_t)bars; i++) + [of_stdout writeString: @"#"]; + if (bars < barWidth) { + float rem = bars - truncf(bars); + + if (rem >= 0.75) + [of_stdout writeString: @"O"]; + else if (rem >= 0.5) + [of_stdout writeString: @"o"]; + else if (rem >= 0.25) + [of_stdout writeString: @"."]; + else + [of_stdout writeString: @" "]; + + for (size_t i = 0; i < barWidth - (size_t)bars - 1; i++) + [of_stdout writeString: @" "]; + } + + [of_stdout writeFormat: @"] %,6.2f%% ", percent]; + } if (percent == 100) { double timeInterval = -_startDate.timeIntervalSinceNow; _BPS = (float)_received / (float)timeInterval;