diff --git a/build.gradle.kts b/build.gradle.kts
index 185edfd..a1a5076 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -41,7 +41,7 @@ subprojects {
testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
implementation("de.srsoftware:configuration.api:1.0.2")
- implementation("de.srsoftware:tools.jdbc:2.0.2")
+ implementation("de.srsoftware:tools.jdbc:2.0.3")
implementation("de.srsoftware:tools.http:6.0.5")
implementation("de.srsoftware:tools.mime:1.1.3")
implementation("de.srsoftware:tools.logging:1.3.2")
diff --git a/frontend/src/routes/task/EasyList.svelte b/frontend/src/routes/task/EasyList.svelte
index 81183d7..96727be 100644
--- a/frontend/src/routes/task/EasyList.svelte
+++ b/frontend/src/routes/task/EasyList.svelte
@@ -16,17 +16,15 @@
let router = useTinyRouter();
let sorted = $derived(tasks ? Object.values(tasks).filter(noNoIndex).sort(byName) : null);
+ let start = 0;
+ let x = 0;
+ let y = 0;
+
+
function byName(a,b){
return a.name.localeCompare(b.name);
}
-
- function close(e,task){
- e.stopPropagation();
- e.preventDefault();
- update(task,60);
- }
-
function goTag(e,newTag){
e.preventDefault();
e.stopPropagation();
@@ -39,9 +37,8 @@
const url = api(`task/tagged/${tag}`);
const res = await get(url);
if (res.ok){
- tasks = await res.json();
- console.log(Object.values(tasks).map(t => t.name));
yikes();
+ tasks = await res.json();
input.focus();
} else error(res);
}
@@ -50,6 +47,12 @@
return !task.no_index;
}
+ function ignore(evt){
+ evt.preventDefault();
+ evt.stopPropagation();
+ return false;
+ }
+
function extend(e,task){
e.preventDefault();
e.stopPropagation();
@@ -57,10 +60,47 @@
return false;
}
- function open(e,task){
- e.stopPropagation();
- e.preventDefault();
- update(task,20);
+
+ function getTask(evt){
+ var link = evt.target;
+ var id = link.getAttribute('task_id');
+ return tasks[id];
+ }
+
+ function onclick(evt) {
+ let task = getTask(evt);
+ if (task.status <= 20) { // open
+ update(task,60);
+ } else update(task,20);
+ return ignore(evt);
+ }
+
+ function oncontextmenu(evt) {
+ highlight = getTask(evt);
+ return ignore(evt);
+ }
+
+ function ontouchstart(evt){
+ start = evt.timeStamp;
+ x = evt.touches[0].clientX;
+ y = evt.touches[0].clientY;
+ return ignore(evt);
+ }
+
+ function ontouchend(evt){
+ let d = Math.abs(x - evt.changedTouches[0].clientX) + Math.abs(y - evt.changedTouches[0].clientY);
+ measured(evt, evt.timeStamp - start, d);
+ return ignore(evt);
+ }
+
+
+ function measured(evt,duration,d){
+ if (d > 100) return;
+ if (duration < 500){
+ onclick(evt);
+ } else {
+ oncontextmenu(evt);
+ }
}
async function update(task,newState){
@@ -87,7 +127,7 @@
{#if sorted}
{#each sorted as task}
{#if task.status == 20 && (!filter || task.name.toLowerCase().includes(search))}
- close(e,task)} oncontextmenu={e => extend(e,task)} >
+
{task.name}
{#if highlight == task}
@@ -103,7 +143,7 @@
{#if sorted}
{#each sorted as task}
{#if task.status > 20 && (!filter || task.name.toLowerCase().includes(search))}
- open(e,task)} oncontextmenu={e => extend(e,task)} >
+
{task.name}
{#if highlight == task}
diff --git a/tags/src/main/java/de/srsoftware/umbrella/tags/SqliteDb.java b/tags/src/main/java/de/srsoftware/umbrella/tags/SqliteDb.java
index 3f9d80e..db33e60 100644
--- a/tags/src/main/java/de/srsoftware/umbrella/tags/SqliteDb.java
+++ b/tags/src/main/java/de/srsoftware/umbrella/tags/SqliteDb.java
@@ -204,10 +204,10 @@ CREATE TABLE IF NOT EXISTS {0} (
public String delete(long userId, String module, long entityId, String tag) {
try {
Query.delete().from(TABLE_TAGS)
- .where(TAG,equal(tag)).where(MODULE,equal(module)).where(ENTITY_ID,equal(entityId)).where(USER_ID,equal(userId))
+ .where(TAG,iEqual(tag)).where(MODULE,iEqual(module)).where(ENTITY_ID,equal(entityId)).where(USER_ID,equal(userId))
.execute(db);
Query.delete().from(TABLE_TAGS)
- .where(TAG,equal(tag)).where(MODULE,equal(module)).where(ENTITY_ID,equal(entityId)).where(USER_ID,isNull())
+ .where(TAG,iEqual(tag)).where(MODULE,iEqual(module)).where(ENTITY_ID,equal(entityId)).where(USER_ID,isNull())
.execute(db);
return tag;
} catch (SQLException e){
@@ -219,7 +219,7 @@ CREATE TABLE IF NOT EXISTS {0} (
public void deleteEntity(String module, long entityId) {
try {
Query.delete().from(TABLE_TAGS)
- .where(MODULE,equal(module)).where(ENTITY_ID,equal(entityId))
+ .where(MODULE,iEqual(module)).where(ENTITY_ID,equal(entityId))
.execute(db);
} catch (SQLException e){
throw new UmbrellaException("Failed to save tags ({0} {1})",module,entityId);
@@ -229,7 +229,7 @@ CREATE TABLE IF NOT EXISTS {0} (
@Override
public Map> getUses(String tag, long userId) {
try {
- var rs = select(ALL).from(TABLE_TAGS).where(TAG,equal(tag)).where(USER_ID,equal(userId)).exec(db);
+ var rs = select(ALL).from(TABLE_TAGS).where(TAG,iEqual(tag)).where(USER_ID,equal(userId)).exec(db);
var result = new HashMap>();
while (rs.next()){
var module = rs.getString(MODULE);
@@ -237,7 +237,7 @@ CREATE TABLE IF NOT EXISTS {0} (
result.computeIfAbsent(module, k -> new ArrayList<>()).add(entityId);
}
rs.close();
- rs = select(ALL).from(TABLE_TAGS).where(TAG,equal(tag)).where(USER_ID,isNull()).exec(db);
+ rs = select(ALL).from(TABLE_TAGS).where(TAG,iEqual(tag)).where(USER_ID,isNull()).exec(db);
while (rs.next()){
var module = rs.getString(MODULE);
var entityId = rs.getLong(ENTITY_ID);
@@ -256,12 +256,12 @@ CREATE TABLE IF NOT EXISTS {0} (
var tags = new HashSet();
// load tags assigned to user
- var rs = select(TAG).from(TABLE_TAGS).where(MODULE,equal(module)).where(ENTITY_ID,equal(entityId)).where(USER_ID,equal(userId)).exec(db);
+ var rs = select(TAG).from(TABLE_TAGS).where(MODULE,iEqual(module)).where(ENTITY_ID,equal(entityId)).where(USER_ID,equal(userId)).exec(db);
while (rs.next()) tags.add(rs.getString(1));
rs.close();
// load tags assigned to no user
- rs = select(TAG).from(TABLE_TAGS).where(MODULE,equal(module)).where(ENTITY_ID,equal(entityId)).where(USER_ID,isNull()).exec(db);
+ rs = select(TAG).from(TABLE_TAGS).where(MODULE,iEqual(module)).where(ENTITY_ID,equal(entityId)).where(USER_ID,isNull()).exec(db);
while (rs.next()) tags.add(rs.getString(1));
rs.close();
return tags;
@@ -294,12 +294,12 @@ CREATE TABLE IF NOT EXISTS {0} (
var tags = new HashMap>();
// load tags assigned to user
- var rs = select(ENTITY_ID,TAG).from(TABLE_TAGS).where(MODULE,equal(module)).where(ENTITY_ID,in(entityIds.toArray())).where(USER_ID,equal(userId)).exec(db);
+ var rs = select(ENTITY_ID,TAG).from(TABLE_TAGS).where(MODULE,iEqual(module)).where(ENTITY_ID,in(entityIds.toArray())).where(USER_ID,equal(userId)).exec(db);
while (rs.next()) tags.computeIfAbsent(rs.getLong(ENTITY_ID), k -> new HashSet<>()).add(rs.getString(TAG));
rs.close();
// load tags assigned to no user
- rs = select(ENTITY_ID,TAG).from(TABLE_TAGS).where(MODULE,equal(module)).where(ENTITY_ID,in(entityIds.toArray())).where(USER_ID,isNull()).exec(db);
+ rs = select(ENTITY_ID,TAG).from(TABLE_TAGS).where(MODULE,iEqual(module)).where(ENTITY_ID,in(entityIds.toArray())).where(USER_ID,isNull()).exec(db);
while (rs.next()) tags.computeIfAbsent(rs.getLong(ENTITY_ID), k -> new HashSet<>()).add(rs.getString(TAG));
rs.close();
return tags;
@@ -328,7 +328,7 @@ CREATE TABLE IF NOT EXISTS {0} (
@Override
public void updateId(String module, Object oldId, Object newId) {
try {
- update(TABLE_TAGS).set(ENTITY_ID).where(MODULE,equal(module)).where(ENTITY_ID,equal(oldId)).prepare(db).apply(newId).close();
+ update(TABLE_TAGS).set(ENTITY_ID).where(MODULE,iEqual(module)).where(ENTITY_ID,equal(oldId)).prepare(db).apply(newId).close();
LOG.log(DEBUG,"Updated tag @ {0}.{1} → {0}.{2}",module,oldId,newId);
} catch (SQLException e) {
throw databaseException("Failed to update {0}.{1} → {0}.{2}",module,oldId,newId);