hammer_cli_foreman_tasks 0.0.12 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +5 -5
  2. data/lib/hammer_cli_foreman_tasks.rb +1 -0
  3. data/lib/hammer_cli_foreman_tasks/command_extensions.rb +3 -0
  4. data/lib/hammer_cli_foreman_tasks/command_extensions/recurring_logic.rb +55 -0
  5. data/lib/hammer_cli_foreman_tasks/helper.rb +8 -5
  6. data/lib/hammer_cli_foreman_tasks/recurring_logic.rb +37 -3
  7. data/lib/hammer_cli_foreman_tasks/task.rb +42 -3
  8. data/lib/hammer_cli_foreman_tasks/task_progress.rb +11 -4
  9. data/lib/hammer_cli_foreman_tasks/version.rb +1 -1
  10. data/locale/de/hammer_cli_foreman_tasks.po +19 -52
  11. data/locale/en/hammer_cli_foreman_tasks.po +13 -2
  12. data/locale/es/hammer_cli_foreman_tasks.po +37 -69
  13. data/locale/fr/hammer_cli_foreman_tasks.po +16 -46
  14. data/locale/hammer_cli_foreman_tasks.pot +3 -3
  15. data/locale/it/hammer_cli_foreman_tasks.po +16 -47
  16. data/locale/ja/hammer_cli_foreman_tasks.po +16 -47
  17. data/locale/ko/hammer_cli_foreman_tasks.po +36 -65
  18. data/locale/pt_BR/hammer_cli_foreman_tasks.po +18 -47
  19. data/locale/ru/hammer_cli_foreman_tasks.po +18 -47
  20. data/locale/zh_CN/hammer_cli_foreman_tasks.po +18 -50
  21. data/locale/zh_TW/hammer_cli_foreman_tasks.po +18 -46
  22. metadata +20 -35
  23. data/locale/de/hammer_cli_foreman_tasks.edit.po +0 -121
  24. data/locale/de/hammer_cli_foreman_tasks.po.time_stamp +0 -0
  25. data/locale/en/hammer_cli_foreman_tasks.edit.po +0 -118
  26. data/locale/en/hammer_cli_foreman_tasks.po.time_stamp +0 -0
  27. data/locale/es/hammer_cli_foreman_tasks.edit.po +0 -121
  28. data/locale/es/hammer_cli_foreman_tasks.po.time_stamp +0 -0
  29. data/locale/fr/hammer_cli_foreman_tasks.edit.po +0 -118
  30. data/locale/fr/hammer_cli_foreman_tasks.po.time_stamp +0 -0
  31. data/locale/it/hammer_cli_foreman_tasks.edit.po +0 -119
  32. data/locale/it/hammer_cli_foreman_tasks.po.time_stamp +0 -0
  33. data/locale/ja/hammer_cli_foreman_tasks.edit.po +0 -119
  34. data/locale/ja/hammer_cli_foreman_tasks.po.time_stamp +0 -0
  35. data/locale/ko/hammer_cli_foreman_tasks.edit.po +0 -117
  36. data/locale/ko/hammer_cli_foreman_tasks.po.time_stamp +0 -0
  37. data/locale/pt_BR/hammer_cli_foreman_tasks.edit.po +0 -118
  38. data/locale/pt_BR/hammer_cli_foreman_tasks.po.time_stamp +0 -0
  39. data/locale/ru/hammer_cli_foreman_tasks.edit.po +0 -120
  40. data/locale/ru/hammer_cli_foreman_tasks.po.time_stamp +0 -0
  41. data/locale/zh_CN/hammer_cli_foreman_tasks.edit.po +0 -121
  42. data/locale/zh_CN/hammer_cli_foreman_tasks.po.time_stamp +0 -0
  43. data/locale/zh_TW/hammer_cli_foreman_tasks.edit.po +0 -117
  44. data/locale/zh_TW/hammer_cli_foreman_tasks.po.time_stamp +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e0692446b3ec745d0ab8636fc100443690a9e562
