| 117 | } |
| 118 | |
| 119 | func getTasksRecursively(folder *ole.IDispatch) (tasks []Task) { |
| 120 | var ( |
| 121 | variant *ole.VARIANT |
| 122 | err error |
| 123 | ) |
| 124 | // Get Tasks in subfolders first |
| 125 | if variant, err = oleutil.CallMethod(folder, "GetFolders", int64(0)); err != nil { |
| 126 | return |
| 127 | } |
| 128 | folderIterator := variant.ToIDispatch() |
| 129 | if variant, err = oleutil.GetProperty(folderIterator, "count"); err != nil { |
| 130 | return |
| 131 | } |
| 132 | count, _ := variant.Value().(int32) |
| 133 | for i := int32(1); i <= count; i++ { |
| 134 | // Get Tasks of subfolder i |
| 135 | index := ole.NewVariant(ole.VT_I4, int64(i)) |
| 136 | if variant, err = oleutil.GetProperty(folderIterator, "item", &index); err != nil { |
| 137 | continue |
| 138 | } |
| 139 | subfolder := variant.ToIDispatch() |
| 140 | subtasks := getTasksRecursively(subfolder) |
| 141 | tasks = append(tasks, subtasks...) |
| 142 | subfolder.Release() |
| 143 | } |
| 144 | folderIterator.Release() |
| 145 | // Get Tasks |
| 146 | if variant, err = oleutil.CallMethod(folder, "GetTasks", int64(0)); err != nil { |
| 147 | return |
| 148 | } |
| 149 | taskIterator := variant.ToIDispatch() |
| 150 | if variant, err = oleutil.GetProperty(taskIterator, "count"); err != nil { |
| 151 | return |
| 152 | } |
| 153 | count, _ = variant.Value().(int32) |
| 154 | for i := int32(1); i <= count; i++ { |
| 155 | // Get Task i |
| 156 | index := ole.NewVariant(ole.VT_I4, int64(i)) |
| 157 | if variant, err = oleutil.GetProperty(taskIterator, "item", &index); err != nil { |
| 158 | continue |
| 159 | } |
| 160 | task := variant.ToIDispatch() |
| 161 | var t Task |
| 162 | if variant, err = oleutil.GetProperty(task, "name"); err == nil { |
| 163 | t.Name = variant.ToString() |
| 164 | } |
| 165 | if variant, err = oleutil.GetProperty(task, "path"); err == nil { |
| 166 | t.Path = variant.ToString() |
| 167 | } |
| 168 | if variant, err = oleutil.GetProperty(task, "enabled"); err == nil { |
| 169 | t.Enabled, _ = variant.Value().(bool) |
| 170 | } |
| 171 | if variant, err = oleutil.GetProperty(task, "lastRunTime"); err == nil { |
| 172 | t.LastRunTime, _ = variant.Value().(time.Time) |
| 173 | } |
| 174 | if variant, err = oleutil.GetProperty(task, "nextRunTime"); err == nil { |
| 175 | t.NextRunTime, _ = variant.Value().(time.Time) |
| 176 | } |