diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 9b5ebce307bf7118e7d3193ea37d1cbc85552102..f1314d9ac4dcc1cde6774e2b3f9189607fc8725c 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -880,25 +880,52 @@ public class CouchDBDao implements IDatabaseDao { // Not all users have visited sessions if (d.getJSONObject().optJSONArray("value") != null) { @SuppressWarnings("unchecked") - final - Collection<Session> visitedSessions = JSONArray.toCollection( - d.getJSONObject().getJSONArray("value"), - Session.class - ); + final Collection<Session> visitedSessions = JSONArray.toCollection( + d.getJSONObject().getJSONArray("value"), + Session.class + ); allSessions.addAll(visitedSessions); } } // Do these sessions still exist? final List<Session> result = new ArrayList<Session>(); + final List<Session> deletedSessions = new ArrayList<Session>(); for (final Session s : allSessions) { try { final Session session = getSessionFromKeyword(s.getKeyword()); if (session != null) { result.add(session); + } else { + deletedSessions.add(s); } } catch (final NotFoundException e) { - // TODO Remove non existant session + deletedSessions.add(s); + } + } + if (deletedSessions.isEmpty()) { + return result; + } + // Update document to remove sessions that don't exist anymore + try { + List<VisitedSession> visitedSessions = new ArrayList<VisitedSession>(); + for (final Session s : result) { + visitedSessions.add(new VisitedSession(s)); } + final LoggedIn loggedIn = new LoggedIn(); + final Document loggedInDocument = getDatabase().getDocument(sessions.getResults().get(0).getString("id")); + loggedIn.setSessionId(loggedInDocument.getString("sessionId")); + loggedIn.setUser(user.getUsername()); + loggedIn.setTimestamp(loggedInDocument.getLong("timestamp")); + loggedIn.setType(loggedInDocument.getString("type")); + loggedIn.setVisitedSessions(visitedSessions); + loggedIn.set_id(loggedInDocument.getId()); + loggedIn.set_rev(loggedInDocument.getRev()); + + final JSONObject json = JSONObject.fromObject(loggedIn); + final Document doc = new Document(json); + getDatabase().saveDocument(doc); + } catch (IOException e) { + LOGGER.error("Could not clean up logged_in document of {}", user.getUsername()); } return result; }