4
- data.tar.gz: fe98659b39aae68eae3cafc0705a9cef3ad95822
2
+ SHA256:
3
+ metadata.gz: ec71b6d46c5b0bb4e7964c4bd59c75113a34905df7aaecf33a5b15799dfb1475
4
+ data.tar.gz: 9ebd5f6869ae7ffc42f516ad2af72b6bed78c03fd801b214ebba4728a1f3e320
5
5
  SHA512:
6
- metadata.gz: 49940870a441e80d680aad0689cb6392ed2abed8b8499e26708d70a5c0834144ac8b57a215f281865604d93fc5b78d841ca317103f9d4970e56969cca5d48d16
7
- data.tar.gz: 849d24914d3d05ee8b27e257eda6b34c95d30007de9a989a42015b5c3085a47ced2f821f2f124aaace28fd225ef8b5e80fb23dd90383980e5ea60238f7c119d5
6
+ metadata.gz: 8a952d7450b20da3f4a4ea2a7c632fe67671af30a606dab2a3139ad6fc1ebaaf0a889780fb37834afc620296a215e4100ee99ee63e114ae270f55d2726a892f7
7
+ data.tar.gz: af0dcf883b5a7bb7c9660a7ba8e8b7cc362af2b67bf22034766604cd04f21c5abbdca6a9dc97a269a6b91966670ecab5e7fe66dee6f073109c561dae668ea27b
@@ -1,4 +1,5 @@
1
1
  module HammerCLIForemanTasks
2
+ require 'hammer_cli_foreman_tasks/command_extensions'
2
3
  require 'hammer_cli_foreman_tasks/helper'
3
4
  require 'hammer_cli_foreman_tasks/task_progress'
4
5
  require 'hammer_cli_foreman_tasks/async_command'
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'hammer_cli_foreman_tasks/command_extensions/recurring_logic'
@@ -0,0 +1,55 @@
1
+ require 'date'
2
+
3
+ module HammerCLIForemanTasks
4
+ module CommandExtensions
5
+ class RecurringLogic < HammerCLI::CommandExtensions
6
+ before_print do |data|
7
+ data['action'] = format_task_input(data['tasks'].last)
8
+ data['last_occurrence'] = recurring_logic_last_occurrence(data)
9
+ data['next_occurrence'] = recurring_logic_next_occurrence(data)
10
+ data['iteration_limit'] = format_recurring_logic_limit(data['max_iteration'])
11
+ data['repeat_until'] = format_recurring_logic_limit(data['end_time'])
12
+ end
13
+
14
+ output do |definition|
15
+ definition.insert(:after, :cron_line) do
16
+ field :action, _('Action')
17
+ field :last_occurrence, _('Last occurrence')
18
+ field :next_occurrence, _('Next occurrence')
19
+ end
20
+ definition.insert(:after, :iteration) do
21
+ field :iteration_limit, _('Iteration limit')
22
+ end
23
+ definition.insert(:replace, :end_time) do
24
+ field :repeat_until, _('Repeat until')
25
+ end
26
+ end
27
+
28
+ def self.recurring_logic_last_occurrence(recurring_logic)
29
+ last_task = recurring_logic['tasks'].select { |t| t['started_at'] }
30
+ .max { |a, b| a['started_at'] <=> b['started_at'] }
31
+ return '-' if last_task.nil? || last_task['started_at'].nil?
32
+
33
+ last_task['started_at']
34
+ end
35
+
36
+ def self.recurring_logic_next_occurrence(recurring_logic)
37
+ default = '-'
38
+ return default if %w[cancelled finished disabled].include?(recurring_logic['state'])
39
+
40
+ last_task = recurring_logic['tasks'].max { |a, b| a['start_at'] <=> b['start_at'] }
41
+ last_task ? last_task['start_at'] : default
42
+ end
43
+
44
+ def self.format_task_input(task)
45
+ return '-' unless task
46
+
47
+ task['action']
48
+ end
49
+
50
+ def self.format_recurring_logic_limit(thing)
51
+ thing || _('Unlimited')
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,17 +1,20 @@
1
1
  module HammerCLIForemanTasks
2
2
  module Helper
3
-
4
3
  # render the progress of the task using polling to the task API
5
4
  def task_progress(task_or_id)
6
5
  task_id = task_or_id.is_a?(Hash) ? task_or_id['id'] : task_or_id
