mirror of
https://github.com/MarginaliaSearch/MarginaliaSearch.git
synced 2025-02-24 05:18:58 +00:00
(control/search) Add ability to suggest removing a site from random exploration
This is what most complaints have been about.
This commit is contained in:
parent
3047e2dd7c
commit
8e9698c9a0
@ -32,7 +32,8 @@ public class SearchFlagSiteService {
|
|||||||
new CategoryItem("freebooting", "Reposting Stolen Content"),
|
new CategoryItem("freebooting", "Reposting Stolen Content"),
|
||||||
new CategoryItem("broken", "Broken Website"),
|
new CategoryItem("broken", "Broken Website"),
|
||||||
new CategoryItem("shock", "Shocking/Offensive"),
|
new CategoryItem("shock", "Shocking/Offensive"),
|
||||||
new CategoryItem("blacklist", "Review Blacklisting")
|
new CategoryItem("blacklist", "Review Blacklisting"),
|
||||||
|
new CategoryItem("no-random", "Remove from Random Exploration")
|
||||||
);
|
);
|
||||||
|
|
||||||
private final Map<String, CategoryItem> categoryItemMap =
|
private final Map<String, CategoryItem> categoryItemMap =
|
||||||
|
@ -112,4 +112,4 @@
|
|||||||
|
|
||||||
</section>
|
</section>
|
||||||
</footer>
|
</footer>
|
||||||
<script src="tts.js" rel="javascript"></script>
|
<script src="/tts.js" rel="javascript"></script>
|
@ -6,6 +6,7 @@ public enum DomainComplaintCategory {
|
|||||||
BROKEN("broken"),
|
BROKEN("broken"),
|
||||||
SHOCK("shock"),
|
SHOCK("shock"),
|
||||||
BLACKLIST("blacklist"),
|
BLACKLIST("blacklist"),
|
||||||
|
REMOVE_EXPLORATION("no-random"),
|
||||||
UNKNOWN("unknown");
|
UNKNOWN("unknown");
|
||||||
|
|
||||||
private final String categoryName;
|
private final String categoryName;
|
||||||
|
@ -2,6 +2,7 @@ package nu.marginalia.control.app.svc;
|
|||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.zaxxer.hikari.HikariDataSource;
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
import nu.marginalia.control.Redirects;
|
import nu.marginalia.control.Redirects;
|
||||||
import nu.marginalia.control.app.model.DomainComplaintCategory;
|
import nu.marginalia.control.app.model.DomainComplaintCategory;
|
||||||
import nu.marginalia.control.app.model.DomainComplaintModel;
|
import nu.marginalia.control.app.model.DomainComplaintModel;
|
||||||
@ -27,16 +28,19 @@ public class DomainComplaintService {
|
|||||||
private final HikariDataSource dataSource;
|
private final HikariDataSource dataSource;
|
||||||
private final RendererFactory rendererFactory;
|
private final RendererFactory rendererFactory;
|
||||||
private final ControlBlacklistService blacklistService;
|
private final ControlBlacklistService blacklistService;
|
||||||
|
private final RandomExplorationService randomExplorationService;
|
||||||
private final Logger logger = LoggerFactory.getLogger(getClass());
|
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public DomainComplaintService(HikariDataSource dataSource,
|
public DomainComplaintService(HikariDataSource dataSource,
|
||||||
RendererFactory rendererFactory,
|
RendererFactory rendererFactory,
|
||||||
ControlBlacklistService blacklistService
|
ControlBlacklistService blacklistService,
|
||||||
|
RandomExplorationService randomExplorationService
|
||||||
) {
|
) {
|
||||||
this.dataSource = dataSource;
|
this.dataSource = dataSource;
|
||||||
this.rendererFactory = rendererFactory;
|
this.rendererFactory = rendererFactory;
|
||||||
this.blacklistService = blacklistService;
|
this.blacklistService = blacklistService;
|
||||||
|
this.randomExplorationService = randomExplorationService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register() throws IOException {
|
public void register() throws IOException {
|
||||||
@ -59,6 +63,7 @@ public class DomainComplaintService {
|
|||||||
return Map.of("complaintsNew", unreviewed, "complaintsReviewed", reviewed);
|
return Map.of("complaintsNew", unreviewed, "complaintsReviewed", reviewed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
private Object reviewComplaint(Request request, Response response) {
|
private Object reviewComplaint(Request request, Response response) {
|
||||||
var domain = new EdgeDomain(request.params("domain"));
|
var domain = new EdgeDomain(request.params("domain"));
|
||||||
String action = request.queryParams("action");
|
String action = request.queryParams("action");
|
||||||
@ -68,6 +73,7 @@ public class DomainComplaintService {
|
|||||||
switch (action) {
|
switch (action) {
|
||||||
case "noop" -> reviewNoAction(domain);
|
case "noop" -> reviewNoAction(domain);
|
||||||
case "appeal" -> approveAppealBlacklisting(domain);
|
case "appeal" -> approveAppealBlacklisting(domain);
|
||||||
|
case "no-random" -> removeFromRandomDomains(domain);
|
||||||
case "blacklist" -> blacklistDomain(domain);
|
case "blacklist" -> blacklistDomain(domain);
|
||||||
default -> throw new UnsupportedOperationException();
|
default -> throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
@ -75,7 +81,6 @@ public class DomainComplaintService {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<DomainComplaintModel> getComplaints() {
|
public List<DomainComplaintModel> getComplaints() {
|
||||||
try (var conn = dataSource.getConnection();
|
try (var conn = dataSource.getConnection();
|
||||||
var stmt = conn.prepareStatement("""
|
var stmt = conn.prepareStatement("""
|
||||||
@ -109,6 +114,12 @@ public class DomainComplaintService {
|
|||||||
setDecision(domain, "APPROVED");
|
setDecision(domain, "APPROVED");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void removeFromRandomDomains(EdgeDomain domain) throws SQLException {
|
||||||
|
randomExplorationService.removeDomain(domain);
|
||||||
|
|
||||||
|
setDecision(domain, "REMOVED-FROM-RANDOM");
|
||||||
|
}
|
||||||
|
|
||||||
public void blacklistDomain(EdgeDomain domain) {
|
public void blacklistDomain(EdgeDomain domain) {
|
||||||
blacklistService.addToBlacklist(domain, "Domain complaint");
|
blacklistService.addToBlacklist(domain, "Domain complaint");
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package nu.marginalia.control.app.svc;
|
|||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.zaxxer.hikari.HikariDataSource;
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
import gnu.trove.list.array.TIntArrayList;
|
import gnu.trove.list.array.TIntArrayList;
|
||||||
|
import nu.marginalia.model.EdgeDomain;
|
||||||
import nu.marginalia.renderer.RendererFactory;
|
import nu.marginalia.renderer.RendererFactory;
|
||||||
import spark.Request;
|
import spark.Request;
|
||||||
import spark.Response;
|
import spark.Response;
|
||||||
@ -108,6 +109,20 @@ public class RandomExplorationService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void removeDomain(EdgeDomain domain) throws SQLException {
|
||||||
|
try (var conn = dataSource.getConnection();
|
||||||
|
var stmt = conn.prepareStatement("""
|
||||||
|
DELETE EC_RANDOM_DOMAINS
|
||||||
|
FROM EC_RANDOM_DOMAINS
|
||||||
|
INNER JOIN EC_DOMAIN ON EC_DOMAIN.ID = EC_RANDOM_DOMAINS.DOMAIN_ID
|
||||||
|
WHERE EC_DOMAIN.DOMAIN_NAME = ?
|
||||||
|
"""))
|
||||||
|
{
|
||||||
|
stmt.setString(1, domain.toString());
|
||||||
|
stmt.executeUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public record RandomDomainResult(int id, String domainName) {}
|
public record RandomDomainResult(int id, String domainName) {}
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
{{#unless appeal}}
|
{{#unless appeal}}
|
||||||
<li><a class="dropdown-item" href="#" onClick="handleComplaint('{{domain}}', 'blacklist')">Add Sanction</a></li>
|
<li><a class="dropdown-item" href="#" onClick="handleComplaint('{{domain}}', 'blacklist')">Add Sanction</a></li>
|
||||||
|
<li><a class="dropdown-item" href="#" onClick="handleComplaint('{{domain}}', 'no-random')">Remove From Random Domains</a></li>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
<li><a class="dropdown-item" href="#" onClick="handleComplaint('{{domain}}', 'noop')">Ignore</a></li>
|
<li><a class="dropdown-item" href="#" onClick="handleComplaint('{{domain}}', 'noop')">Ignore</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
Loading…
Reference in New Issue
Block a user