189 for entry in entries: |
189 for entry in entries: |
190 entry.setID(nextID) |
190 entry.setID(nextID) |
191 self.__entries[nextID] = entry |
191 self.__entries[nextID] = entry |
192 nextID += 1 |
192 nextID += 1 |
193 |
193 |
|
194 if self.__plugin.getPreferences("AutoSave"): |
|
195 self.saveTrackerEntries() |
|
196 |
194 if invalidCount != 0 or duplicateCount != 0: |
197 if invalidCount != 0 or duplicateCount != 0: |
195 if invalidCount != 0 and duplicateCount != 0: |
198 if invalidCount != 0 and duplicateCount != 0: |
196 msg = self.tr("""<p>The time tracker file <b>{0}</b> contained""" |
199 msg = self.tr("""<p>The time tracker file <b>{0}</b> contained""" |
197 """ %n invalid entries.""", |
200 """ %n invalid entries.""", |
198 "", invalidCount).format(fname) |
201 "", invalidCount).format(fname) |
272 |
275 |
273 @param eid ID of the tracker entry (integer) |
276 @param eid ID of the tracker entry (integer) |
274 """ |
277 """ |
275 if eid in self.__entries: |
278 if eid in self.__entries: |
276 del self.__entries[eid] |
279 del self.__entries[eid] |
|
280 |
|
281 def removeDuplicateTrackerEntries(self): |
|
282 """ |
|
283 Public slot to remove duplicate time tracker entries. |
|
284 |
|
285 If entries with the identical start date and time are found, the one |
|
286 with the longest duration is kept. |
|
287 """ |
|
288 entries = {} |
|
289 for entry in self.__entries.values(): |
|
290 dt = entry.getStartDateTime() |
|
291 if dt in entries: |
|
292 if entry.getDuration() > entries[dt].getDuration(): |
|
293 entries[dt] = entry |
|
294 else: |
|
295 entries[dt] = entry |
|
296 |
|
297 self.__entries = {} |
|
298 nextID = 0 |
|
299 for entry in sorted(entries.values()): |
|
300 entry.setID(nextID) |
|
301 self.__entries[nextID] = entry |
|
302 nextID += 1 |
|
303 |
|
304 if self.__plugin.getPreferences("AutoSave"): |
|
305 self.saveTrackerEntries() |
|
306 |
|
307 self.__widget.clear() |
|
308 self.__widget.showTrackerEntries(sorted(self.__entries.values(), reverse=True)) |
|
309 self.__widget.setCurrentEntry(self.__currentEntry) |
|
310 |
|
311 def mergeDuplicateTrackerEntries(self): |
|
312 """ |
|
313 Public slot to merge duplicate time tracker entries. |
|
314 |
|
315 If entries with the identical start date and time are found, the durations |
|
316 of these entries are added. |
|
317 """ |
|
318 entries = {} |
|
319 for entry in self.__entries.values(): |
|
320 dt = entry.getStartDateTime() |
|
321 if dt in entries: |
|
322 entries[dt].addDuration(entry.getDuration()) |
|
323 else: |
|
324 entries[dt] = entry |
|
325 |
|
326 self.__entries = {} |
|
327 nextID = 0 |
|
328 for entry in sorted(entries.values()): |
|
329 entry.setID(nextID) |
|
330 self.__entries[nextID] = entry |
|
331 nextID += 1 |
|
332 |
|
333 if self.__plugin.getPreferences("AutoSave"): |
|
334 self.saveTrackerEntries() |
|
335 |
|
336 self.__widget.clear() |
|
337 self.__widget.showTrackerEntries(sorted(self.__entries.values(), reverse=True)) |
|
338 self.__widget.setCurrentEntry(self.__currentEntry) |