From bf0f000911496baab4bef0502db477f7699aeb45 Mon Sep 17 00:00:00 2001 From: Damian Minkov Date: Fri, 29 Jun 2012 06:53:05 +0000 Subject: [PATCH] Prevents us from adding duplicate dates in history window. --- .../gui/main/chat/history/HistoryWindow.java | 58 ++++++++++++------- .../impl/protocol/jabber/InfoRetreiver.java | 9 ++- 2 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/history/HistoryWindow.java b/src/net/java/sip/communicator/impl/gui/main/chat/history/HistoryWindow.java index 6f6a87257..d61a46633 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/history/HistoryWindow.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/history/HistoryWindow.java @@ -90,7 +90,7 @@ public class HistoryWindow private String searchKeyword; - private Vector datesVector = new Vector(); + private Set datesDisplayed = new LinkedHashSet(); private Date ignoreProgressDate; @@ -395,11 +395,21 @@ protected void windowClosing(WindowEvent e) */ public Date getNextDateFromHistory(Date date) { - int dateIndex = datesVector.indexOf(date); - if(dateIndex < datesVector.size() - 1) - return datesVector.get(dateIndex + 1); - else - return new Date(System.currentTimeMillis()); + Iterator iterator = datesDisplayed.iterator(); + while(iterator.hasNext()) + { + Date curr = iterator.next(); + if(curr.equals(date)) + { + if(iterator.hasNext()) + return iterator.next(); + else + break; + } + } + + long ts = System.currentTimeMillis(); + return new Date(ts - ts % (24*60*60*1000)); } /** @@ -505,17 +515,22 @@ else if (o instanceof FileRecord) boolean containsDate = false; long milisecondsPerDay = 24*60*60*1000; - for(int j = 0; !containsDate && j < datesVector.size(); j ++) + Iterator iterator = datesDisplayed.iterator(); + while(iterator.hasNext()) { - Date date1 = datesVector.get(j); - - containsDate = Math.floor(date1.getTime()/milisecondsPerDay) + Date curr = iterator.next(); + containsDate = + Math.floor(curr.getTime()/milisecondsPerDay) == Math.floor(date/milisecondsPerDay); + + if(containsDate) + break; } if(!containsDate) { - datesVector.add(new Date(date - date % milisecondsPerDay)); + datesDisplayed.add( + new Date(date - date % milisecondsPerDay)); } } @@ -524,9 +539,11 @@ else if (o instanceof FileRecord) Runnable updateDatesPanel = new Runnable() { public void run() { Date date = null; - for(int i = 0; i < datesVector.size(); i++) { - date = datesVector.get(i); - datesPanel.addDate(date); + for(Date curr : datesDisplayed) + { + date = curr; + if(!datesPanel.containsDate(date)) + datesPanel.addDate(date); } if(date != null) { ignoreProgressDate = date; @@ -665,15 +682,12 @@ else if (o instanceof MessageReceivedEvent) } long milisecondsPerDay = 24*60*60*1000; - for(int j = 0; j < datesVector.size(); j ++) + for(Date date1 : datesDisplayed) { - Date date1 = datesVector.get(j); - if(Math.floor(date1.getTime()/milisecondsPerDay) == Math.floor(date/milisecondsPerDay) && !keywordDatesVector.contains(date1)) { - keywordDatesVector.add(date1); } } @@ -706,7 +720,8 @@ public void run() * datesPanel.addDate(date); * } }*/ - datesPanel.addDate(date); + if(!datesPanel.containsDate(date)) + datesPanel.addDate(date); } if(date != null) { @@ -865,8 +880,9 @@ else if (lastDate == null Date date = new Date(timestamp - timestamp % milisecondsPerDay); - datesVector.add(date); - datesPanel.addDate(date); + datesDisplayed.add(date); + if(!datesPanel.containsDate(date)) + datesPanel.addDate(date); } } } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/InfoRetreiver.java b/src/net/java/sip/communicator/impl/protocol/jabber/InfoRetreiver.java index a5161bfe4..b7bfc5b2f 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/InfoRetreiver.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/InfoRetreiver.java @@ -289,9 +289,12 @@ protected List retrieveDetails(String contactAddress) } catch (Throwable exc) { - logger.error("Cannot load details for contact " - + this + " : " + exc.getMessage() - , exc); + String msg = "Cannot load details for contact " + + contactAddress + " : " + exc.getMessage(); + if(logger.isTraceEnabled()) + logger.error(msg, exc); + else + logger.error(msg); } retreivedDetails.put(contactAddress, result);