Browse Source

improvemnts:

- ordering of bookmarks
- limitation of bookmarks on index page
- date for bookmarks that did not have a date before the transition
featue/module_registry
Stephan Richter 3 months ago
parent
commit
a450ef97b8
  1. 15
      bookmark/src/main/java/de/srsoftware/umbrella/bookmarks/BookmarkApi.java
  2. 2
      bookmark/src/main/java/de/srsoftware/umbrella/bookmarks/BookmarkDb.java
  3. 4
      bookmark/src/main/java/de/srsoftware/umbrella/bookmarks/SqliteDb.java
  4. 7
      core/src/main/java/de/srsoftware/umbrella/core/Constants.java
  5. 4
      frontend/src/routes/bookmark/Index.svelte
  6. 23
      tags/src/main/java/de/srsoftware/umbrella/tags/SqliteDb.java

15
bookmark/src/main/java/de/srsoftware/umbrella/bookmarks/BookmarkApi.java

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.bookmarks;
import static de.srsoftware.tools.Optionals.nullable;
import static de.srsoftware.umbrella.bookmarks.Constants.*;
import static de.srsoftware.umbrella.core.ConnectionProvider.connect;
import static de.srsoftware.umbrella.core.Constants.*;
@ -85,7 +86,19 @@ public class BookmarkApi extends BaseHandler { @@ -85,7 +86,19 @@ public class BookmarkApi extends BaseHandler {
}
private boolean getUserBookmarks(UmbrellaUser user, HttpExchange ex) throws IOException {
var bookmarks = db.list(user.id());
var param = queryParam(ex);
long offset = switch (param.get(OFFSET)){
case String s -> Long.parseLong(s);
case Number n -> n.longValue();
case null, default -> 0;
};
long limit = switch (param.get(LIMIT)){
case String s -> Long.parseLong(s);
case Number n -> n.longValue();
case null, default -> 100;
};
var bookmarks = db.list(user.id(),offset,limit);
return sendContent(ex,mapValues(bookmarks));
}

2
bookmark/src/main/java/de/srsoftware/umbrella/bookmarks/BookmarkDb.java

@ -8,7 +8,7 @@ import java.util.Collection; @@ -8,7 +8,7 @@ import java.util.Collection;
import java.util.Map;
public interface BookmarkDb {
Map<Long, Bookmark> list(long userId);
Map<Long, Bookmark> list(long userId, long offset, long limit);
Bookmark load(long id, long userId);

4
bookmark/src/main/java/de/srsoftware/umbrella/bookmarks/SqliteDb.java

@ -69,10 +69,10 @@ CREATE TABLE IF NOT EXISTS {0} ( @@ -69,10 +69,10 @@ CREATE TABLE IF NOT EXISTS {0} (
}
@Override
public Map<Long, Bookmark> list(long userId) {
public Map<Long, Bookmark> list(long userId, long offset, long limit) {
try {
var map = new HashMap<Long,Bookmark>();
var rs = select(ALL).from(TABLE_URL_COMMENTS).leftJoin(URL_ID,TABLE_URLS,ID).where(USER_ID, equal(userId)).exec(db);
var rs = select(ALL).from(TABLE_URL_COMMENTS).leftJoin(URL_ID,TABLE_URLS,ID).where(USER_ID, equal(userId)).sort(format("{0} DESC",TIMESTAMP)).skip(offset).limit(limit).exec(db);
while (rs.next()){
var bookmark = Bookmark.of(rs);
map.put(bookmark.urlId(),bookmark);

7
core/src/main/java/de/srsoftware/umbrella/core/Constants.java

@ -67,9 +67,10 @@ public class Constants { @@ -67,9 +67,10 @@ public class Constants {
public static final String JSONOBJECT = "json object";
public static final String KEY = "key";
public static final String LANGUAGE = "language";
public static final String LANGUAGE = "language";
public static final String LAST_CUSTOMER_NUMBER = "last_customer_number";
public static final String LOGIN = "login";
public static final String LIMIT = "limit";
public static final String LOGIN = "login";
public static final String MEMBERS = "members";
public static final String MESSAGES = "messages";
@ -82,7 +83,9 @@ public class Constants { @@ -82,7 +83,9 @@ public class Constants {
public static final String NOTE = "note";
public static final String NUMBER = "number";
public static final String OFFSET = "offset";
public static final String OPTIONAL = "optional";
public static final String PARENT_TASK_ID = "parent_task_id";
public static final String PASS = "pass";
public static final String PASSWORD = "password";

4
frontend/src/routes/bookmark/Index.svelte

@ -40,8 +40,8 @@ @@ -40,8 +40,8 @@
}
}
async function loadBookmarks(){
const url = api('bookmark/list');
async function loadBookmarks(offset=0,limit=100){
const url = api(`bookmark/list?offset=${offset}&limit=${limit}`);
const resp = await fetch(url,{credentials:'include'});
if (resp.ok){
const raw = await resp.json();

23
tags/src/main/java/de/srsoftware/umbrella/tags/SqliteDb.java

@ -3,8 +3,7 @@ package de.srsoftware.umbrella.tags; @@ -3,8 +3,7 @@ package de.srsoftware.umbrella.tags;
import static de.srsoftware.tools.Optionals.is0;
import static de.srsoftware.tools.Optionals.isSet;
import static de.srsoftware.tools.jdbc.Condition.equal;
import static de.srsoftware.tools.jdbc.Condition.isNull;
import static de.srsoftware.tools.jdbc.Condition.*;
import static de.srsoftware.tools.jdbc.Query.*;
import static de.srsoftware.tools.jdbc.Query.Dialect.SQLITE;
import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL;
@ -17,6 +16,7 @@ import static java.lang.System.Logger.Level.*; @@ -17,6 +16,7 @@ import static java.lang.System.Logger.Level.*;
import static java.text.MessageFormat.format;
import static java.time.ZoneOffset.UTC;
import de.srsoftware.tools.jdbc.Condition;
import de.srsoftware.tools.jdbc.Query;
import de.srsoftware.umbrella.bookmarks.BookmarkDb;
import de.srsoftware.umbrella.core.BaseDb;
@ -28,10 +28,8 @@ import java.util.*; @@ -28,10 +28,8 @@ import java.util.*;
import java.util.regex.Pattern;
public class SqliteDb extends BaseDb implements TagDB{
private static final System.Logger LOG = System.getLogger("TagDB");
private final BookmarkDb bookmarks;
public SqliteDb(Connection tagDb, Connection bmDb) {
super(tagDb);
bookmarks = new de.srsoftware.umbrella.bookmarks.SqliteDb(bmDb);
@ -54,13 +52,19 @@ public class SqliteDb extends BaseDb implements TagDB{ @@ -54,13 +52,19 @@ public class SqliteDb extends BaseDb implements TagDB{
dropOldTables();
renameNewTagTable();
}
return setCurrentVersion(2);
version = setCurrentVersion(2);
LOG.log(INFO,"Updated db to version {0}",version);
return version;
}
private void splitContentToBookmarks() {
var pattern = Pattern.compile("/([^/]+)/(\\d+)/view");
try {
LocalDateTime earliestDate = LocalDateTime.of(2000,1,1,0,0);
var rs = select(ALL).from(TABLE_URLS).leftJoin(HASH,TABLE_URL_COMMENTS,URL_HASH).leftJoin(COMMENT_HASH,TABLE_COMMENTS,HASH).where(TIMESTAMP,moreThan(0)).limit(1).exec(db);
if (rs.next()) earliestDate = LocalDateTime.ofEpochSecond(rs.getLong(1),0,UTC);
rs.close();
var sql = "CREATE TABLE IF NOT EXISTS tags_new (TAG)";
db.prepareStatement(sql).execute();
// IMPORT BOOKMARKS
@ -75,7 +79,7 @@ public class SqliteDb extends BaseDb implements TagDB{ @@ -75,7 +79,7 @@ public class SqliteDb extends BaseDb implements TagDB{
var timestamp = commentedURLS.getLong(TIMESTAMP);
var comment = commentedURLS.getString(COMMENT);
if (!isSet(comment)) comment = "";
var dt = is0(timestamp) ? LocalDateTime.now() : LocalDateTime.ofEpochSecond(timestamp,0,UTC);
var dt = is0(timestamp) ? earliestDate : LocalDateTime.ofEpochSecond(timestamp,0,UTC);
var bm = bookmarks.save(url,comment,List.of(userId),dt.withNano(0));
String module = null;
@ -245,11 +249,6 @@ CREATE TABLE IF NOT EXISTS {0} ( @@ -245,11 +249,6 @@ CREATE TABLE IF NOT EXISTS {0} (
}
}
private void init(){
var version = createTables();
LOG.log(INFO,"Updated task db to version {0}",version);
}
@Override
public Set<String> list(long userId, String module, long entityId) {
try {

Loading…
Cancel
Save