openall_time_applet 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/bin/openall_time_applet.rb +0 -2
- data/classes/connection.rb +1 -5
- data/conf/db_schema.rb +0 -2
- data/gfx/icon_time.png +0 -0
- data/gfx/icon_time_orig.png +0 -0
- data/glade/win_sync_overview.glade +139 -0
- data/gui/trayicon.rb +3 -3
- data/gui/win_preferences.rb +1 -0
- data/gui/win_sync_overview.rb +86 -0
- data/lib/openall_time_applet.rb +24 -3
- data/locales/da_DK/LC_MESSAGES/default.mo +0 -0
- data/locales/da_DK/LC_MESSAGES/default.po +115 -35
- data/models/timelog.rb +7 -16
- data/openall_time_applet.gemspec +5 -2
- metadata +6 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
data/bin/openall_time_applet.rb
CHANGED
data/classes/connection.rb
CHANGED
@@ -9,8 +9,7 @@ class Openall_time_applet::Connection
|
|
9
9
|
:port => @args[:port],
|
10
10
|
:follow_redirects => false,
|
11
11
|
:ssl => Knj::Strings.yn_str(@args[:ssl], true, false),
|
12
|
-
:debug => false
|
13
|
-
:encoding_gzip => false
|
12
|
+
:debug => false
|
14
13
|
)
|
15
14
|
|
16
15
|
self.login
|
@@ -21,14 +20,11 @@ class Openall_time_applet::Connection
|
|
21
20
|
@http.post_multipart("index.php?c=Auth&m=validateLogin", {"username" => @args[:username], "password" => @args[:password]})
|
22
21
|
|
23
22
|
#Verify login by reading dashboard HTML.
|
24
|
-
@http.reconnect
|
25
23
|
res = @http.get("index.php?c=Dashboard")
|
26
24
|
raise _("Could not log in.") if !res.body.match(/<ul id="webticker" >/)
|
27
25
|
end
|
28
26
|
|
29
27
|
def request(args)
|
30
|
-
@http.reconnect
|
31
|
-
|
32
28
|
#Possible to give a string instead of hash to do it simple.
|
33
29
|
args = {:url => "?c=Jsonapi&m=#{args}"} if args.is_a?(String) or args.is_a?(Symbol)
|
34
30
|
args[:url] = "?c=Jsonapi&m=#{args[:method]}" if args[:method] and !args[:url]
|
data/conf/db_schema.rb
CHANGED
@@ -32,7 +32,6 @@ Openall_time_applet::DB_SCHEMA = {
|
|
32
32
|
"Timelog" => {
|
33
33
|
"columns" => [
|
34
34
|
{"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
|
35
|
-
{"name" => "openall_uid", "type" => "int"},
|
36
35
|
{"name" => "task_id", "type" => "int"},
|
37
36
|
{"name" => "time", "type" => "int"},
|
38
37
|
{"name" => "time_transport", "type" => "int"},
|
@@ -41,7 +40,6 @@ Openall_time_applet::DB_SCHEMA = {
|
|
41
40
|
{"name" => "sync_last", "type" => "datetime"}
|
42
41
|
],
|
43
42
|
"indexes" => [
|
44
|
-
"openall_uid",
|
45
43
|
"task_id"
|
46
44
|
]
|
47
45
|
},
|
data/gfx/icon_time.png
CHANGED
Binary file
|
Binary file
|
@@ -0,0 +1,139 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<interface>
|
3
|
+
<requires lib="gtk+" version="2.24"/>
|
4
|
+
<!-- interface-naming-policy project-wide -->
|
5
|
+
<object class="GtkWindow" id="window">
|
6
|
+
<property name="can_focus">False</property>
|
7
|
+
<property name="title" translatable="yes">Overview of sync</property>
|
8
|
+
<property name="window_position">center</property>
|
9
|
+
<property name="default_width">640</property>
|
10
|
+
<child>
|
11
|
+
<object class="GtkVBox" id="vbox1">
|
12
|
+
<property name="visible">True</property>
|
13
|
+
<property name="can_focus">False</property>
|
14
|
+
<child>
|
15
|
+
<object class="GtkFrame" id="frame1">
|
16
|
+
<property name="visible">True</property>
|
17
|
+
<property name="can_focus">False</property>
|
18
|
+
<property name="label_xalign">0</property>
|
19
|
+
<property name="shadow_type">none</property>
|
20
|
+
<child>
|
21
|
+
<object class="GtkAlignment" id="alignment1">
|
22
|
+
<property name="visible">True</property>
|
23
|
+
<property name="can_focus">False</property>
|
24
|
+
<property name="left_padding">12</property>
|
25
|
+
<child>
|
26
|
+
<object class="GtkVBox" id="vbox2">
|
27
|
+
<property name="visible">True</property>
|
28
|
+
<property name="can_focus">False</property>
|
29
|
+
<property name="spacing">3</property>
|
30
|
+
<child>
|
31
|
+
<object class="GtkTable" id="tableTimelogs">
|
32
|
+
<property name="visible">True</property>
|
33
|
+
<property name="can_focus">False</property>
|
34
|
+
<property name="n_columns">3</property>
|
35
|
+
<child>
|
36
|
+
<object class="GtkLabel" id="label3">
|
37
|
+
<property name="visible">True</property>
|
38
|
+
<property name="can_focus">False</property>
|
39
|
+
<property name="xalign">0</property>
|
40
|
+
<property name="label" translatable="yes"><b>Timelog</b></property>
|
41
|
+
<property name="use_markup">True</property>
|
42
|
+
</object>
|
43
|
+
</child>
|
44
|
+
<child>
|
45
|
+
<object class="GtkLabel" id="label4">
|
46
|
+
<property name="visible">True</property>
|
47
|
+
<property name="can_focus">False</property>
|
48
|
+
<property name="xalign">0</property>
|
49
|
+
<property name="label" translatable="yes"><b>Logged time</b></property>
|
50
|
+
<property name="use_markup">True</property>
|
51
|
+
</object>
|
52
|
+
<packing>
|
53
|
+
<property name="left_attach">1</property>
|
54
|
+
<property name="right_attach">2</property>
|
55
|
+
</packing>
|
56
|
+
</child>
|
57
|
+
<child>
|
58
|
+
<object class="GtkLabel" id="label5">
|
59
|
+
<property name="visible">True</property>
|
60
|
+
<property name="can_focus">False</property>
|
61
|
+
<property name="xalign">0</property>
|
62
|
+
<property name="label" translatable="yes"><b>Sync. as time</b></property>
|
63
|
+
<property name="use_markup">True</property>
|
64
|
+
</object>
|
65
|
+
<packing>
|
66
|
+
<property name="left_attach">2</property>
|
67
|
+
<property name="right_attach">3</property>
|
68
|
+
</packing>
|
69
|
+
</child>
|
70
|
+
</object>
|
71
|
+
<packing>
|
72
|
+
<property name="expand">True</property>
|
73
|
+
<property name="fill">True</property>
|
74
|
+
<property name="position">0</property>
|
75
|
+
</packing>
|
76
|
+
</child>
|
77
|
+
<child>
|
78
|
+
<object class="GtkHButtonBox" id="hbuttonbox1">
|
79
|
+
<property name="visible">True</property>
|
80
|
+
<property name="can_focus">False</property>
|
81
|
+
<property name="spacing">3</property>
|
82
|
+
<property name="layout_style">end</property>
|
83
|
+
<child>
|
84
|
+
<object class="GtkButton" id="btnSync">
|
85
|
+
<property name="label">gtk-harddisk</property>
|
86
|
+
<property name="visible">True</property>
|
87
|
+
<property name="can_focus">True</property>
|
88
|
+
<property name="receives_default">True</property>
|
89
|
+
<property name="use_action_appearance">False</property>
|
90
|
+
<property name="use_stock">True</property>
|
91
|
+
<signal name="clicked" handler="on_btnSync_clicked" swapped="no"/>
|
92
|
+
</object>
|
93
|
+
<packing>
|
94
|
+
<property name="expand">False</property>
|
95
|
+
<property name="fill">False</property>
|
96
|
+
<property name="position">0</property>
|
97
|
+
</packing>
|
98
|
+
</child>
|
99
|
+
</object>
|
100
|
+
<packing>
|
101
|
+
<property name="expand">True</property>
|
102
|
+
<property name="fill">True</property>
|
103
|
+
<property name="position">1</property>
|
104
|
+
</packing>
|
105
|
+
</child>
|
106
|
+
</object>
|
107
|
+
</child>
|
108
|
+
</object>
|
109
|
+
</child>
|
110
|
+
<child type="label">
|
111
|
+
<object class="GtkLabel" id="label2">
|
112
|
+
<property name="visible">True</property>
|
113
|
+
<property name="can_focus">False</property>
|
114
|
+
<property name="label" translatable="yes"><b>Sync with OpenAll</b></property>
|
115
|
+
<property name="use_markup">True</property>
|
116
|
+
</object>
|
117
|
+
</child>
|
118
|
+
</object>
|
119
|
+
<packing>
|
120
|
+
<property name="expand">False</property>
|
121
|
+
<property name="fill">True</property>
|
122
|
+
<property name="position">0</property>
|
123
|
+
</packing>
|
124
|
+
</child>
|
125
|
+
<child>
|
126
|
+
<object class="GtkLabel" id="label1">
|
127
|
+
<property name="visible">True</property>
|
128
|
+
<property name="can_focus">False</property>
|
129
|
+
</object>
|
130
|
+
<packing>
|
131
|
+
<property name="expand">True</property>
|
132
|
+
<property name="fill">True</property>
|
133
|
+
<property name="position">1</property>
|
134
|
+
</packing>
|
135
|
+
</child>
|
136
|
+
</object>
|
137
|
+
</child>
|
138
|
+
</object>
|
139
|
+
</interface>
|
data/gui/trayicon.rb
CHANGED
@@ -33,7 +33,6 @@ class Openall_time_applet::Gui::Trayicon
|
|
33
33
|
#Calculate minutes tracked and generate variables.
|
34
34
|
secs = Time.now.to_i - @args[:oata].timelog_active_time.to_i
|
35
35
|
mins = (secs.to_f / 60.0)
|
36
|
-
mins = 1 if mins < 1
|
37
36
|
|
38
37
|
if mins >= 60
|
39
38
|
hours = mins / 60
|
@@ -54,7 +53,7 @@ class Openall_time_applet::Gui::Trayicon
|
|
54
53
|
|
55
54
|
#Generate image.
|
56
55
|
require "RMagick"
|
57
|
-
canvas = Magick::Image.new(53,
|
56
|
+
canvas = Magick::Image.new(53, 53){
|
58
57
|
self.background_color = "transparent"
|
59
58
|
self.format = "png"
|
60
59
|
}
|
@@ -136,7 +135,8 @@ class Openall_time_applet::Gui::Trayicon
|
|
136
135
|
|
137
136
|
#If tracking is active, then show how many seconds has been tracked until now in menu as an item.
|
138
137
|
secs = Time.now.to_i - @args[:oata].timelog_active_time.to_i
|
139
|
-
|
138
|
+
mins = (secs.to_f / 60.0).round(0)
|
139
|
+
label = Gtk::MenuItem.new(sprintf(_("%s minutes"), mins))
|
140
140
|
menu.append(label)
|
141
141
|
end
|
142
142
|
|
data/gui/win_preferences.rb
CHANGED
@@ -60,6 +60,7 @@ class Openall_time_applet::Gui::Win_preferences
|
|
60
60
|
def on_btnTraySave_clicked
|
61
61
|
color_key = @tray_colors.keys[@gui["cbTrayTextColor"].sel["active"]]
|
62
62
|
Knj::Opts.set("tray_text_color", color_key)
|
63
|
+
@args[:oata].ti.update_icon if @args[:oata].ti
|
63
64
|
Knj::Gtk2.msgbox(_("The tray-settings was saved."), "info")
|
64
65
|
end
|
65
66
|
|
@@ -0,0 +1,86 @@
|
|
1
|
+
#This class handels the window that will be shown before the actual sync takes place.
|
2
|
+
class Openall_time_applet::Gui::Win_sync_overview
|
3
|
+
def initialize(args)
|
4
|
+
@args = args
|
5
|
+
|
6
|
+
@gui = Gtk::Builder.new.add("../glade/win_sync_overview.glade")
|
7
|
+
@gui.translate
|
8
|
+
@gui.connect_signals{|h|method(h)}
|
9
|
+
@gui["btnSync"].label = _("Synchronize")
|
10
|
+
|
11
|
+
#This hash holds the text-widgets which time, which are used to update the timelogs later.
|
12
|
+
@sync_time_text_widgets = {}
|
13
|
+
|
14
|
+
rowc = 1
|
15
|
+
@args[:oata].ob.list(:Timelog, {"sync_need" => 1, "task_id_not" => 0}) do |timelog|
|
16
|
+
#Read time and transport from timelog.
|
17
|
+
time = timelog[:time].to_i
|
18
|
+
transport = timelog[:time_transport].to_i
|
19
|
+
|
20
|
+
#If transport is logged, then the work if offsite. It should be rounded up by 30 min. Else 15 min. round up.
|
21
|
+
if transport > 0
|
22
|
+
roundup = 1800
|
23
|
+
else
|
24
|
+
roundup = 900
|
25
|
+
end
|
26
|
+
|
27
|
+
#Do the actual counting.
|
28
|
+
count_rounded_time = 0
|
29
|
+
loop do
|
30
|
+
break if count_rounded_time >= time
|
31
|
+
count_rounded_time += roundup
|
32
|
+
end
|
33
|
+
|
34
|
+
#Spawn widgets.
|
35
|
+
timelog_label = Gtk::Label.new(timelog[:descr])
|
36
|
+
timelog_label.xalign = 0
|
37
|
+
timelog_label.selectable = true
|
38
|
+
|
39
|
+
logged_time_label = Gtk::Label.new(Knj::Strings.secs_to_human_time_str(timelog[:time]))
|
40
|
+
logged_time_label.xalign = 0
|
41
|
+
logged_time_label.selectable = true
|
42
|
+
|
43
|
+
sync_time_text = Gtk::Entry.new
|
44
|
+
sync_time_text.text = Knj::Strings.secs_to_human_time_str(count_rounded_time)
|
45
|
+
@sync_time_text_widgets[timelog.id] = sync_time_text
|
46
|
+
|
47
|
+
#Attach widgets in table.
|
48
|
+
@gui["tableTimelogs"].attach(timelog_label, 0, 1, rowc, rowc + 1)
|
49
|
+
@gui["tableTimelogs"].attach(logged_time_label, 1, 2, rowc, rowc + 1)
|
50
|
+
@gui["tableTimelogs"].attach(sync_time_text, 2, 3, rowc, rowc + 1)
|
51
|
+
|
52
|
+
rowc += 1
|
53
|
+
end
|
54
|
+
|
55
|
+
if rowc == 1
|
56
|
+
#Show error-message and destroy the window, if no timelogs was to be synced.
|
57
|
+
Knj::Gtk2.msgbox(_("There is nothing to sync at this time."))
|
58
|
+
@gui["window"].destroy
|
59
|
+
else
|
60
|
+
#...else show the window.
|
61
|
+
@gui["window"].show_all
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def on_btnSync_clicked
|
66
|
+
begin
|
67
|
+
#Go through the shown timelogs and update their time to the entered and rounded time.
|
68
|
+
@sync_time_text_widgets.each do |timelog_id, sync_time_text|
|
69
|
+
timelog = @args[:oata].ob.get(:Timelog, timelog_id)
|
70
|
+
secs = Knj::Strings.human_time_str_to_secs(sync_time_text.text)
|
71
|
+
if !Knj::Php.is_numeric(secs)
|
72
|
+
raise sprintf(_("Time was not numeric for: '%s'."), timelog[:descr])
|
73
|
+
end
|
74
|
+
|
75
|
+
#Update the time so that is what will be synchronized.
|
76
|
+
timelog[:time] = secs
|
77
|
+
end
|
78
|
+
|
79
|
+
#Destroy this window and start syncing for real.
|
80
|
+
@gui["window"].destroy
|
81
|
+
@args[:oata].sync_real
|
82
|
+
rescue => e
|
83
|
+
Knj::Gtk2.msgbox(Knj::Errors.error_str(e))
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
data/lib/openall_time_applet.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
#Support for libs loaded through RubyGems.
|
1
2
|
require "rubygems"
|
2
3
|
|
4
|
+
#For secs-to-human-string (MySQL-format), model-framework, database-framework, options-framework, date-framework and more.
|
3
5
|
if ENV["HOME"] == "/home/kaspernj" and File.exists?("/home/kaspernj/Dev/Ruby/knjrbfw")
|
4
6
|
#For development.
|
5
7
|
require "/home/kaspernj/Dev/Ruby/knjrbfw/lib/knjrbfw"
|
@@ -12,11 +14,19 @@ require "sqlite3"
|
|
12
14
|
require "gettext"
|
13
15
|
require "base64"
|
14
16
|
|
17
|
+
#For msgbox and translation of windows.
|
15
18
|
require "knj/gtk2"
|
19
|
+
|
20
|
+
#For easy initialization, getting and settings of values on comboboxes.
|
16
21
|
require "knj/gtk2_cb"
|
22
|
+
|
23
|
+
#For easy initialization, getting and settings of values on treeviews.
|
17
24
|
require "knj/gtk2_tv"
|
25
|
+
|
26
|
+
#For easy making status-windows with progressbar.
|
18
27
|
require "knj/gtk2_statuswindow"
|
19
28
|
|
29
|
+
#The base class of the applet. Spawns all windows, holds subclasses for models and gui, holds models objects and holds database-objects.
|
20
30
|
class Openall_time_applet
|
21
31
|
#Shortcut to start the application. Used by the Ubuntu-package.
|
22
32
|
def self.exec
|
@@ -58,7 +68,7 @@ class Openall_time_applet
|
|
58
68
|
end
|
59
69
|
|
60
70
|
#Various readable variables.
|
61
|
-
attr_reader :db, :ob, :timelog_active, :timelog_active_time
|
71
|
+
attr_reader :db, :ob, :ti, :timelog_active, :timelog_active_time
|
62
72
|
attr_accessor :reminder_next
|
63
73
|
|
64
74
|
#Config controlling paths and more.
|
@@ -79,6 +89,9 @@ class Openall_time_applet
|
|
79
89
|
:index_append_table_name => true
|
80
90
|
)
|
81
91
|
|
92
|
+
#Update to latest db-revision.
|
93
|
+
self.update_db
|
94
|
+
|
82
95
|
#Models-handeler.
|
83
96
|
@ob = Knj::Objects.new(
|
84
97
|
:datarow => true,
|
@@ -97,6 +110,9 @@ class Openall_time_applet
|
|
97
110
|
#Set crash-operation to save tracked time instead of loosing it.
|
98
111
|
Kernel.at_exit(&self.method(:destroy))
|
99
112
|
|
113
|
+
#Spawn tray-icon.
|
114
|
+
self.spawn_trayicon
|
115
|
+
|
100
116
|
#Start reminder.
|
101
117
|
self.reminding
|
102
118
|
end
|
@@ -199,8 +215,13 @@ class Openall_time_applet
|
|
199
215
|
@ob.static(:Timelog, :push_time_updates, {:oata => self})
|
200
216
|
end
|
201
217
|
|
202
|
-
#
|
218
|
+
#Shows the sync overview, which must be seen before the actual sync.
|
203
219
|
def sync
|
220
|
+
Openall_time_applet::Gui::Win_sync_overview.new(:oata => self)
|
221
|
+
end
|
222
|
+
|
223
|
+
#Refreshes task-cache, create missing worktime from timelogs and push tracked time to timelogs. Shows a status-window while doing so.
|
224
|
+
def sync_real
|
204
225
|
sw = Knj::Gtk2::StatusWindow.new
|
205
226
|
|
206
227
|
if @timelog_active
|
@@ -232,7 +253,7 @@ class Openall_time_applet
|
|
232
253
|
rescue => e
|
233
254
|
Knj::Gtk2.msgbox("msg" => Knj::Errors.error_str(e), "type" => "warning", "title" => _("Error"), "run" => false)
|
234
255
|
ensure
|
235
|
-
sw.destroy
|
256
|
+
sw.destroy if sw
|
236
257
|
self.timelog_active = timelog_active if timelog_active
|
237
258
|
end
|
238
259
|
end
|
Binary file
|
@@ -1,8 +1,8 @@
|
|
1
1
|
msgid ""
|
2
2
|
msgstr ""
|
3
3
|
"Project-Id-Version: Openall_time_applet\n"
|
4
|
-
"POT-Creation-Date: 2012-05-
|
5
|
-
"PO-Revision-Date: 2012-05-
|
4
|
+
"POT-Creation-Date: 2012-05-25 10:56+0100\n"
|
5
|
+
"PO-Revision-Date: 2012-05-25 10:58+0100\n"
|
6
6
|
"Last-Translator: Kasper Johansen <k@spernj.org>\n"
|
7
7
|
"Language-Team: Kasper Johansen <k@spernj.org>\n"
|
8
8
|
"Language: \n"
|
@@ -16,15 +16,15 @@ msgstr ""
|
|
16
16
|
"X-Poedit-SourceCharset: utf-8\n"
|
17
17
|
"X-Poedit-SearchPath-0: .\n"
|
18
18
|
|
19
|
-
#: classes/connection.rb:
|
19
|
+
#: classes/connection.rb:24
|
20
20
|
msgid "Could not log in."
|
21
21
|
msgstr "Kunne ikke logge ind."
|
22
22
|
|
23
|
-
#: classes/connection.rb:
|
23
|
+
#: classes/connection.rb:39
|
24
24
|
msgid "Empty body returned from OpenAll."
|
25
25
|
msgstr "Tom body returneret fra OpenAll."
|
26
26
|
|
27
|
-
#: classes/connection.rb:
|
27
|
+
#: classes/connection.rb:45
|
28
28
|
msgid "Could not parse JSON from: %s"
|
29
29
|
msgstr "Kunne ikke oversætte JSON fra: %s"
|
30
30
|
|
@@ -56,29 +56,29 @@ msgstr "Lørday"
|
|
56
56
|
msgid "Sunday"
|
57
57
|
msgstr "Søndag"
|
58
58
|
|
59
|
-
#: gui/trayicon.rb:
|
59
|
+
#: gui/trayicon.rb:84
|
60
60
|
msgid "New timelog"
|
61
61
|
msgstr "Ny tidslog"
|
62
62
|
|
63
|
-
#: gui/trayicon.rb:
|
63
|
+
#: gui/trayicon.rb:88
|
64
64
|
msgid "Overview"
|
65
65
|
msgstr "Oversigt"
|
66
66
|
|
67
|
-
#: gui/trayicon.rb:
|
67
|
+
#: gui/trayicon.rb:92
|
68
68
|
msgid "Time overview"
|
69
69
|
msgstr "Tids oversigt"
|
70
70
|
|
71
|
-
#: gui/trayicon.rb:
|
71
|
+
#: gui/trayicon.rb:102
|
72
72
|
msgid "Synchronize with OpenAll"
|
73
73
|
msgstr "Synkroniserer med OpenAll"
|
74
74
|
|
75
|
-
#: gui/trayicon.rb:
|
75
|
+
#: gui/trayicon.rb:115
|
76
76
|
msgid "Track: %s"
|
77
77
|
msgstr "Følg: %s"
|
78
78
|
|
79
|
-
#: gui/trayicon.rb:
|
80
|
-
msgid "%s
|
81
|
-
msgstr "%s
|
79
|
+
#: gui/trayicon.rb:139
|
80
|
+
msgid "%s minutes"
|
81
|
+
msgstr "%s minutter"
|
82
82
|
|
83
83
|
#: gui/win_overview.rb:11
|
84
84
|
msgid "ID"
|
@@ -112,20 +112,44 @@ msgstr "Ja"
|
|
112
112
|
msgid "No"
|
113
113
|
msgstr "Nej"
|
114
114
|
|
115
|
-
#: gui/win_preferences.rb:
|
115
|
+
#: gui/win_preferences.rb:30
|
116
|
+
msgid "Black"
|
117
|
+
msgstr "Sort"
|
118
|
+
|
119
|
+
#: gui/win_preferences.rb:30
|
120
|
+
msgid "White"
|
121
|
+
msgstr "Hvid"
|
122
|
+
|
123
|
+
#: gui/win_preferences.rb:42
|
124
|
+
msgid "The OpenAll-settings was saved."
|
125
|
+
msgstr "OpenAll-indstillinger blev gemt."
|
126
|
+
|
127
|
+
#: gui/win_preferences.rb:47
|
128
|
+
msgid "Reminder-minute was not numeric."
|
129
|
+
msgstr "Påmindelses-minutter var ikke et gyldigt tal."
|
130
|
+
|
131
|
+
#: gui/win_preferences.rb:57
|
132
|
+
msgid "The reminder-settings was saved."
|
133
|
+
msgstr "Påmindelses-indstillinger blev gemt."
|
134
|
+
|
135
|
+
#: gui/win_preferences.rb:64
|
136
|
+
msgid "The tray-settings was saved."
|
137
|
+
msgstr "Tray-indstillinger blev gemt."
|
138
|
+
|
139
|
+
#: gui/win_preferences.rb:70
|
116
140
|
msgid "Connecting and logging in..."
|
117
141
|
msgstr "Forbinder og logger ind..."
|
118
142
|
|
119
|
-
#: gui/win_preferences.rb:
|
143
|
+
#: gui/win_preferences.rb:78
|
120
144
|
msgid "Getting task-list."
|
121
145
|
msgstr "Henter opgave-liste."
|
122
146
|
|
123
|
-
#: gui/win_preferences.rb:
|
147
|
+
#: gui/win_preferences.rb:81
|
124
148
|
msgid "Got %s tasks."
|
125
149
|
msgstr "Hentet %s opgaver."
|
126
150
|
|
127
|
-
#: gui/win_preferences.rb:
|
128
|
-
#: lib/openall_time_applet.rb:
|
151
|
+
#: gui/win_preferences.rb:89
|
152
|
+
#: lib/openall_time_applet.rb:254
|
129
153
|
msgid "Error"
|
130
154
|
msgstr "Fejl"
|
131
155
|
|
@@ -133,7 +157,7 @@ msgstr "Fejl"
|
|
133
157
|
msgid "Week %s"
|
134
158
|
msgstr "Uge %s"
|
135
159
|
|
136
|
-
#: gui/win_worktime_overview.rb:
|
160
|
+
#: gui/win_worktime_overview.rb:115
|
137
161
|
msgid "No worktimes was found that week."
|
138
162
|
msgstr "Der blev ikke fundet nogle arbejdstimer i denne uge."
|
139
163
|
|
@@ -153,27 +177,43 @@ msgstr "Du har indtastet et ugyldigt transport-tids-format."
|
|
153
177
|
msgid "Do you want to remove this timelog? This will not delete the timelog on OpenAll."
|
154
178
|
msgstr "Vil du fjerne denne tidslogning? Dette vil ikke slette tidslogningen fra OpenAll."
|
155
179
|
|
156
|
-
#:
|
180
|
+
#: gui/win_sync_overview.rb:9
|
181
|
+
msgid "Synchronize"
|
182
|
+
msgstr "Synkroniser"
|
183
|
+
|
184
|
+
#: gui/win_sync_overview.rb:57
|
185
|
+
msgid "There is nothing to sync at this time."
|
186
|
+
msgstr "Der er intet at synce på nuværende tidspunkt."
|
187
|
+
|
188
|
+
#: gui/win_sync_overview.rb:72
|
189
|
+
msgid "Time was not numeric for: '%s'."
|
190
|
+
msgstr "Tid var ikke numerisk for: '%s'."
|
191
|
+
|
192
|
+
#: lib/openall_time_applet.rb:104
|
157
193
|
msgid "not set"
|
158
194
|
msgstr "ikke sat"
|
159
195
|
|
160
|
-
#: lib/openall_time_applet.rb:
|
196
|
+
#: lib/openall_time_applet.rb:149
|
197
|
+
msgid "Tracking task: %s"
|
198
|
+
msgstr "Følger opgave: %s"
|
199
|
+
|
200
|
+
#: lib/openall_time_applet.rb:234
|
161
201
|
msgid "Updating organisation-cache."
|
162
202
|
msgstr "Opdaterer organisations-cache."
|
163
203
|
|
164
|
-
#: lib/openall_time_applet.rb:
|
204
|
+
#: lib/openall_time_applet.rb:238
|
165
205
|
msgid "Updating task-cache."
|
166
206
|
msgstr "Opdaterer opgave-cache."
|
167
207
|
|
168
|
-
#: lib/openall_time_applet.rb:
|
208
|
+
#: lib/openall_time_applet.rb:242
|
169
209
|
msgid "Pushing time-updates."
|
170
210
|
msgstr "Sender tids-opdateringer."
|
171
211
|
|
172
|
-
#: lib/openall_time_applet.rb:
|
212
|
+
#: lib/openall_time_applet.rb:246
|
173
213
|
msgid "Updating worktime-cache."
|
174
214
|
msgstr "Opdaterer arbejdstids-cache."
|
175
215
|
|
176
|
-
#: lib/openall_time_applet.rb:
|
216
|
+
#: lib/openall_time_applet.rb:250
|
177
217
|
msgid "Done"
|
178
218
|
msgstr "Færdig"
|
179
219
|
|
@@ -198,6 +238,7 @@ msgid "Start tracking after saving"
|
|
198
238
|
msgstr "Starter med at følge efter gem"
|
199
239
|
|
200
240
|
#: glade/win_timelog_edit.glade:188
|
241
|
+
#: glade/win_sync_overview.glade:40
|
201
242
|
msgid "<b>Timelog</b>"
|
202
243
|
msgstr "<b>Tidslog</b>"
|
203
244
|
|
@@ -205,37 +246,76 @@ msgstr "<b>Tidslog</b>"
|
|
205
246
|
msgid "Preferences"
|
206
247
|
msgstr "Indstillinger"
|
207
248
|
|
208
|
-
#: glade/win_preferences.glade:
|
249
|
+
#: glade/win_preferences.glade:35
|
209
250
|
msgid "Host"
|
210
251
|
msgstr "Host"
|
211
252
|
|
212
|
-
#: glade/win_preferences.glade:
|
253
|
+
#: glade/win_preferences.glade:46
|
213
254
|
msgid "Username"
|
214
255
|
msgstr "Brugernavn"
|
215
256
|
|
216
|
-
#: glade/win_preferences.glade:
|
257
|
+
#: glade/win_preferences.glade:94
|
217
258
|
msgid "Password"
|
218
259
|
msgstr "Adagngskode"
|
219
260
|
|
220
|
-
#: glade/win_preferences.glade:
|
261
|
+
#: glade/win_preferences.glade:126
|
221
262
|
msgid "Port"
|
222
263
|
msgstr "Port"
|
223
264
|
|
224
|
-
#: glade/win_preferences.glade:
|
265
|
+
#: glade/win_preferences.glade:155
|
225
266
|
msgid "SSL"
|
226
267
|
msgstr "SSL"
|
227
268
|
|
228
|
-
#: glade/win_preferences.glade:
|
229
|
-
msgid "<b>OpenAll</b>"
|
230
|
-
msgstr "<b>OpenAll</b>"
|
231
|
-
|
232
|
-
#: glade/win_preferences.glade:206
|
269
|
+
#: glade/win_preferences.glade:190
|
233
270
|
msgid "Test"
|
234
271
|
msgstr "Test"
|
235
272
|
|
273
|
+
#: glade/win_preferences.glade:243
|
274
|
+
msgid "OpenAll"
|
275
|
+
msgstr "OpenAll"
|
276
|
+
|
277
|
+
#: glade/win_preferences.glade:267
|
278
|
+
msgid "Reminder enabled"
|
279
|
+
msgstr "Påmindelser slået til"
|
280
|
+
|
281
|
+
#: glade/win_preferences.glade:283
|
282
|
+
msgid "Remind every minute"
|
283
|
+
msgstr "Påmind hver minut"
|
284
|
+
|
285
|
+
#: glade/win_preferences.glade:372
|
286
|
+
msgid "Reminder"
|
287
|
+
msgstr "Påminder"
|
288
|
+
|
289
|
+
#: glade/win_preferences.glade:398
|
290
|
+
msgid "Text color"
|
291
|
+
msgstr "Tekst farve"
|
292
|
+
|
293
|
+
#: glade/win_preferences.glade:478
|
294
|
+
msgid "Tray"
|
295
|
+
msgstr "Tray"
|
296
|
+
|
297
|
+
#: glade/win_sync_overview.glade:7
|
298
|
+
msgid "Overview of sync"
|
299
|
+
msgstr "Oversigt over synk"
|
300
|
+
|
301
|
+
#: glade/win_sync_overview.glade:49
|
302
|
+
msgid "<b>Logged time</b>"
|
303
|
+
msgstr "<b>Logget tid</b>"
|
304
|
+
|
305
|
+
#: glade/win_sync_overview.glade:62
|
306
|
+
msgid "<b>Sync. as time</b>"
|
307
|
+
msgstr "<b>Synk. som tid</b>"
|
308
|
+
|
309
|
+
#: glade/win_sync_overview.glade:114
|
310
|
+
msgid "<b>Sync with OpenAll</b>"
|
311
|
+
msgstr "<b>Synk med OpenAll</b>"
|
312
|
+
|
236
313
|
#: glade/win_overview.glade:54
|
237
314
|
msgid "<b>Timelogs</b>"
|
238
315
|
msgstr "<b>Tidslogs</b>"
|
239
316
|
|
317
|
+
#~ msgid "%s seconds"
|
318
|
+
#~ msgstr "%s sekunder"
|
319
|
+
|
240
320
|
#~ msgid "URL"
|
241
321
|
#~ msgstr "URL"
|
data/models/timelog.rb
CHANGED
@@ -18,26 +18,17 @@ class Openall_time_applet::Models::Timelog < Knj::Datarow
|
|
18
18
|
next if secs_sum <= 0
|
19
19
|
|
20
20
|
#The timelog has not yet been created in OpenAll - create it!
|
21
|
-
if timelog[:openall_uid].to_i == 0
|
22
|
-
res = conn.request(
|
23
|
-
:method => :createWorktime,
|
24
|
-
:post => {
|
25
|
-
:task_uid => timelog.task[:openall_uid].to_i,
|
26
|
-
:comment => timelog[:descr]
|
27
|
-
}
|
28
|
-
)
|
29
|
-
timelog[:openall_uid] = res["worktime_uid"]
|
30
|
-
end
|
31
|
-
|
32
|
-
#Push latest work-time.
|
33
21
|
res = conn.request(
|
34
|
-
:method => :
|
22
|
+
:method => :createWorktime,
|
35
23
|
:post => {
|
36
|
-
:
|
37
|
-
:
|
38
|
-
:
|
24
|
+
:task_uid => timelog.task[:openall_uid].to_i,
|
25
|
+
:comment => timelog[:descr],
|
26
|
+
:worktime => Knj::Strings.secs_to_human_time_str(timelog[:time]),
|
27
|
+
:transporttime => Knj::Strings.secs_to_human_time_str(timelog[:time_transport])
|
39
28
|
}
|
40
29
|
)
|
30
|
+
|
31
|
+
#Reset timelog.
|
41
32
|
timelog.update(
|
42
33
|
:time => 0,
|
43
34
|
:time_transport => 0,
|
data/openall_time_applet.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{openall_time_applet}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kasper Johansen"]
|
12
|
-
s.date = %q{2012-05-
|
12
|
+
s.date = %q{2012-05-25}
|
13
13
|
s.default_executable = %q{openall_time_applet.rb}
|
14
14
|
s.description = %q{Off-line time-tracking for OpenAll with syncing when online.}
|
15
15
|
s.email = %q{k@spernj.org}
|
@@ -32,13 +32,16 @@ Gem::Specification.new do |s|
|
|
32
32
|
"classes/translations.rb",
|
33
33
|
"conf/db_schema.rb",
|
34
34
|
"gfx/icon_time.png",
|
35
|
+
"gfx/icon_time_orig.png",
|
35
36
|
"glade/win_overview.glade",
|
36
37
|
"glade/win_preferences.glade",
|
38
|
+
"glade/win_sync_overview.glade",
|
37
39
|
"glade/win_timelog_edit.glade",
|
38
40
|
"glade/win_worktime_overview.glade",
|
39
41
|
"gui/trayicon.rb",
|
40
42
|
"gui/win_overview.rb",
|
41
43
|
"gui/win_preferences.rb",
|
44
|
+
"gui/win_sync_overview.rb",
|
42
45
|
"gui/win_timelog_edit.rb",
|
43
46
|
"gui/win_worktime_overview.rb",
|
44
47
|
"lib/openall_time_applet.rb",
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: openall_time_applet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.7
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kasper Johansen
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-05-
|
13
|
+
date: 2012-05-25 00:00:00 +02:00
|
14
14
|
default_executable: openall_time_applet.rb
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -157,13 +157,16 @@ files:
|
|
157
157
|
- classes/translations.rb
|
158
158
|
- conf/db_schema.rb
|
159
159
|
- gfx/icon_time.png
|
160
|
+
- gfx/icon_time_orig.png
|
160
161
|
- glade/win_overview.glade
|
161
162
|
- glade/win_preferences.glade
|
163
|
+
- glade/win_sync_overview.glade
|
162
164
|
- glade/win_timelog_edit.glade
|
163
165
|
- glade/win_worktime_overview.glade
|
164
166
|
- gui/trayicon.rb
|
165
167
|
- gui/win_overview.rb
|
166
168
|
- gui/win_preferences.rb
|
169
|
+
- gui/win_sync_overview.rb
|
167
170
|
- gui/win_timelog_edit.rb
|
168
171
|
- gui/win_worktime_overview.rb
|
169
172
|
- lib/openall_time_applet.rb
|
@@ -190,7 +193,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
190
193
|
requirements:
|
191
194
|
- - ">="
|
192
195
|
- !ruby/object:Gem::Version
|
193
|
-
hash:
|
196
|
+
hash: 3607958173407388700
|
194
197
|
segments:
|
195
198
|
- 0
|
196
199
|
version: "0"
|