1# -*- coding: utf-8 -*-
2#
3# Copyright (C) 2007, 2008 Andrew Resch <andrewresch@gmail.com>
4#
5# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with
6# the additional special exception to link portions of this program with the OpenSSL library.
7# See LICENSE for more details.
8#
9
10from __future__ import unicode_literals
11
12from deluge.common import fdate, fsize, fspeed, ftime
13from deluge.ui.common import TRACKER_STATUS_TRANSLATION
14
15
16def ftotal_sized(first, second):
17    return '%s (%s)' % (fsize(first, shortform=True), fsize(second, shortform=True))
18
19
20def fratio(value):
21    return ('%.3f' % value).rstrip('0').rstrip('.') if value > 0 else '∞'
22
23
24def fpcnt(value, state, message):
25    state_i18n = _(state)
26    if state not in ('Error', 'Seeding') and value < 100:
27        percent = '{:.2f}'.format(value).rstrip('0').rstrip('.')
28        return _('{state} {percent}%').format(state=state_i18n, percent=percent)
29    elif state == 'Error':
30        return _('{state}: {err_msg}').format(state=state_i18n, err_msg=message)
31    else:
32        return state_i18n
33
34
35def fspeed_max(value, max_value=-1):
36    value = fspeed(value, shortform=True)
37    return '%s (%s %s)' % (value, max_value, _('K/s')) if max_value > -1 else value
38
39
40def fdate_or_never(value):
41    """Display value as date, eg 05/05/08 or Never"""
42    return fdate(value, date_only=True) if value > 0 else _('Never')
43
44
45def fdate_or_dash(value):
46    """Display value as date, eg 05/05/08 or dash"""
47    if value > 0.0:
48        return fdate(value)
49    else:
50        return '-'
51
52
53def ftime_or_dash(value):
54    """Display value as time, eg 2h 30m or dash"""
55    if value > 0:
56        return ftime(value)
57    elif value == 0:
58        return '-'
59    else:
60        return '∞'
61
62
63def fseed_rank_or_dash(seed_rank, seeding_time):
64    """Display value if seeding otherwise dash"""
65
66    if seeding_time > 0:
67        if seed_rank >= 1000:
68            return '%i k' % (seed_rank // 1000)
69        else:
70            return str(seed_rank)
71    else:
72        return '-'
73
74
75def fpieces_num_size(num_pieces, piece_size):
76    return '%s (%s)' % (num_pieces, fsize(piece_size, precision=0))
77
78
79def fcount(value):
80    return '%s' % len(value)
81
82
83def ftranslate(text):
84    if text in TRACKER_STATUS_TRANSLATION:
85        text = _(text)
86    elif text:
87        for status in TRACKER_STATUS_TRANSLATION:
88            if status in text:
89                text = text.replace(status, _(status))
90                break
91    return text
92
93
94def fyes_no(value):
95    """Return Yes or No to bool value"""
96    return _('Yes') if value else _('No')
97