7
- task_progress = TaskProgress.new(task_id) { |id| load_task(id) }
8
- task_progress.render
9
- task_progress.success?
6
+ if !task_id.empty?
7
+ options = { verbosity: @context[:verbosity] || HammerCLI::V_VERBOSE }
8
+ task_progress = TaskProgress.new(task_id, options) { |id| load_task(id) }
9
+ task_progress.render
10
+ task_progress.success?
11
+ else
12
+ signal_usage_error(_('Please mention appropriate attribute value'))
13
+ end
10
14
  end
11
15
 
12
16
  def load_task(id)
13
17
  HammerCLIForeman.foreman_resource!(:foreman_tasks).call(:show, :id => id)
14
18
  end
15
-
16
19
  end
17
20
  end
@@ -6,8 +6,8 @@ module HammerCLIForemanTasks
6
6
  output do
7
7
  field :id, _('ID')
8
8
  field :cron_line, _('Cron line')
9
- field :end_time, _('End time')
10
9
  field :iteration, _('Iteration')
10
+ field :end_time, _('End time')
11
11
  field :state, _('State')
12
12
  end
13
13
 
@@ -17,18 +17,52 @@ module HammerCLIForemanTasks
17
17
  class InfoCommand < HammerCLIForeman::InfoCommand
18
18
  output ListCommand.output_definition
19
19
  build_options
20
+
21
+ extend_with(HammerCLIForemanTasks::CommandExtensions::RecurringLogic.new)
20
22
  end
21
23
 
22
24
  class CancelCommand < HammerCLIForeman::DeleteCommand
23
25
  action :cancel
24
26
  command_name 'cancel'
25
27
  success_message _('Recurring logic cancelled.')
26
- failure_message _('Could not cancel the recurring logic.')
28
+ failure_message _('Could not cancel the recurring logic')
27
29
  build_options
28
30
  end
31
+
32
+ class DeleteCommand < HammerCLIForeman::DeleteCommand
33
+ action :bulk_destroy
34
+
35
+ option '--cancelled', :flag, _("Only delete cancelled recurring logics")
36
+ option '--finished', :flag, _("Only delete finished recurring logics")
37
+ def request_params
38
+ params = super
39
+ raise ArgumentError, "Please specify if you want to remove cancelled or finished recurring logics using --cancelled or --finished." unless (options['option_cancelled'] || options["option_finished"])
40
+ raise ArgumentError, "Please only use one of the arguments at a time." if (options['option_cancelled'] && options["option_finished"])
41
+ cancelled = "state=cancelled" if options["option_cancelled"]
42
+ finished = "state=finished" if options["option_finished"]
43
+ params["search"] = cancelled || finished
44
+ params
45
+ end
46
+
47
+ command_name 'delete'
48
+ desc _("Delete all recuring logics filtered by the arguments")
49
+ failure_message _('Could not delete recurring logics')
50
+ output ListCommand.output_definition
51
+
52
+ def execute
53
+ response = send_request
54
+ if response.length > 0
55
+ puts _('The following recurring logics deleted:') + "\n"
56
+ print_data(response)
57
+ else
58
+ puts _("No recurring logics deleted.")
59
+ end
60
+ HammerCLI::EX_OK
61
+ end
62
+ end
29
63
 
30
64
  autoload_subcommands
31
65
  end
32
66
 
33
- HammerCLI::MainCommand.subcommand 'recurring-logic', _('Recurring logic related actions.'), RecurringLogic
67
+ HammerCLI::MainCommand.subcommand 'recurring-logic', _('Recurring logic related actions'), RecurringLogic
34
68
  end
@@ -3,6 +3,19 @@ module HammerCLIForemanTasks
3
3
 
4
4
  resource :foreman_tasks
5
5
 
6
+ module WithoutNameOption
7
+ def create_option_builder
8
+ HammerCLI::Apipie::OptionBuilder.new(resource, resource.action(action), :require_options => false)
9
+ end
10
+ end
11
+
12
+ module ActionField
13
+ def extend_data(task)
14
+ task["action"] = [task["humanized"]["action"], task["humanized"]["input"]].join(' ')
15
+ task
16
+ end
17
+ end
18
+
6
19
  class ProgressCommand < HammerCLIForeman::Command
