summaryrefslogtreecommitdiff
blob: 851484fd0bbf7bcb8759288eab5ac4e862e82515 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
* Copyright (C) 2010 Robin H.Johnson, Ovechko Kostyantyn <fastinetserver@gmail.com>.
*
* Project: IDFetch.
* Developer: Ovechko Kostyantyn Olexandrovich (Kharkiv State Technical University of Construction and Architecture, Ukraine).
* Mentor: Robin H. Johnson (Gentoo Linux: Developer, Trustee & Infrastructure Lead).
* Mentoring organization: Gentoo Linux.
* Sponsored by GSOC 2010.
*
* This file is part of Segget.
*
* Segget is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Segget is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Segget; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

#include "utils.h"

ulong time_left_since(timeval from_time){
	try{
		timeval now_time;
		gettimeofday(&now_time,NULL);
		ulong timeleft=(now_time.tv_sec-from_time.tv_sec)*1000+(now_time.tv_usec-from_time.tv_usec)/1000;
		if (timeleft<1)
			timeleft=1;
		return timeleft;
	}catch(...){
		error_log("Error in utils.cpp: time_left_from()");
		return 1;
	}
}

string secsToString(ulong secs){
	string result="";
	ulong mins=0;
	ulong hours=0;
	ulong days=0;
	ldiv_t time_div_spliter;
	if (secs>60){
		time_div_spliter = ldiv (secs,60);
		secs=time_div_spliter.rem;
		if (time_div_spliter.quot>60){
			time_div_spliter = ldiv (time_div_spliter.quot,60);
			mins=time_div_spliter.rem;
			if (time_div_spliter.quot>24){
				time_div_spliter = ldiv (time_div_spliter.quot,24);
				hours=time_div_spliter.rem;
				days=time_div_spliter.quot;
				if (days>999) return ("inf");
				result=result+field(" ", days,3)+"d";
			}else{
				hours=time_div_spliter.quot;
			}
			result=result+field(" ", hours,2)+"h";
		}else{
			mins=time_div_spliter.quot;
		}
		result=result+field(" ", mins,2)+"m";
	}
	result=result+field(" ", secs,2)+"s";

	return result;
}

string speedToString(ulong dld_bytes, ulong time_left){
	try{
		string speed_str;
		if (time_left==0){
			speed_str="N/a";
		}else{
			ulong speed=(dld_bytes*1000/time_left);
			string suffix;
			if (speed>1500){
				if (speed>1500000){
					suffix=" MB/s";
					speed=speed/1000000;
				}else{
					suffix=" KB/s";
					speed=speed/1000;
				}
			}else{
				suffix="  B/s";
			}
			speed_str=field("",speed,4)+suffix;
		}
		return speed_str;
	}catch(...){
		error_log("Error in utils.cpp: speedToString()");
	}
	return "";
}

string speedToString(ulong speed){
	try{
		string speed_str;
		string suffix;
		if (speed>1500){
			if (speed>1500000){
				suffix=" MB/s";
				speed=speed/1000000;
			}else{
				suffix=" KB/s";
				speed=speed/1000;
			}
		}else{
			suffix="  B/s";
		}
		speed_str=field("",speed,4)+suffix;
		return speed_str;
	}catch(...){
		error_log("Error in utils.cpp: speedToString()");
	}
	return "";
}