root / pithos-macos / BytesSizeTransformer.m @ e5cbe7aa
History | View | Annotate | Download (3.2 kB)
1 | 2d9996a2 | Miltiadis Vasilakis | // |
---|---|---|---|
2 | 2d9996a2 | Miltiadis Vasilakis | // BytesSizeTransformer.m |
3 | 2d9996a2 | Miltiadis Vasilakis | // pithos-macos |
4 | 2d9996a2 | Miltiadis Vasilakis | // |
5 | 2d9996a2 | Miltiadis Vasilakis | // Copyright 2011 GRNET S.A. All rights reserved. |
6 | 2d9996a2 | Miltiadis Vasilakis | // |
7 | 2d9996a2 | Miltiadis Vasilakis | // Redistribution and use in source and binary forms, with or |
8 | 2d9996a2 | Miltiadis Vasilakis | // without modification, are permitted provided that the following |
9 | 2d9996a2 | Miltiadis Vasilakis | // conditions are met: |
10 | 2d9996a2 | Miltiadis Vasilakis | // |
11 | 2d9996a2 | Miltiadis Vasilakis | // 1. Redistributions of source code must retain the above |
12 | 2d9996a2 | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
13 | 2d9996a2 | Miltiadis Vasilakis | // disclaimer. |
14 | 2d9996a2 | Miltiadis Vasilakis | // |
15 | 2d9996a2 | Miltiadis Vasilakis | // 2. Redistributions in binary form must reproduce the above |
16 | 2d9996a2 | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
17 | 2d9996a2 | Miltiadis Vasilakis | // disclaimer in the documentation and/or other materials |
18 | 2d9996a2 | Miltiadis Vasilakis | // provided with the distribution. |
19 | 2d9996a2 | Miltiadis Vasilakis | // |
20 | 2d9996a2 | Miltiadis Vasilakis | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
21 | 2d9996a2 | Miltiadis Vasilakis | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
22 | 2d9996a2 | Miltiadis Vasilakis | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
23 | 2d9996a2 | Miltiadis Vasilakis | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
24 | 2d9996a2 | Miltiadis Vasilakis | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
25 | 2d9996a2 | Miltiadis Vasilakis | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
26 | 2d9996a2 | Miltiadis Vasilakis | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
27 | 2d9996a2 | Miltiadis Vasilakis | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
28 | 2d9996a2 | Miltiadis Vasilakis | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
29 | 2d9996a2 | Miltiadis Vasilakis | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
30 | 2d9996a2 | Miltiadis Vasilakis | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
31 | 2d9996a2 | Miltiadis Vasilakis | // POSSIBILITY OF SUCH DAMAGE. |
32 | 2d9996a2 | Miltiadis Vasilakis | // |
33 | 2d9996a2 | Miltiadis Vasilakis | // The views and conclusions contained in the software and |
34 | 2d9996a2 | Miltiadis Vasilakis | // documentation are those of the authors and should not be |
35 | 2d9996a2 | Miltiadis Vasilakis | // interpreted as representing official policies, either expressed |
36 | 2d9996a2 | Miltiadis Vasilakis | // or implied, of GRNET S.A. |
37 | 2d9996a2 | Miltiadis Vasilakis | |
38 | 2d9996a2 | Miltiadis Vasilakis | #import "BytesSizeTransformer.h" |
39 | 2d9996a2 | Miltiadis Vasilakis | |
40 | 2d9996a2 | Miltiadis Vasilakis | @implementation BytesSizeTransformer |
41 | 2d9996a2 | Miltiadis Vasilakis | |
42 | 2d9996a2 | Miltiadis Vasilakis | + (Class)transformedValueClass { |
43 | 2d9996a2 | Miltiadis Vasilakis | return [NSString class]; |
44 | 2d9996a2 | Miltiadis Vasilakis | } |
45 | 2d9996a2 | Miltiadis Vasilakis | |
46 | 2d9996a2 | Miltiadis Vasilakis | + (BOOL)allowsReverseTransformation { |
47 | 2d9996a2 | Miltiadis Vasilakis | return NO; |
48 | 2d9996a2 | Miltiadis Vasilakis | } |
49 | 2d9996a2 | Miltiadis Vasilakis | |
50 | 2d9996a2 | Miltiadis Vasilakis | - (id)transformedValue:(id)value { |
51 | 2d9996a2 | Miltiadis Vasilakis | if (value == nil) |
52 | 2d9996a2 | Miltiadis Vasilakis | return nil; |
53 | b6f55050 | Miltiadis Vasilakis | double bytes = [value unsignedIntegerValue] + 0.0; |
54 | b6f55050 | Miltiadis Vasilakis | if (bytes <= 999) { |
55 | b6f55050 | Miltiadis Vasilakis | return [NSString stringWithFormat:@"%d B", (int)bytes]; |
56 | b6f55050 | Miltiadis Vasilakis | } else if (bytes <= 999000) { |
57 | b6f55050 | Miltiadis Vasilakis | return [NSString stringWithFormat:@"%d KB", (int)ceil(bytes / 1000)]; |
58 | b6f55050 | Miltiadis Vasilakis | } else if (bytes <= 999900000) { |
59 | b6f55050 | Miltiadis Vasilakis | double megabytes = floor(bytes / 1000000); |
60 | b6f55050 | Miltiadis Vasilakis | double hundredkilobytes = ceil((bytes - megabytes * 1000000) / 100000); |
61 | b6f55050 | Miltiadis Vasilakis | if (hundredkilobytes == 10) { |
62 | b6f55050 | Miltiadis Vasilakis | megabytes++; |
63 | b6f55050 | Miltiadis Vasilakis | hundredkilobytes = 0; |
64 | b6f55050 | Miltiadis Vasilakis | } |
65 | b6f55050 | Miltiadis Vasilakis | if (hundredkilobytes == 0) { |
66 | b6f55050 | Miltiadis Vasilakis | return [NSString stringWithFormat:@"%d MB", (int)megabytes]; |
67 | b6f55050 | Miltiadis Vasilakis | } else { |
68 | b6f55050 | Miltiadis Vasilakis | return [NSString stringWithFormat:@"%d.%d MB", (int)megabytes, (int)hundredkilobytes]; |
69 | b6f55050 | Miltiadis Vasilakis | } |
70 | b6f55050 | Miltiadis Vasilakis | } else { |
71 | b6f55050 | Miltiadis Vasilakis | double gigabytes = floor(bytes / 1000000000); |
72 | b6f55050 | Miltiadis Vasilakis | double hundredmegabytes = ceil((bytes - gigabytes * 1000000000) / 100000000); |
73 | b6f55050 | Miltiadis Vasilakis | if (hundredmegabytes == 10) { |
74 | b6f55050 | Miltiadis Vasilakis | gigabytes++; |
75 | b6f55050 | Miltiadis Vasilakis | hundredmegabytes = 0; |
76 | b6f55050 | Miltiadis Vasilakis | } |
77 | b6f55050 | Miltiadis Vasilakis | if (hundredmegabytes == 0) { |
78 | b6f55050 | Miltiadis Vasilakis | return [NSString stringWithFormat:@"%d GB", (int)gigabytes]; |
79 | b6f55050 | Miltiadis Vasilakis | } else { |
80 | b6f55050 | Miltiadis Vasilakis | return [NSString stringWithFormat:@"%d.%d GB", (int)gigabytes, (int)hundredmegabytes]; |
81 | b6f55050 | Miltiadis Vasilakis | } |
82 | b6f55050 | Miltiadis Vasilakis | } |
83 | 2d9996a2 | Miltiadis Vasilakis | } |
84 | 2d9996a2 | Miltiadis Vasilakis | |
85 | 2d9996a2 | Miltiadis Vasilakis | + (void)initialize { |
86 | cb6abe72 | Miltiadis Vasilakis | [[self class] setValueTransformer:[self new] forName:@"BytesSizeTransformer"]; |
87 | 2d9996a2 | Miltiadis Vasilakis | } |
88 | 2d9996a2 | Miltiadis Vasilakis | |
89 | 2d9996a2 | Miltiadis Vasilakis | @end |