7
20
 
8
21
  include HammerCLIForemanTasks::Helper
@@ -21,26 +34,52 @@ module HammerCLIForemanTasks
21
34
  end
22
35
 
23
36
  class ListCommand < HammerCLIForeman::ListCommand
37
+ extend WithoutNameOption
38
+ include ActionField
39
+
24
40
  output do
25
41
  field :id, _('ID')
26
- field :action, _('Name')
27
- field :username, _('Owner')
42
+ field :action, _('Action')
43
+ field :state, _('State')
44
+ field :result, _('Result')
28
45
  field :started_at, _('Started at'), Fields::Date
29
46
  field :ended_at, _('Ended at'), Fields::Date
47
+ field :username, _('Owner')
48
+
49
+ from :humanized do
50
+ field :errors, _('Task errors'), Fields::List, :hide_blank => true
51
+ end
52
+ end
53
+
54
+ build_options
55
+ end
56
+
57
+ class InfoCommand < HammerCLIForeman::InfoCommand
58
+ extend WithoutNameOption
59
+ include ActionField
60
+
61
+ output do
62
+ field :id, _('ID')
63
+ field :action, _('Action')
30
64
  field :state, _('State')
31
65
  field :result, _('Result')
66
+ field :started_at, _('Started at'), Fields::Date
67
+ field :ended_at, _('Ended at'), Fields::Date
68
+ field :username, _('Owner')
69
+
32
70
  from :humanized do
33
- field :action, _('Task action')
34
71
  field :errors, _('Task errors'), Fields::List, :hide_blank => true
35
72
  end
36
73
  end
37
74
 
38
75
  build_options
76
+
39
77
  end
40
78
 
41
79
  class ResumeCommand < HammerCLIForeman::InfoCommand
42
80
  action :bulk_resume
43
81
 
82
+
44
83
  command_name "resume"
45
84
  desc _("Resume all tasks paused in error state")
46
85
 
@@ -3,10 +3,11 @@ module HammerCLIForemanTasks
3
3
  class TaskProgress
4
4
  attr_accessor :interval, :task
5
5
 
6
- def initialize(task_id, &block)
6
+ def initialize(task_id, options = {}, &block)
7
7
  @update_block = block
8
8
  @task_id = task_id
9
9
  @interval = 2
10
+ @options = options
10
11
  end
11
12
 
12
13
  def render
@@ -43,8 +44,10 @@ module HammerCLIForemanTasks
43
44
  end
44
45
 
45
46
  def render_result
46
- puts @task['humanized']['output'] unless @task['humanized']['output'].to_s.empty?
47
- STDERR.puts "Error: #{@task['humanized']['errors'].join("\n")}" unless @task['humanized']['errors'].empty?
47
+ puts @task['humanized']['output'] if !@task['humanized']['output'].to_s.empty? && appropriate_verbosity?
48
+ unless @task['humanized']['errors'].nil? || @task['humanized']['errors'].empty?
49
+ STDERR.puts "Error: #{@task['humanized']['errors'].join("\n")}"
50
+ end
48
51
  end
49
52
 
50
53
  def update_task
@@ -61,11 +64,15 @@ module HammerCLIForemanTasks
61
64
  bar.settings.tty.finite.template.main = '[${<bar>}] [${<percent>%}]'
62
65
  bar.settings.tty.finite.template.padchar = ' '
63
66
  bar.settings.tty.finite.template.barchar = '.'
64
- bar.settings.tty.finite.output = Proc.new { |s| $stderr.print s }
67
+ bar.settings.tty.finite.output = Proc.new { |s| $stderr.print s if appropriate_verbosity? }
65
68
  yield bar
66
69
  ensure
67
70
  bar.close
68
71
  render_result
69
72
  end
73
+
74
+ def appropriate_verbosity?
75
+ @options[:verbosity] >= HammerCLI::V_VERBOSE
76
+ end
70
77
  end
71
78
  end
@@ -1,5 +1,5 @@
1
1
  module HammerCLIForemanTasks
2
2
  def self.version
3
- @version ||= Gem::Version.new('0.0.12')
3
+ @version ||= Gem::Version.new('0.0.16')
4
4
  end
