--- a/TimeTracker/TimeTracker.py Sun Oct 21 14:53:23 2012 +0200 +++ b/TimeTracker/TimeTracker.py Sun Oct 21 15:33:36 2012 +0200 @@ -191,6 +191,9 @@ self.__entries[nextID] = entry nextID += 1 + if self.__plugin.getPreferences("AutoSave"): + self.saveTrackerEntries() + if invalidCount != 0 or duplicateCount != 0: if invalidCount != 0 and duplicateCount != 0: msg = self.tr("""<p>The time tracker file <b>{0}</b> contained""" @@ -274,3 +277,62 @@ """ if eid in self.__entries: del self.__entries[eid] + + def removeDuplicateTrackerEntries(self): + """ + Public slot to remove duplicate time tracker entries. + + If entries with the identical start date and time are found, the one + with the longest duration is kept. + """ + entries = {} + for entry in self.__entries.values(): + dt = entry.getStartDateTime() + if dt in entries: + if entry.getDuration() > entries[dt].getDuration(): + entries[dt] = entry + else: + entries[dt] = entry + + self.__entries = {} + nextID = 0 + for entry in sorted(entries.values()): + entry.setID(nextID) + self.__entries[nextID] = entry + nextID += 1 + + if self.__plugin.getPreferences("AutoSave"): + self.saveTrackerEntries() + + self.__widget.clear() + self.__widget.showTrackerEntries(sorted(self.__entries.values(), reverse=True)) + self.__widget.setCurrentEntry(self.__currentEntry) + + def mergeDuplicateTrackerEntries(self): + """ + Public slot to merge duplicate time tracker entries. + + If entries with the identical start date and time are found, the durations + of these entries are added. + """ + entries = {} + for entry in self.__entries.values(): + dt = entry.getStartDateTime() + if dt in entries: + entries[dt].addDuration(entry.getDuration()) + else: + entries[dt] = entry + + self.__entries = {} + nextID = 0 + for entry in sorted(entries.values()): + entry.setID(nextID) + self.__entries[nextID] = entry + nextID += 1 + + if self.__plugin.getPreferences("AutoSave"): + self.saveTrackerEntries() + + self.__widget.clear() + self.__widget.showTrackerEntries(sorted(self.__entries.values(), reverse=True)) + self.__widget.setCurrentEntry(self.__currentEntry)