Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
715e4559aa | |||
d42c245c9d | |||
ff840299d6 | |||
f69c93ba91 | |||
c0f2430590 | |||
c999a500f8 | |||
c668bb83f5 |
@@ -1,20 +1,9 @@
|
||||
FROM oven/bun:1.0.25-slim as builder
|
||||
WORKDIR /app
|
||||
|
||||
# Copy package files
|
||||
COPY package*.json ./
|
||||
COPY bun.lockb ./
|
||||
COPY dist dist
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
# Install dependencies
|
||||
RUN bun install
|
||||
|
||||
# Copy source files
|
||||
COPY . .
|
||||
|
||||
# Build the application
|
||||
RUN bun run build
|
||||
|
||||
# Production stage
|
||||
FROM nginx:alpine
|
||||
COPY --from=builder /app/dist /usr/share/nginx/html
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
@@ -74,6 +74,13 @@ export const SignatureCard = ({ signature, onDelete, onUpdate }: SignatureCardPr
|
||||
<h3 className="text-white font-medium text-lg">
|
||||
{signature.signame || 'Unnamed Signature'}
|
||||
</h3>
|
||||
{signature.note && (
|
||||
<div className="mt-2">
|
||||
<Badge variant="outline" className="bg-blue-900/50 text-blue-200 border-blue-500 px-3 py-1 text-sm font-semibold">
|
||||
{signature.note}
|
||||
</Badge>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Additional Info */}
|
||||
|
@@ -30,7 +30,8 @@ export const SignatureEditModal = ({ signature, isOpen, onClose, onSave }: Signa
|
||||
signame: signature.signame || "",
|
||||
dangerous: signature.dangerous || false,
|
||||
scanned: signature.scanned || "",
|
||||
identifier: signature.identifier || ""
|
||||
identifier: signature.identifier || "",
|
||||
note: signature.note || ""
|
||||
});
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
@@ -45,7 +46,8 @@ export const SignatureEditModal = ({ signature, isOpen, onClose, onSave }: Signa
|
||||
type: formData.type === "unknown" ? undefined : formData.type,
|
||||
signame: formData.signame || undefined,
|
||||
dangerous: formData.dangerous,
|
||||
scanned: formData.scanned || undefined
|
||||
scanned: formData.scanned || undefined,
|
||||
note: formData.note || undefined
|
||||
});
|
||||
onClose();
|
||||
toast({
|
||||
@@ -71,7 +73,8 @@ export const SignatureEditModal = ({ signature, isOpen, onClose, onSave }: Signa
|
||||
signame: signature.signame || "",
|
||||
dangerous: signature.dangerous || false,
|
||||
scanned: signature.scanned || "",
|
||||
identifier: signature.identifier || ""
|
||||
identifier: signature.identifier || "",
|
||||
note: signature.note || ""
|
||||
});
|
||||
onClose();
|
||||
};
|
||||
@@ -152,6 +155,18 @@ export const SignatureEditModal = ({ signature, isOpen, onClose, onSave }: Signa
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Note Field - Add before the Dangerous Flag */}
|
||||
<div className="space-y-2">
|
||||
<Label htmlFor="note" className="text-slate-200">Important Note</Label>
|
||||
<Input
|
||||
id="note"
|
||||
value={formData.note}
|
||||
onChange={(e) => setFormData(prev => ({ ...prev, note: e.target.value }))}
|
||||
placeholder="Add important information about this signature"
|
||||
className="bg-slate-700 border-slate-600 text-slate-200"
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Dangerous Flag */}
|
||||
<div className="flex items-center justify-between">
|
||||
<Label htmlFor="dangerous" className="text-slate-200">Dangerous</Label>
|
||||
|
@@ -117,6 +117,11 @@ export const SignatureListItem = ({ signature, onDelete, onUpdate }: SignatureLi
|
||||
</Badge>
|
||||
)}
|
||||
</h3>
|
||||
{signature.note && (
|
||||
<Badge variant="outline" className="bg-blue-900/50 text-blue-200 border-blue-500 px-2 py-0.5 text-sm font-semibold ml-2">
|
||||
{signature.note}
|
||||
</Badge>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@@ -107,6 +107,7 @@ export type SignatureRecord = {
|
||||
id: string
|
||||
identifier: string
|
||||
name?: string
|
||||
note?: string
|
||||
scanned?: string
|
||||
system: RecordIdString
|
||||
type?: string
|
||||
@@ -118,6 +119,7 @@ export type SigviewRecord = {
|
||||
dangerous?: boolean
|
||||
id: string
|
||||
identifier: string
|
||||
note?: string
|
||||
scanned?: string
|
||||
signame?: string
|
||||
sysid?: RecordIdString
|
||||
|
@@ -22,6 +22,7 @@ export const SystemView = () => {
|
||||
}
|
||||
|
||||
const saveSignature = async (signature: Signature): Promise<void> => {
|
||||
console.log(signature);
|
||||
try {
|
||||
// Check if signature already exists
|
||||
let existingRecord: SignatureRecord | null = null;
|
||||
@@ -34,7 +35,7 @@ export const SystemView = () => {
|
||||
const newScannedPercentage = parseScannedPercentage(signature.scanned);
|
||||
|
||||
if (existingRecord) {
|
||||
const updatedSignature: Pick<SignatureRecord, 'updated' | 'type' | 'name' | 'scanned'> = {
|
||||
const updatedSignature: Pick<SignatureRecord, 'updated' | 'type' | 'name' | 'scanned' | 'note'> = {
|
||||
updated: new Date().toISOString()
|
||||
}
|
||||
// Existing record has no type and our new signature has a type
|
||||
@@ -47,6 +48,8 @@ export const SystemView = () => {
|
||||
const existingScannedPercentage = parseScannedPercentage(existingRecord.scanned);
|
||||
if (newScannedPercentage >= existingScannedPercentage)
|
||||
updatedSignature.scanned = signature.scanned;
|
||||
if (!!!existingRecord.note && !!signature.note)
|
||||
updatedSignature.note = signature.note;
|
||||
await pb.collection('signature').update(existingRecord.id, updatedSignature);
|
||||
console.log(`Updated signature ${signature.identifier}: ${existingScannedPercentage}% -> ${newScannedPercentage}%`);
|
||||
} else {
|
||||
@@ -57,7 +60,8 @@ export const SystemView = () => {
|
||||
name: signature.signame,
|
||||
type: signature.type,
|
||||
dangerous: signature.dangerous,
|
||||
scanned: signature.scanned
|
||||
scanned: signature.scanned,
|
||||
note: signature.note
|
||||
});
|
||||
console.log(`Created new signature ${signature.identifier} with ${newScannedPercentage}% scan`);
|
||||
}
|
||||
@@ -70,10 +74,10 @@ export const SystemView = () => {
|
||||
const deleteSignature = async (signatureId: string): Promise<void> => {
|
||||
try {
|
||||
await pb.collection('signature').delete(signatureId);
|
||||
|
||||
|
||||
// Invalidate queries to refresh the data
|
||||
queryClient.invalidateQueries({ queryKey: ['signatures', system] });
|
||||
|
||||
|
||||
toast({
|
||||
title: "Signature Deleted",
|
||||
description: "The signature has been successfully deleted.",
|
||||
@@ -93,14 +97,14 @@ export const SystemView = () => {
|
||||
try {
|
||||
// Get the system ID for the current system
|
||||
const systemId = await getSystemId(system);
|
||||
|
||||
|
||||
console.log('Updating signature:', {
|
||||
identifier: updatedSignature.identifier,
|
||||
systemId,
|
||||
system,
|
||||
updatedSignature
|
||||
});
|
||||
|
||||
|
||||
// Find the signature by identifier and system
|
||||
const existingRecord = await pb.collection('signature').getFirstListItem(
|
||||
`identifier='${updatedSignature.identifier}' && system='${systemId}'`
|
||||
@@ -125,14 +129,17 @@ export const SystemView = () => {
|
||||
if (updatedSignature.scanned !== undefined) {
|
||||
updateData.scanned = updatedSignature.scanned;
|
||||
}
|
||||
if (updatedSignature.note !== undefined) {
|
||||
updateData.note = updatedSignature.note;
|
||||
}
|
||||
|
||||
console.log('Update data:', updateData);
|
||||
|
||||
await pb.collection('signature').update(existingRecord.id, updateData);
|
||||
|
||||
|
||||
// Invalidate queries to refresh the data
|
||||
queryClient.invalidateQueries({ queryKey: ['signatures', system] });
|
||||
|
||||
|
||||
toast({
|
||||
title: "Signature Updated",
|
||||
description: "The signature has been successfully updated.",
|
||||
@@ -199,7 +206,7 @@ export const SystemView = () => {
|
||||
}
|
||||
|
||||
// Turn off clean mode after use
|
||||
setCleanMode(false);
|
||||
// setCleanMode(false);
|
||||
}
|
||||
|
||||
// Save all new/updated signatures
|
||||
|
@@ -1,5 +1,28 @@
|
||||
import { SigviewRecord as Signature } from "@/lib/pbtypes";
|
||||
|
||||
const fourOutOfTen = [
|
||||
"Angel Cartel Occupied Mining Colony",
|
||||
"Mul-Zatah Monastery",
|
||||
"Guristas Scout Outpost",
|
||||
"Sansha's Nation Occupied Mining Colony",
|
||||
"Serpentis Phi-Outpost",
|
||||
"Drone Infested Mine",
|
||||
];
|
||||
const fiveOutOfTen = [
|
||||
"Angel's Red Light District",
|
||||
"Blood Raider Psychotropics Depot",
|
||||
"Guristas Hallucinogen Supply Waypoint",
|
||||
"Sansha's Nation Neural Paralytic Facility",
|
||||
"Serpentis Corporation Hydroponics Site",
|
||||
"Outgrowth Rogue Drone Hive",
|
||||
];
|
||||
function isFourOutOfTen(signature: string): boolean {
|
||||
return fourOutOfTen.some((s) => signature.includes(s));
|
||||
}
|
||||
function isFiveOutOfTen(signature: string): boolean {
|
||||
return fiveOutOfTen.some((s) => signature.includes(s));
|
||||
}
|
||||
|
||||
export const parseSignature = (text: string): Omit<Signature, 'system' | 'id' | 'sysid'> | null => {
|
||||
const parts = text.split('\t');
|
||||
if (parts.length < 4) return null;
|
||||
@@ -10,12 +33,23 @@ export const parseSignature = (text: string): Omit<Signature, 'system' | 'id' |
|
||||
return null;
|
||||
}
|
||||
|
||||
let note = "";
|
||||
const isFour = isFourOutOfTen(parts[3]);
|
||||
if (isFour) {
|
||||
note = "4/10";
|
||||
}
|
||||
const isFive = isFiveOutOfTen(parts[3]);
|
||||
if (isFive) {
|
||||
note = "5/10";
|
||||
}
|
||||
|
||||
return {
|
||||
identifier: parts[0],
|
||||
type: parts[2],
|
||||
signame: parts[3],
|
||||
scanned: parts.length > 4 ? parts[4] : undefined,
|
||||
dangerous: false // TODO: Implement dangerous signature detection
|
||||
dangerous: false, // TODO: Implement dangerous signature detection
|
||||
note: note,
|
||||
};
|
||||
};
|
||||
|
||||
|
15
release.sh
15
release.sh
@@ -41,17 +41,8 @@ RELEASE_ID=$(echo $RELEASE_RESPONSE | awk -F'"id":' '{print $2+0; exit}')
|
||||
echo "Release ID: $RELEASE_ID"
|
||||
|
||||
echo "Uploading the things..."
|
||||
WINRELEASE="./build/windows/x64/runner/Release/"
|
||||
7z a $WINRELEASE/$ZIP $WINRELEASE/*
|
||||
WINRELEASE="build/bin/signalerr.exe"
|
||||
curl -X POST \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
-F "attachment=@$WINRELEASE/$ZIP" \
|
||||
"$GITEA/api/v1/repos/$REPO/releases/${RELEASE_ID}/assets?name=$ZIP"
|
||||
rm $WINRELEASE/$ZIP
|
||||
|
||||
ANDROIDRELEASE="./build/app/outputs/flutter-apk/"
|
||||
mv $ANDROIDRELEASE/app-release.apk $ANDROIDRELEASE/$APK
|
||||
curl -X POST \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
-F "attachment=@$ANDROIDRELEASE/$APK" \
|
||||
"$GITEA/api/v1/repos/$REPO/releases/${RELEASE_ID}/assets?name=$APK"
|
||||
-F "attachment=@$WINRELEASE" \
|
||||
"$GITEA/api/v1/repos/$REPO/releases/${RELEASE_ID}/assets?name=signalerr.exe"
|
||||
|
Reference in New Issue
Block a user