5
5
  end
@@ -1,131 +1,98 @@
1
- # bkearney <bkearney@redhat.com>, 2016. #zanata
2
- # jdimanos <jdimanos@redhat.com>, 2016. #zanata
3
- # lstemmle <lstemmle@redhat.com>, 2016. #zanata
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the hammer_cli_foreman_tasks package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ # Translators:
7
+ # Wiederoder <stefanwiederoder@googlemail.com>, 2017
8
+ # Ettore Atalan <atalanttore@googlemail.com>, 2017
9
+ # Bryan Kearney <bryan.kearney@gmail.com>, 2017
10
+ #
11
+ #, fuzzy
4
12
  msgid ""
5
13
  msgstr ""
6
- "Project-Id-Version: hammer_cli_foreman_tasks 0.0.9\n"
14
+ "Project-Id-Version: hammer_cli_foreman_tasks 0.0.12\n"
7
15
  "Report-Msgid-Bugs-To: \n"
8
- "POT-Creation-Date: 2016-02-18 10:36-0500\n"
9
- "PO-Revision-Date: 2016-05-12 11:48+0000\n"
10
- "Last-Translator: lstemmle <lstemmle@redhat.com>\n"
11
- "Language-Team: German\n"
16
+ "PO-Revision-Date: 2017-09-11 13:45+0000\n"
17
+ "Last-Translator: Bryan Kearney <bryan.kearney@gmail.com>, 2017\n"
18
+ "Language-Team: German (https://www.transifex.com/foreman/teams/114/de/)\n"
12
19
  "MIME-Version: 1.0\n"
13
20
  "Content-Type: text/plain; charset=UTF-8\n"
14
21
  "Content-Transfer-Encoding: 8bit\n"
15
22
  "Language: de\n"
16
- "Plural-Forms: nplurals=2; plural=(n != 1)\n"
17
- "X-Generator: Zanata 3.8.4\n"
23
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
24
 
19
- #: ../lib/hammer_cli_foreman_tasks/recurring_logic.rb:7
20
- #: ../lib/hammer_cli_foreman_tasks/task.rb:25
21
25
  msgid "ID"
22
26
  msgstr "ID"
23
27
 
24
- #: ../lib/hammer_cli_foreman_tasks/recurring_logic.rb:8
25
28
  msgid "Cron line"
26
29
  msgstr "Cron-Zeile"
27
30
 
28
- #: ../lib/hammer_cli_foreman_tasks/recurring_logic.rb:9
29
31
  msgid "End time"
30
32
  msgstr "Endzeit"
31
33
 
32
- #: ../lib/hammer_cli_foreman_tasks/recurring_logic.rb:10
33
34
  msgid "Iteration"
34
35
  msgstr "Wiederholung"
35
36
 
36
- #: ../lib/hammer_cli_foreman_tasks/recurring_logic.rb:11
37
- #: ../lib/hammer_cli_foreman_tasks/task.rb:30
38
37
  msgid "State"
39
38
  msgstr "Status"
40
39
 
41
- #: ../lib/hammer_cli_foreman_tasks/recurring_logic.rb:25
42
- #, fuzzy
43
40
  msgid "Recurring logic cancelled."
44
- msgstr "Wiederkehrende Logik abgebrochen."
41
+ msgstr "Wiederholungslogik abgebrochen."
45
42
 
46
- #: ../lib/hammer_cli_foreman_tasks/recurring_logic.rb:26
47
43
  msgid "Could not cancel the recurring logic."
48
- msgstr "Wiederkehrende Logik konnte nicht abgebrochen werden."
44
+ msgstr "Wiederholungslogik konnte nicht abgebrochen werden."
49
45
 
50
- #: ../lib/hammer_cli_foreman_tasks/recurring_logic.rb:33
51
46
  msgid "Recurring logic related actions."
52
- msgstr "Aktionen im Zusammenhang mit wiederkehrender Logik"
47
+ msgstr "Aktionen im Zusammenhang mit Wiederholungslogik"
53
48
 
54
- #: ../lib/hammer_cli_foreman_tasks/task.rb:14
55
49
  msgid "Show the progress of the task"
