Skip to content
Snippets Groups Projects
Commit df56a359 authored by Marcel Kehrberg's avatar Marcel Kehrberg
Browse files

Merge branch 'BrowserAddonV1.1' into 'develop'

Änderungen

See merge request !68
parents 8090b1c3 fa23741f
No related branches found
No related tags found
1 merge request!68Änderungen
No preview for this file type
...@@ -2,6 +2,7 @@ let socket; ...@@ -2,6 +2,7 @@ let socket;
let trackingAktiv = false; let trackingAktiv = false;
let isConnected = false; let isConnected = false;
let distraktions; let distraktions;
let withBlock;
function connectWebSocket() { function connectWebSocket() {
if (isConnected) { if (isConnected) {
...@@ -23,13 +24,13 @@ function connectWebSocket() { ...@@ -23,13 +24,13 @@ function connectWebSocket() {
console.log("Verbunden mit der WPF-Anwendung."); console.log("Verbunden mit der WPF-Anwendung.");
clearTimeout(connectionTimeout); clearTimeout(connectionTimeout);
isConnected = true; // Markiere als verbunden isConnected = true; // Markiere als verbunden
socket.send("Hallo vom Addon"); socket.send("{\"action\": \"connected\", \"status\": true}");
}; };
// Empfang von Nachrichten // Empfang von Nachrichten
socket.onmessage = function(event) { socket.onmessage = function(event) {
const message = parseMessage(event.data); const message = parseMessage(event.data);
console.log("Nachricht empfangen: ", message); //console.log("Nachricht empfangen: ", message);
//navigator.clipboard.writeText(message); //navigator.clipboard.writeText(message);
if(message.action === "sendJsonContent") { if(message.action === "sendJsonContent") {
...@@ -46,11 +47,21 @@ function connectWebSocket() { ...@@ -46,11 +47,21 @@ function connectWebSocket() {
removeTabListeners(); removeTabListeners();
trackingAktiv = false; trackingAktiv = false;
} }
if (message.action === "BlockMode" && message.status === true) {
withBlock = true;
console.log("Nachricht empfangen: ", message);
} else if(message.action === "noBlockMode" && message.status === false) {
withBlock = false;
console.log("Nachricht empfangen: ", message);
}
}; };
socket.onclose = function() { socket.onclose = function() {
console.log("Verbindung geschlossen."); console.log("Verbindung geschlossen.");
isConnected = false; isConnected = false;
removeTabListeners();
trackingAktiv = false;
// Versuche, nach einer kurzen Zeit erneut eine Verbindung herzustellen // Versuche, nach einer kurzen Zeit erneut eine Verbindung herzustellen
setTimeout(connectWebSocket, 5000); // 5 Sekunden warten, bevor erneut versucht wird setTimeout(connectWebSocket, 5000); // 5 Sekunden warten, bevor erneut versucht wird
}; };
...@@ -59,19 +70,18 @@ function connectWebSocket() { ...@@ -59,19 +70,18 @@ function connectWebSocket() {
console.error("WebSocket Fehler:", error); console.error("WebSocket Fehler:", error);
socket.close(); // Schließe den Socket, um den Fehler zu behandeln und es erneut zu versuchen socket.close(); // Schließe den Socket, um den Fehler zu behandeln und es erneut zu versuchen
}; };
} }
connectWebSocket(); connectWebSocket();
addTabListeners(); //addTabListeners();
function createDistractionList(message) { function createDistractionList(message) {
const result = {}; const result = {};
for (content in message) { for (category in message["content"]) {
const distractingUrls = message["content"]["Games"].filter(item => item.distracting).map(item => item.url); const distractingUrls = message["content"][category].filter(item => item.distracting).map(item => item.url);
if (distractingUrls.length > 0) { if (distractingUrls.length > 0) {
result[content] = distractingUrls; result[category] = distractingUrls;
} }
} }
return result; return result;
...@@ -121,15 +131,21 @@ function handlerTabActiv(activeInfo) { ...@@ -121,15 +131,21 @@ function handlerTabActiv(activeInfo) {
function checkUrl(url, tabId) { function checkUrl(url, tabId) {
for (content in distraktions.content) { for (category in distraktions) {
//const content = "youtube.com"; //const content = "youtube.com";
if (url.includes(distraktions["content"][content])) { //console.log(category);
socket.send(`Distraktion Bemerkt: ${url}`);
for (element in distraktions[category]) {
browser.tabs.query({ active: true, currentWindow: true }).then((tabs) => { if (url.includes(distraktions[category][element])) {
const activeTab = tabs[0]; socket.send(`Distraktion Bemerkt: ${url}`);
browser.tabs.sendMessage(activeTab.id, { action: "showOverlay", tabId: tabId });
}); if(withBlock) {
browser.tabs.query({ active: true, currentWindow: true }).then((tabs) => {
const activeTab = tabs[0];
browser.tabs.sendMessage(activeTab.id, { action: "showOverlay", tabId: tabId });
});
}
}
} }
} }
}; };
\ No newline at end of file
{ {
"manifest_version": 3, "manifest_version": 2,
"name": "URL-Kopierer", "name": "CoFlow",
"version": "1.0", "version": "1.1",
"description": "Kopiert die URL des aktiven Tabs in die Zwischenablage.", "description": "Überprüft ob nicht gewünschte Tab aufgerufne werden und Blockiert diese dann wenn dies wenn die Setting das vrogeben.",
"permissions": ["tabs", "activeTab", "scripting", "clipboardWrite"], "permissions": ["tabs", "activeTab", "scripting", "clipboardWrite", "<all_urls>"],
"host_permissions": ["<all_urls>"],
"background": { "background": {
"scripts": ["background.js"], "scripts": ["background.js"],
"persistent": false "persistent": false
}, },
"action": { "browser_action": {
"default_popup": "popup.html", "default_popup": "popup.html"
"default_icon": "icon.png"
}, },
"content_security_policy": { "content_security_policy": "script-src 'self'; object-src 'self'; connect-src 'self' ws://localhost:8080",
"extension_pages": "script-src 'self'; object-src 'self'; connect-src 'self' ws://localhost:8080"
},
"content_scripts": [ "content_scripts": [
{ {
"matches": ["<all_urls>"], "matches": ["<all_urls>"],
......
...@@ -268,30 +268,7 @@ namespace InnoLabProjektDektopApp ...@@ -268,30 +268,7 @@ namespace InnoLabProjektDektopApp
// Ereignis-Handler für den "Start"-Button // Ereignis-Handler für den "Start"-Button
private void StartButton_Click(object sender, RoutedEventArgs e) private void StartButton_Click(object sender, RoutedEventArgs e)
{ {
Server.Instance.SendMessageToAllClients("{\"action\": \"startTracking\", \"status\": true}");
try
{
string jsonContent = File.ReadAllText("F:\\Dokumente\\Schule\\Studium\\InoLab\\procrastinator\\InnoLabProjektDektopApp\\InnoLabProjektDektopApp\\Assets\\distractingWebsites.json");
//string message = $"{{\"action\": \"sendJsonContent\", \"status\": true, \"content\": {jsonContent}}}";
// Erstelle ein Objekt für die Nachricht
var messageObject = new
{
action = "sendJsonContent",
status = true,
content = JsonSerializer.Deserialize<object>(jsonContent) // Parse den JSON-Inhalt
};
// Serialisiere das Objekt zu einem JSON-String
string message = JsonSerializer.Serialize(messageObject);
Server.Instance.SendMessageToAllClients(message);
}
catch
{
}
...@@ -427,6 +404,35 @@ namespace InnoLabProjektDektopApp ...@@ -427,6 +404,35 @@ namespace InnoLabProjektDektopApp
tmpSession = new Session(focusPeriod, breakPeriod, cycles, distractionMode, mascotVisible, wordsOfAffirmation, insultingWords); tmpSession = new Session(focusPeriod, breakPeriod, cycles, distractionMode, mascotVisible, wordsOfAffirmation, insultingWords);
this.NavigationService.Navigate(tmpSession); this.NavigationService.Navigate(tmpSession);
Server.Instance.SendMessageToAllClients("{\"action\": \"startTracking\", \"status\": true}");
Server.Instance.isTracking = true;
Server.Instance.blockingMode = distractionMode == "Full-blocking mode" ? true : false;
Server.Instance.SendMessageToAllClients($"{{\"action\": \"{(Server.Instance.blockingMode ? "BlockMode" : "noBlockMode")}\", \"status\": {(Server.Instance.blockingMode ? "true" : "false")}}}");
try
{
string relativePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Assets", "distractingWebsites.json");
string jsonContent = File.ReadAllText(relativePath);
// Erstelle ein Objekt für die Nachricht
var messageObject = new
{
action = "sendJsonContent",
status = true,
content = JsonSerializer.Deserialize<object>(jsonContent) // Parse den JSON-Inhalt
};
// Serialisiere das Objekt zu einem JSON-String
string message = JsonSerializer.Serialize(messageObject);
Server.Instance.SendMessageToAllClients(message);
}
catch
{
}
} }
public static Session getSessionInstance() { public static Session getSessionInstance() {
......
...@@ -5,6 +5,7 @@ using System.Runtime; ...@@ -5,6 +5,7 @@ using System.Runtime;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Navigation; using System.Windows.Navigation;
using InnoLabProjektDektopApp.Services.WebSocketServer;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace InnoLabProjektDektopApp.Services namespace InnoLabProjektDektopApp.Services
...@@ -166,6 +167,9 @@ namespace InnoLabProjektDektopApp.Services ...@@ -166,6 +167,9 @@ namespace InnoLabProjektDektopApp.Services
public string FinishSession() public string FinishSession()
{ {
Server.Instance.SendMessageToAllClients("{\"action\": \"stopTracking\", \"status\": false}");
Server.Instance.isTracking = false;
StopMonitoring(); StopMonitoring();
if (IsBreak) if (IsBreak)
{ {
......
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Design.Serialization;
using System.Linq; using System.Linq;
using System.Net.WebSockets;
using System.Text; using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks; using System.Threading.Tasks;
using Fleck; using Fleck;
using Newtonsoft.Json.Linq;
using System.IO;
namespace InnoLabProjektDektopApp.Services.WebSocketServer namespace InnoLabProjektDektopApp.Services.WebSocketServer
{ {
...@@ -12,6 +18,8 @@ namespace InnoLabProjektDektopApp.Services.WebSocketServer ...@@ -12,6 +18,8 @@ namespace InnoLabProjektDektopApp.Services.WebSocketServer
private static Server instance = null; private static Server instance = null;
private Fleck.WebSocketServer server; private Fleck.WebSocketServer server;
private List<IWebSocketConnection> clients = new List<IWebSocketConnection>(); private List<IWebSocketConnection> clients = new List<IWebSocketConnection>();
public bool isTracking = false;
public bool blockingMode = false;
private Server() private Server()
{ {
...@@ -37,9 +45,44 @@ namespace InnoLabProjektDektopApp.Services.WebSocketServer ...@@ -37,9 +45,44 @@ namespace InnoLabProjektDektopApp.Services.WebSocketServer
{ {
Console.WriteLine($"Empfangen: {message}"); Console.WriteLine($"Empfangen: {message}");
socket.Send("Hallo vom Server"); socket.Send("Hallo vom Server");
};
try
{
var messageObj = JsonSerializer.Deserialize<WebSocketMessage>(message);
Console.WriteLine($"Empfangen: {messageObj}");
if(messageObj != null && messageObj.action == "connected" && messageObj.status == true)
{
Console.WriteLine("connected");
SendMessageToAllClients($"{{\"action\": \"{(isTracking ? "startTracking" : "stopTracking")}\", \"status\": {isTracking}}}");
SendMessageToAllClients($"{{\"action\": \"{(blockingMode ? "BlockMode" : "noBlockMode")}\", \"status\": {(blockingMode ? "true" : "false")}}}");
string relativePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Assets", "distractingWebsites.json");
string jsonContent = File.ReadAllText(relativePath);
// Erstelle ein Objekt für die Nachricht
var messageObject = new
{
action = "sendJsonContent",
status = true,
content = JsonSerializer.Deserialize<object>(jsonContent) // Parse den JSON-Inhalt
};
// Serialisiere das Objekt zu einem JSON-String
string response = JsonSerializer.Serialize(messageObject);
SendMessageToAllClients(response);
}
}
catch (JsonException ex)
{
Console.WriteLine($"Fehler beim Parsen der Nachricht: {ex.Message}");
// Falls das Parsen fehlschlägt, kannst du den Fehler behandeln oder eine Default-Nachricht zurückgeben
}
};
}); });
} }
...@@ -67,3 +110,9 @@ namespace InnoLabProjektDektopApp.Services.WebSocketServer ...@@ -67,3 +110,9 @@ namespace InnoLabProjektDektopApp.Services.WebSocketServer
} }
} }
} }
public class WebSocketMessage
{
public string action { get; set; }
public bool status { get; set; }
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment