openall_time_applet 0.0.38 → 0.0.40
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/Gemfile.lock +25 -17
- data/VERSION +1 -1
- data/conf/db_schema.rb +3 -1
- data/glade/win_main.glade +15 -6
- data/gui/trayicon.rb +3 -5
- data/gui/win_main.rb +403 -189
- data/gui/win_preferences.rb +9 -1
- data/lib/openall_time_applet.rb +79 -20
- data/locales/da_DK/LC_MESSAGES/default.mo +0 -0
- data/locales/da_DK/LC_MESSAGES/default.po +89 -73
- data/models/task.rb +62 -3
- data/models/timelog.rb +30 -0
- data/openall_time_applet.gemspec +14 -8
- metadata +35 -15
data/gui/win_preferences.rb
CHANGED
@@ -77,8 +77,16 @@ class Openall_time_applet::Gui::Win_preferences
|
|
77
77
|
#Do the stuff in thread so GUI wont lock.
|
78
78
|
Knj::Thread.new do
|
79
79
|
begin
|
80
|
+
args_oa_conn = {
|
81
|
+
:host => @gui["txtHost"].text,
|
82
|
+
:port => @gui["txtPort"].text.to_i,
|
83
|
+
:ssl => @gui["cbSSL"].active?,
|
84
|
+
:username => @gui["txtUsername"].text,
|
85
|
+
:password => @gui["txtPassword"].text
|
86
|
+
}
|
87
|
+
|
80
88
|
#Connect to OpenAll, log in, get a list of tasks to test the information and connection.
|
81
|
-
@args[:oata].oa_conn do |conn|
|
89
|
+
@args[:oata].oa_conn(args_oa_conn) do |conn|
|
82
90
|
ws.percent = 0.3
|
83
91
|
ws.label = _("Getting task-list.")
|
84
92
|
task_list = conn.task_list
|
data/lib/openall_time_applet.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
require "rubygems"
|
3
3
|
|
4
4
|
#For secs-to-human-string (MySQL-format), model-framework, database-framework, options-framework, date-framework and more.
|
5
|
-
gems = ["wref", "datet", "http2", "knjrbfw", "gtk2_treeview_settings"]
|
5
|
+
gems = ["wref", "datet", "http2", "knjrbfw", "gtk2_expander_settings", "gtk2_treeview_settings", "gtk2_window_settings"]
|
6
6
|
gems.each do |gem|
|
7
7
|
fpath = "#{File.dirname(__FILE__)}/../../#{gem}/lib/#{gem}.rb"
|
8
8
|
if File.exists?(fpath)
|
@@ -60,7 +60,7 @@ class Openall_time_applet
|
|
60
60
|
end
|
61
61
|
|
62
62
|
#Various readable variables.
|
63
|
-
attr_reader :db, :debug, :events, :ob, :ti, :timelog_active, :timelog_active_time
|
63
|
+
attr_reader :db, :debug, :events, :log, :ob, :ti, :timelog_active, :timelog_active_time
|
64
64
|
attr_accessor :reminder_next
|
65
65
|
|
66
66
|
#Config controlling paths and more.
|
@@ -68,17 +68,25 @@ class Openall_time_applet
|
|
68
68
|
:settings_path => "#{Knj::Os.homedir}/.openall_time_applet",
|
69
69
|
:run_path => "#{Knj::Os.homedir}/.openall_time_applet/run",
|
70
70
|
:db_path => "#{Knj::Os.homedir}/.openall_time_applet/openall_time_applet.sqlite3",
|
71
|
-
:sock_path => "#{Knj::Os.homedir}/.openall_time_applet/sock"
|
71
|
+
:sock_path => "#{Knj::Os.homedir}/.openall_time_applet/sock",
|
72
|
+
:log_path => "#{Knj::Os.homedir}/.openall_time_applet/log"
|
72
73
|
}
|
73
74
|
|
74
75
|
#Initializes config-dir and database.
|
75
76
|
def initialize(args = {})
|
77
|
+
#Spawn logging-object.
|
78
|
+
require "logger"
|
79
|
+
@log = Logger.new(CONFIG[:log_path])
|
80
|
+
@log.level = Logger::DEBUG
|
81
|
+
|
82
|
+
|
76
83
|
Dir.mkdir(CONFIG[:settings_path]) if !File.exists?(CONFIG[:settings_path])
|
77
84
|
self.check_runfile_and_cmds
|
78
85
|
self.require_gtk2
|
79
86
|
@debug = args[:debug]
|
80
87
|
|
81
88
|
#Database-connection.
|
89
|
+
@log.debug("Spawning database-object.")
|
82
90
|
@db = Knj::Db.new(
|
83
91
|
:type => "sqlite3",
|
84
92
|
:path => CONFIG[:db_path],
|
@@ -87,9 +95,11 @@ class Openall_time_applet
|
|
87
95
|
)
|
88
96
|
|
89
97
|
#Update to latest db-revision.
|
98
|
+
@log.debug("Updating database.")
|
90
99
|
self.update_db
|
91
100
|
|
92
101
|
#Models-handeler.
|
102
|
+
@log.debug("Spawning model-handler.")
|
93
103
|
@ob = Knj::Objects.new(
|
94
104
|
:datarow => true,
|
95
105
|
:db => @db,
|
@@ -98,11 +108,14 @@ class Openall_time_applet
|
|
98
108
|
:module => Openall_time_applet::Models
|
99
109
|
)
|
100
110
|
@ob.events.connect(:no_name, &self.method(:objects_no_name))
|
111
|
+
@ob.connect("object" => :Timelog, "signals" => ["delete_before"], &self.method(:on_timelog_delete))
|
101
112
|
|
113
|
+
@log.debug("Spawning event-handler.")
|
102
114
|
@events = Knj::Event_handler.new
|
103
115
|
@events.add_event(:name => :timelog_active_changed)
|
104
116
|
|
105
117
|
#Options used to save various information (Openall-username and such).
|
118
|
+
@log.debug("Spawning options-object.")
|
106
119
|
Knj::Opts.init("knjdb" => @db, "table" => "Option")
|
107
120
|
|
108
121
|
#Set crash-operation to save tracked time instead of loosing it.
|
@@ -112,16 +125,37 @@ class Openall_time_applet
|
|
112
125
|
Knj::Opts.set("tray_text_color", "green_casalogic") if Knj::Opts.get("tray_text_color").to_s.strip.empty?
|
113
126
|
|
114
127
|
#Spawn tray-icon.
|
128
|
+
@log.debug("Spawning tray-icon.")
|
115
129
|
self.spawn_trayicon
|
116
130
|
|
117
131
|
#Start reminder.
|
132
|
+
@log.debug("Starting reminder.")
|
118
133
|
self.reminding
|
119
134
|
|
120
135
|
#Start unix-socket that listens for remote control.
|
136
|
+
@log.debug("Spawning UNIX-socket.")
|
121
137
|
@unix_socket = Openall_time_applet::Unix_socket.new(:oata => self)
|
122
138
|
|
123
139
|
#Start autosync-timeout.
|
140
|
+
@log.debug("Starting auto-sync.")
|
124
141
|
self.restart_autosync
|
142
|
+
|
143
|
+
@log.debug("OpenAll Time Applet started.")
|
144
|
+
|
145
|
+
#Used to test when new tasks are created.
|
146
|
+
#@ob.list(:Task, "title" => "New task") do |task|
|
147
|
+
# puts "Deleting test task."
|
148
|
+
# @ob.delete(task)
|
149
|
+
#end
|
150
|
+
end
|
151
|
+
|
152
|
+
#Called when a timelog is deleted.
|
153
|
+
def on_timelog_delete(timelog)
|
154
|
+
#Stop tracking if the active timelog is being deleted.
|
155
|
+
if @timelog_active and @timelog_active.id.to_i == timelog.id.to_i
|
156
|
+
@log.debug("Tracked timelog is being deleted - stopping tracking before deletion.")
|
157
|
+
self.timelog_stop_tracking
|
158
|
+
end
|
125
159
|
end
|
126
160
|
|
127
161
|
#Called when something doesnt have a name to get a replacement-name in the objects-framework.
|
@@ -132,26 +166,33 @@ class Openall_time_applet
|
|
132
166
|
#Creates a runfile or sending a command to the running OpenAll-Time-Applet through the Unix-socket.
|
133
167
|
def check_runfile_and_cmds
|
134
168
|
#If run-file exists and the PID within is still running, then send command (if given) and exit.
|
135
|
-
if File.exists?(CONFIG[:run_path]) and Knj::Unix_proc.pid_running?(File.read(CONFIG[:run_path]).to_i)
|
136
|
-
|
137
|
-
ARGV.each do |val|
|
138
|
-
if match = val.match(/^--cmd=(.+)$/)
|
139
|
-
cmd = match[1]
|
140
|
-
break
|
141
|
-
end
|
142
|
-
end
|
169
|
+
if File.exists?(CONFIG[:run_path]) and Knj::Unix_proc.pid_running?(File.read(CONFIG[:run_path]).to_i) and File.exists?(CONFIG[:sock_path])
|
170
|
+
running = true
|
143
171
|
|
144
|
-
|
145
|
-
puts "Executing command through sock: #{cmd}"
|
146
|
-
|
172
|
+
begin
|
147
173
|
require "socket"
|
148
174
|
UNIXSocket.open(CONFIG[:sock_path]) do |sock|
|
149
|
-
|
175
|
+
cmd = nil
|
176
|
+
ARGV.each do |val|
|
177
|
+
if match = val.match(/^--cmd=(.+)$/)
|
178
|
+
cmd = match[1]
|
179
|
+
break
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
if cmd
|
184
|
+
puts "Executing command through sock: #{cmd}"
|
185
|
+
sock.puts(cmd)
|
186
|
+
end
|
150
187
|
end
|
188
|
+
rescue Errno::ECONNREFUSED
|
189
|
+
running = false
|
151
190
|
end
|
152
191
|
|
153
|
-
|
154
|
-
|
192
|
+
if running
|
193
|
+
puts "Already running"
|
194
|
+
exit
|
195
|
+
end
|
155
196
|
end
|
156
197
|
|
157
198
|
File.open(CONFIG[:run_path], "w") do |fp|
|
@@ -212,6 +253,7 @@ class Openall_time_applet
|
|
212
253
|
#This executes the notification that notifies if a timelog is being tracked.
|
213
254
|
def reminding_exec
|
214
255
|
return nil unless @timelog_active
|
256
|
+
@log.debug("Sending reminder through notify.")
|
215
257
|
Knj::Notify.send("time" => 5, "msg" => sprintf(_("Tracking task: %s"), @timelog_active[:descr]))
|
216
258
|
end
|
217
259
|
|
@@ -220,16 +262,19 @@ class Openall_time_applet
|
|
220
262
|
# oata.oa_conn do |conn|
|
221
263
|
# task_list = conn.task_list
|
222
264
|
# end
|
223
|
-
def oa_conn
|
265
|
+
def oa_conn(args = nil)
|
224
266
|
begin
|
225
|
-
|
267
|
+
args_conn = {
|
226
268
|
:oata => self,
|
227
269
|
:host => Knj::Opts.get("openall_host"),
|
228
270
|
:port => Knj::Opts.get("openall_port"),
|
229
271
|
:username => Knj::Opts.get("openall_username"),
|
230
272
|
:password => Base64.strict_decode64(Knj::Opts.get("openall_password")),
|
231
273
|
:ssl => Knj::Strings.yn_str(Knj::Opts.get("openall_ssl"), true, false)
|
232
|
-
|
274
|
+
}
|
275
|
+
args_conn.merge!(args) if args
|
276
|
+
|
277
|
+
conn = Openall_time_applet::Connection.new(args_conn)
|
233
278
|
yield(conn)
|
234
279
|
ensure
|
235
280
|
conn.destroy if conn
|
@@ -243,6 +288,7 @@ class Openall_time_applet
|
|
243
288
|
end
|
244
289
|
|
245
290
|
def show_main
|
291
|
+
@log.debug("Show main window.")
|
246
292
|
Knj::Gtk2::Window.unique!("main") do
|
247
293
|
Openall_time_applet::Gui::Win_main.new(:oata => self)
|
248
294
|
end
|
@@ -250,18 +296,21 @@ class Openall_time_applet
|
|
250
296
|
|
251
297
|
#Spawns the preference-window.
|
252
298
|
def show_preferences
|
299
|
+
@log.debug("Show preferences.")
|
253
300
|
Knj::Gtk2::Window.unique!("preferences") do
|
254
301
|
Openall_time_applet::Gui::Win_preferences.new(:oata => self)
|
255
302
|
end
|
256
303
|
end
|
257
304
|
|
258
305
|
def show_overview
|
306
|
+
@log.debug("Show overview.")
|
259
307
|
Knj::Gtk2::Window.unique!("overview") do
|
260
308
|
Openall_time_applet::Gui::Win_overview.new(:oata => self)
|
261
309
|
end
|
262
310
|
end
|
263
311
|
|
264
312
|
def show_worktime_overview
|
313
|
+
@log.debug("Show worktime-overview.")
|
265
314
|
Knj::Gtk2::Window.unique!("worktime_overview") do
|
266
315
|
Openall_time_applet::Gui::Win_worktime_overview.new(:oata => self)
|
267
316
|
end
|
@@ -269,20 +318,24 @@ class Openall_time_applet
|
|
269
318
|
|
270
319
|
#Updates the task-cache.
|
271
320
|
def update_task_cache
|
321
|
+
@log.debug("Updating task-cache.")
|
272
322
|
@ob.static(:Task, :update_cache, {:oata => self})
|
273
323
|
end
|
274
324
|
|
275
325
|
#Updates the worktime-cache.
|
276
326
|
def update_worktime_cache
|
327
|
+
@log.debug("Updating worktime-cache.")
|
277
328
|
@ob.static(:Worktime, :update_cache, {:oata => self})
|
278
329
|
end
|
279
330
|
|
280
331
|
def update_organisation_cache
|
332
|
+
@log.debug("Updating organisation-cache.")
|
281
333
|
@ob.static(:Organisation, :update_cache, {:oata => self})
|
282
334
|
end
|
283
335
|
|
284
336
|
#Pushes time-updates to OpenAll.
|
285
337
|
def push_time_updates
|
338
|
+
@log.debug("Pushing timelogs.")
|
286
339
|
@ob.static(:Timelog, :push_time_updates, {:oata => self})
|
287
340
|
end
|
288
341
|
|
@@ -351,6 +404,7 @@ class Openall_time_applet
|
|
351
404
|
#Stops tracking a timelog. Saves time tracked and sets sync-flag.
|
352
405
|
def timelog_stop_tracking
|
353
406
|
if @timelog_active
|
407
|
+
@log.debug("Stopping tracking of timelog.")
|
354
408
|
secs_passed = Time.now.to_i - @timelog_active_time.to_i
|
355
409
|
|
356
410
|
@timelog_active.update(
|
@@ -373,6 +427,7 @@ class Openall_time_applet
|
|
373
427
|
"descr" => timelog[:descr],
|
374
428
|
"timestamp_day" => Time.now
|
375
429
|
})
|
430
|
+
|
376
431
|
if !timelog_use
|
377
432
|
timelog_use = @ob.add(:Timelog, {
|
378
433
|
:task_id => timelog[:task_id],
|
@@ -385,6 +440,8 @@ class Openall_time_applet
|
|
385
440
|
})
|
386
441
|
end
|
387
442
|
|
443
|
+
@log.debug("Starting tracking of timelog.")
|
444
|
+
|
388
445
|
begin
|
389
446
|
self.timelog_stop_tracking
|
390
447
|
@timelog_logged_time = @ob.add(:Timelog_logged_time, :timelog_id => timelog_use.id)
|
@@ -393,6 +450,7 @@ class Openall_time_applet
|
|
393
450
|
|
394
451
|
@events.call(:timelog_active_changed)
|
395
452
|
rescue => e
|
453
|
+
@log.error("Error while trying to start tracking timelog: '#{e.message}'.\n#{e.backtrace.join("\n")}")
|
396
454
|
Knj::Gtk2.msgbox("msg" => Knj::Errors.error_str(e), "type" => "warning", "title" => _("Error"), "run" => false)
|
397
455
|
end
|
398
456
|
|
@@ -461,6 +519,7 @@ class Openall_time_applet
|
|
461
519
|
|
462
520
|
#Prints status to the command line and the statusbar in the main window (if the main window is open).
|
463
521
|
def status=(newstatus)
|
522
|
+
@log.debug("New status: '#{newstatus}'.")
|
464
523
|
puts "Status: '#{newstatus}'."
|
465
524
|
win_main = Knj::Gtk2::Window.get("main")
|
466
525
|
|
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-08-
|
5
|
-
"PO-Revision-Date: 2012-08-
|
4
|
+
"POT-Creation-Date: 2012-08-31 11:29+0100\n"
|
5
|
+
"PO-Revision-Date: 2012-08-31 11:30+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"
|
@@ -92,26 +92,26 @@ msgstr "Tray-indstillinger blev gemt."
|
|
92
92
|
msgid "Connecting and logging in..."
|
93
93
|
msgstr "Forbinder og logger ind..."
|
94
94
|
|
95
|
-
#: gui/win_preferences.rb:
|
95
|
+
#: gui/win_preferences.rb:91
|
96
96
|
msgid "Getting task-list."
|
97
97
|
msgstr "Henter opgave-liste."
|
98
98
|
|
99
|
-
#: gui/win_preferences.rb:
|
99
|
+
#: gui/win_preferences.rb:94
|
100
100
|
msgid "Got %s tasks."
|
101
101
|
msgstr "Hentet %s opgaver."
|
102
102
|
|
103
|
-
#: gui/win_preferences.rb:
|
104
|
-
#: lib/openall_time_applet.rb:
|
105
|
-
#: lib/openall_time_applet.rb:
|
106
|
-
#: lib/openall_time_applet.rb:
|
103
|
+
#: gui/win_preferences.rb:102
|
104
|
+
#: lib/openall_time_applet.rb:317
|
105
|
+
#: lib/openall_time_applet.rb:347
|
106
|
+
#: lib/openall_time_applet.rb:399
|
107
107
|
msgid "Error"
|
108
108
|
msgstr "Fejl"
|
109
109
|
|
110
|
-
#: gui/win_preferences.rb:
|
111
|
-
msgid "The interval was not numeric."
|
112
|
-
msgstr "Intervallet var ikke et
|
110
|
+
#: gui/win_preferences.rb:119
|
111
|
+
msgid "The interval was not numeric or above zero."
|
112
|
+
msgstr "Intervallet var ikke et nummer eller over nul."
|
113
113
|
|
114
|
-
#: gui/win_preferences.rb:
|
114
|
+
#: gui/win_preferences.rb:128
|
115
115
|
msgid "The auto. sync. preferences was saved."
|
116
116
|
msgstr "Auto synk. indstillingerne blev gemt."
|
117
117
|
|
@@ -123,180 +123,190 @@ msgstr "Uge %s"
|
|
123
123
|
msgid "No worktimes was found that week."
|
124
124
|
msgstr "Der blev ikke fundet nogle arbejdstimer i denne uge."
|
125
125
|
|
126
|
-
#: gui/win_main.rb:
|
127
|
-
#: gui/win_main.rb:
|
126
|
+
#: gui/win_main.rb:18
|
127
|
+
#: gui/win_main.rb:255
|
128
128
|
msgid "None"
|
129
129
|
msgstr "Ingen"
|
130
130
|
|
131
|
-
#: gui/win_main.rb:
|
132
|
-
#: gui/win_main.rb:
|
133
|
-
#: gui/win_main.rb:
|
134
|
-
#: gui/win_main.rb:
|
135
|
-
#: gui/win_main.rb:
|
131
|
+
#: gui/win_main.rb:21
|
132
|
+
#: gui/win_main.rb:258
|
133
|
+
#: gui/win_main.rb:776
|
134
|
+
#: gui/win_main.rb:795
|
135
|
+
#: gui/win_main.rb:805
|
136
136
|
msgid "Choose:"
|
137
137
|
msgstr "Vælg:"
|
138
138
|
|
139
|
-
#: gui/win_main.rb:
|
140
|
-
#: gui/win_main.rb:
|
139
|
+
#: gui/win_main.rb:46
|
140
|
+
#: gui/win_main.rb:268
|
141
141
|
msgid "ID"
|
142
142
|
msgstr "ID"
|
143
143
|
|
144
|
-
#: gui/win_main.rb:
|
144
|
+
#: gui/win_main.rb:48
|
145
|
+
#: gui/win_main.rb:274
|
145
146
|
msgid "Stamp"
|
146
147
|
msgstr "Stamp"
|
147
148
|
|
148
|
-
#: gui/win_main.rb:
|
149
|
-
#: gui/win_main.rb:
|
149
|
+
#: gui/win_main.rb:54
|
150
|
+
#: gui/win_main.rb:275
|
150
151
|
msgid "Time"
|
151
152
|
msgstr "Tid"
|
152
153
|
|
153
|
-
#: gui/win_main.rb:
|
154
|
-
#: gui/win_main.rb:
|
154
|
+
#: gui/win_main.rb:60
|
155
|
+
#: gui/win_main.rb:270
|
155
156
|
msgid "Description"
|
156
157
|
msgstr "Beskrivelse"
|
157
158
|
|
158
|
-
#: gui/win_main.rb:
|
159
|
-
#: gui/win_main.rb:
|
159
|
+
#: gui/win_main.rb:67
|
160
|
+
#: gui/win_main.rb:276
|
160
161
|
msgid "T-time"
|
161
162
|
msgstr "T-tid"
|
162
163
|
|
163
|
-
#: gui/win_main.rb:
|
164
|
-
#: gui/win_main.rb:
|
164
|
+
#: gui/win_main.rb:73
|
165
|
+
#: gui/win_main.rb:277
|
165
166
|
msgid "T-km"
|
166
167
|
msgstr "T-km"
|
167
168
|
|
168
|
-
#: gui/win_main.rb:
|
169
|
-
#: gui/win_main.rb:
|
169
|
+
#: gui/win_main.rb:78
|
170
|
+
#: gui/win_main.rb:279
|
170
171
|
msgid "T-Descr."
|
171
172
|
msgstr "T-Beskr."
|
172
173
|
|
173
|
-
#: gui/win_main.rb:
|
174
|
-
#: gui/win_main.rb:
|
174
|
+
#: gui/win_main.rb:85
|
175
|
+
#: gui/win_main.rb:283
|
175
176
|
msgid "Cost"
|
176
177
|
msgstr "Omk."
|
177
178
|
|
178
|
-
#: gui/win_main.rb:
|
179
|
-
#: gui/win_main.rb:
|
179
|
+
#: gui/win_main.rb:90
|
180
|
+
#: gui/win_main.rb:285
|
180
181
|
msgid "Fixed"
|
181
182
|
msgstr "Fikset"
|
182
183
|
|
183
|
-
#: gui/win_main.rb:
|
184
|
+
#: gui/win_main.rb:95
|
185
|
+
#: gui/win_main.rb:289
|
184
186
|
msgid "Work"
|
185
187
|
msgstr "Arb."
|
186
188
|
|
187
|
-
#: gui/win_main.rb:
|
188
|
-
#: gui/win_main.rb:
|
189
|
+
#: gui/win_main.rb:100
|
190
|
+
#: gui/win_main.rb:297
|
189
191
|
msgid "Task"
|
190
192
|
msgstr "Opgave"
|
191
193
|
|
192
|
-
#: gui/win_main.rb:
|
194
|
+
#: gui/win_main.rb:109
|
195
|
+
msgid "Track"
|
196
|
+
msgstr "Track"
|
197
|
+
|
198
|
+
#: gui/win_main.rb:141
|
193
199
|
msgid "You cannot edit the time for the active timelog."
|
194
200
|
msgstr "Du kan ikke redigere tid for den aktive tidslog."
|
195
201
|
|
196
|
-
#: gui/win_main.rb:
|
202
|
+
#: gui/win_main.rb:193
|
203
|
+
msgid "You cannot track a date. Please track a timelog instead."
|
204
|
+
msgstr "Du kan ikke tracke en dato. Brug venligst en tidslog i stedet."
|
205
|
+
|
206
|
+
#: gui/win_main.rb:250
|
197
207
|
msgid "Transfer"
|
198
208
|
msgstr "Overfør"
|
199
209
|
|
200
|
-
#: gui/win_main.rb:
|
201
|
-
msgid "Timestamp"
|
202
|
-
msgstr "Tidsstempel"
|
203
|
-
|
204
|
-
#: gui/win_main.rb:257
|
205
|
-
msgid "Internal"
|
206
|
-
msgstr "Internt"
|
207
|
-
|
208
|
-
#: gui/win_main.rb:261
|
210
|
+
#: gui/win_main.rb:293
|
209
211
|
msgid "Skip"
|
210
212
|
msgstr "Skip"
|
211
213
|
|
212
|
-
#: gui/win_main.rb:
|
214
|
+
#: gui/win_main.rb:303
|
213
215
|
msgid "Sync time"
|
214
216
|
msgstr "Synk tid"
|
215
217
|
|
216
|
-
#: gui/win_main.rb:
|
218
|
+
#: gui/win_main.rb:476
|
217
219
|
msgid "There is nothing to sync at this time."
|
218
220
|
msgstr "Der er intet at synce på nuværende tidspunkt."
|
219
221
|
|
220
|
-
#: gui/win_main.rb:
|
222
|
+
#: gui/win_main.rb:513
|
221
223
|
msgid "You cannot edit this on the active timelog."
|
222
224
|
msgstr "Du kan ikke redigere den aktive tidslog."
|
223
225
|
|
224
|
-
#: gui/win_main.rb:
|
226
|
+
#: gui/win_main.rb:613
|
227
|
+
msgid "Could not find timelog in treeview: '%s'."
|
228
|
+
msgstr "Kunne ikke finde tidslog i treeviewet: '%s'."
|
229
|
+
|
230
|
+
#: gui/win_main.rb:650
|
231
|
+
msgid "Could not find iter from that date: '%s'."
|
232
|
+
msgstr "Kunne ikke finde iter fra den dato: '%s'."
|
233
|
+
|
234
|
+
#: gui/win_main.rb:696
|
225
235
|
msgid "The timelog '%s' has not been synced. Are you sure you want to quit?"
|
226
236
|
msgstr "Tidsloggen '%s' er ikke blevet synkroniseret. Er du sikker på, at du vil afslutte?"
|
227
237
|
|
228
|
-
#: gui/win_main.rb:
|
238
|
+
#: gui/win_main.rb:802
|
229
239
|
msgid "Start"
|
230
240
|
msgstr "Start"
|
231
241
|
|
232
|
-
#: gui/win_main.rb:
|
242
|
+
#: gui/win_main.rb:861
|
233
243
|
msgid "Please choose a timelog to delete."
|
234
244
|
msgstr "Vælg venligst en tidslog at slette."
|
235
245
|
|
236
|
-
#: gui/win_main.rb:
|
246
|
+
#: gui/win_main.rb:865
|
237
247
|
#: spec/openall_time_applet_spec.rb:54
|
238
248
|
#: spec/openall_time_applet_spec.rb:83
|
239
249
|
msgid "Do you want to remove this timelog?"
|
240
250
|
msgstr "Vil du fjerne denne tidslogning?"
|
241
251
|
|
242
|
-
#: gui/win_main.rb:
|
252
|
+
#: gui/win_main.rb:869
|
243
253
|
msgid "Could not delete the timelog: %s"
|
244
254
|
msgstr "Kunne ikke slette tidslog: %s"
|
245
255
|
|
246
|
-
#: lib/openall_time_applet.rb:
|
256
|
+
#: lib/openall_time_applet.rb:129
|
247
257
|
msgid "not set"
|
248
258
|
msgstr "ikke sat"
|
249
259
|
|
250
|
-
#: lib/openall_time_applet.rb:
|
260
|
+
#: lib/openall_time_applet.rb:215
|
251
261
|
msgid "Tracking task: %s"
|
252
262
|
msgstr "Følger opgave: %s"
|
253
263
|
|
254
|
-
#: lib/openall_time_applet.rb:
|
264
|
+
#: lib/openall_time_applet.rb:298
|
255
265
|
msgid "Updating organisation-cache."
|
256
266
|
msgstr "Opdaterer organisations-cache."
|
257
267
|
|
258
|
-
#: lib/openall_time_applet.rb:
|
268
|
+
#: lib/openall_time_applet.rb:302
|
259
269
|
msgid "Updating task-cache."
|
260
270
|
msgstr "Opdaterer opgave-cache."
|
261
271
|
|
262
|
-
#: lib/openall_time_applet.rb:
|
263
|
-
#: lib/openall_time_applet.rb:
|
272
|
+
#: lib/openall_time_applet.rb:306
|
273
|
+
#: lib/openall_time_applet.rb:339
|
264
274
|
msgid "Updating worktime-cache."
|
265
275
|
msgstr "Opdaterer arbejdstids-cache."
|
266
276
|
|
267
|
-
#: lib/openall_time_applet.rb:
|
277
|
+
#: lib/openall_time_applet.rb:331
|
268
278
|
msgid "Pushing time-updates."
|
269
279
|
msgstr "Sender tids-opdateringer."
|
270
280
|
|
271
|
-
#: lib/openall_time_applet.rb:
|
281
|
+
#: lib/openall_time_applet.rb:335
|
272
282
|
msgid "Update task-cache."
|
273
283
|
msgstr "Opdaterer opgave-cache."
|
274
284
|
|
275
|
-
#: lib/openall_time_applet.rb:
|
285
|
+
#: lib/openall_time_applet.rb:343
|
276
286
|
msgid "Done"
|
277
287
|
msgstr "Færdig"
|
278
288
|
|
279
|
-
#: lib/openall_time_applet.rb:
|
289
|
+
#: lib/openall_time_applet.rb:432
|
280
290
|
msgid "Disabled automatic synchronization."
|
281
291
|
msgstr "Slået automatisk synkronation fra."
|
282
292
|
|
283
|
-
#: lib/openall_time_applet.rb:
|
293
|
+
#: lib/openall_time_applet.rb:436
|
284
294
|
msgid "Restarted automatic sync. to run every %s minutes."
|
285
295
|
msgstr "Genstartet automatisk synk. til at køre hvert %s minut."
|
286
296
|
|
287
|
-
#: lib/openall_time_applet.rb:
|
297
|
+
#: lib/openall_time_applet.rb:450
|
288
298
|
msgid "Synchronizing organisations."
|
289
299
|
msgstr "Synkroniserer organisationer."
|
290
300
|
|
291
|
-
#: lib/openall_time_applet.rb:
|
301
|
+
#: lib/openall_time_applet.rb:453
|
292
302
|
msgid "Synchronizing worktime."
|
293
303
|
msgstr "Synkroniserer arbejdstid."
|
294
304
|
|
295
|
-
#: lib/openall_time_applet.rb:
|
305
|
+
#: lib/openall_time_applet.rb:456
|
296
306
|
msgid "Automatic synchronization done."
|
297
307
|
msgstr "Automatisk synkronation færdig."
|
298
308
|
|
299
|
-
#: lib/openall_time_applet.rb:
|
309
|
+
#: lib/openall_time_applet.rb:458
|
300
310
|
msgid "Error while auto-syncing: %s"
|
301
311
|
msgstr "Fejl ved auto-synk: %s"
|
302
312
|
|
@@ -437,6 +447,12 @@ msgstr "Tidslog liste"
|
|
437
447
|
msgid "<b>Timelogs</b>"
|
438
448
|
msgstr "<b>Tidslogs</b>"
|
439
449
|
|
450
|
+
#~ msgid "Timestamp"
|
451
|
+
#~ msgstr "Tidsstempel"
|
452
|
+
|
453
|
+
#~ msgid "Internal"
|
454
|
+
#~ msgstr "Internt"
|
455
|
+
|
440
456
|
#~ msgid "New"
|
441
457
|
#~ msgstr "Ny"
|
442
458
|
|