56
50
  msgstr "Fortschritt der Aufgabe anzeigen"
57
51
 
58
- #: ../lib/hammer_cli_foreman_tasks/task.rb:26
59
52
  msgid "Name"
60
53
  msgstr "Name"
61
54
 
62
- #: ../lib/hammer_cli_foreman_tasks/task.rb:27
63
55
  msgid "Owner"
64
56
  msgstr "Besitzer"
65
57
 
66
- #: ../lib/hammer_cli_foreman_tasks/task.rb:28
67
58
  msgid "Started at"
68
59
  msgstr "Gestartet um"
69
60
 
70
- #: ../lib/hammer_cli_foreman_tasks/task.rb:29
71
61
  msgid "Ended at"
72
62
  msgstr "Beendet um"
73
63
 
74
- # translation auto-copied from project Red Hat Satellite Installation Guide,
75
- # version 6.0, document chap-
76
- # Uninstalling_Red_Hat_Satellite_Server_and_Capsule_Server
77
- #: ../lib/hammer_cli_foreman_tasks/task.rb:31
78
64
  msgid "Result"
79
65
  msgstr "Ergebnis"
80
66
 
81
- #: ../lib/hammer_cli_foreman_tasks/task.rb:33
82
- #: ../lib/hammer_cli_foreman_tasks/task.rb:54
83
- #: ../lib/hammer_cli_foreman_tasks/task.rb:63
84
- #: ../lib/hammer_cli_foreman_tasks/task.rb:72
85
67
  msgid "Task action"
86
68
  msgstr "Aufgabenaktion"
87
69
 
88
- #: ../lib/hammer_cli_foreman_tasks/task.rb:34
89
- #: ../lib/hammer_cli_foreman_tasks/task.rb:55
90
- #: ../lib/hammer_cli_foreman_tasks/task.rb:64
91
- #: ../lib/hammer_cli_foreman_tasks/task.rb:73
92
70
  msgid "Task errors"
93
71
  msgstr "Aufgabenfehler"
94
72
 
95
- #: ../lib/hammer_cli_foreman_tasks/task.rb:45
96
73
  msgid "Resume all tasks paused in error state"
97
74
  msgstr "Alle in Fehler-Status angehaltenen Aufgaben fortsetzen"
98
75
 
99
- #: ../lib/hammer_cli_foreman_tasks/task.rb:48
100
76
  msgid "Total tasks found paused in error state"
101
77
  msgstr "Alle in Fehler-Status gefundenen Aufgaben "
102
78
 
103
- #: ../lib/hammer_cli_foreman_tasks/task.rb:50
104
79
  msgid "Total tasks resumed"
105
80
  msgstr "Insgesamt fortgesetzte Aufgaben"
106
81
 
107
- #: ../lib/hammer_cli_foreman_tasks/task.rb:51
108
82
  msgid "Resumed tasks"
109
83
  msgstr "Fortgesetzte Aufgaben"
110
84
 
111
- #: ../lib/hammer_cli_foreman_tasks/task.rb:52
112
- #: ../lib/hammer_cli_foreman_tasks/task.rb:61
113
- #: ../lib/hammer_cli_foreman_tasks/task.rb:70
114
85
  msgid "Task identifier"
115
86
  msgstr "Aufgabenbezeichner"
116
87
 
117
- #: ../lib/hammer_cli_foreman_tasks/task.rb:59
118
88
  msgid "Total tasks failed to resume"
119
89
  msgstr "Gesamtzahl der Aufgaben, die nicht fortgesetzt werden konnten"
120
90
 
121
- #: ../lib/hammer_cli_foreman_tasks/task.rb:60
122
91
  msgid "Failed tasks"
123
92
  msgstr "Fehlgeschlagene Aufgaben"
124
93
 
125
- #: ../lib/hammer_cli_foreman_tasks/task.rb:68
126
94
  msgid "Total tasks skipped"
127
95
  msgstr "Insgesamt übersprungene Aufgaben"
128
96
 
129
- #: ../lib/hammer_cli_foreman_tasks/task.rb:69
130
97
  msgid "Skipped tasks"
131
98
  msgstr "Übersprungene Aufgaben"