openall_time_applet 0.0.38 → 0.0.40
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/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
|
|