Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 40 additions & 1 deletion main.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from flask import Flask, Response, request, stream_with_context
from flask import Flask, Response, request, stream_with_context, jsonify
from werkzeug.utils import secure_filename
from flask_socketio import SocketIO
from threading import Thread
Expand Down Expand Up @@ -299,6 +299,45 @@ def ws_msg_handler(ws, msg):
logger.warning("--- UNKNOWN MESSAGE ---")


def discover_printer_by_ip(ip):
logger.info(f"Starting printer discovery for IP: {ip}")
msg = b'M99999'
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # UDP
sock.settimeout(discovery_timeout)
sock.sendto(msg, (ip, 3000))
try:
data = sock.recv(8192)
printer = save_discovered_printer(data)
logger.info(f"Discovery done for IP: {ip}")
return printer
except TimeoutError:
logger.error(f"Discovery timeout for IP: {ip}")
return None
finally:
sock.close()

# Example usage:
# printer = discover_printer_by_ip('192.168.1.100')
# if printer:
# connect_printers({printer['connection']: printer})
# socketio.emit('printers', printers)


@app.route('/add_printer', methods=['POST'])
def add_printer():
ip = request.form.get('ip')
if not ip:
return jsonify({'error': 'IP address is required'}), 400

printer = discover_printer_by_ip(ip)
if printer:
connect_printers(printer)
socketio.emit('printers', printers)
return jsonify({'success': True, 'printer': printer})
else:
return jsonify({'error': 'Printer discovery failed'}), 500


def main():
printers = discover_printers()
if printers:
Expand Down
17 changes: 17 additions & 0 deletions web/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,23 @@
</a>

<div id="printersList" class="list-group list-group-flush border-bottom scrollarea"></div>

<div class="container mt-3">
<div class="card">
<div class="card-header">
Add Printer by IP
</div>
<div class="card-body">
<form id="formAddPrinter">
<div class="mb-3">
<label for="printerIp" class="form-label">Printer IP Address</label>
<input type="text" class="form-control" id="printerIp" name="ip" placeholder="Enter printer IP address" required>
</div>
<button type="submit" class="btn btn-primary">Add Printer</button>
</form>
</div>
</div>
</div>
</div>
<!-- main column -->
<div class="container w-100">
Expand Down
24 changes: 24 additions & 0 deletions web/js/chitui.js
Original file line number Diff line number Diff line change
Expand Up @@ -393,3 +393,27 @@ function fileTransferProgress() {
new bootstrap.Tooltip(tooltipTriggerEl)
})
})()

$(document).ready(function() {
$('#formAddPrinter').on('submit', function(event) {
event.preventDefault();
var ip = $('#printerIp').val();
$.ajax({
url: '/add_printer',
type: 'POST',
data: { ip: ip },
success: function(response) {
if (response.success) {
alert('Printer added successfully!');
// Optionally, refresh the printer list
socket.emit("printers", "{}");
} else {
alert('Failed to add printer: ' + response.error);
}
},
error: function(xhr, status, error) {
alert('Error: ' + error);
}
});
});
});