10 Commits

Author SHA1 Message Date
ad1cb70cdc Update .gitea/workflows/deploy.yml
All checks were successful
Build / build (push) Successful in 1m35s
Deploy / build (push) Successful in 2m7s
2026-02-14 19:08:58 +01:00
ce01b7ad14 Update .gitea/workflows/deploy.yml
Some checks failed
Build / build (push) Has been cancelled
2026-02-14 19:08:32 +01:00
02c7b966eb Update .gitea/workflows/build.yml
Some checks failed
Build / build (push) Has been cancelled
2026-02-14 19:08:22 +01:00
a3d9e1ebb9 Update .gitea/workflows/deploy.yml
Some checks failed
Build / build (push) Has been cancelled
2026-02-14 19:08:14 +01:00
40e13ec585 Enhance asset display by linking builds and handling null builds in overview
All checks were successful
Build / build (push) Successful in 1m23s
2025-06-15 17:29:50 +02:00
bb15c55e46 Improve asset sorting by brand, model, and QR code with null handling
All checks were successful
Build / build (push) Successful in 2m27s
Deploy / build (push) Successful in 3m1s
2025-06-15 09:48:07 +02:00
35c2e07c05 Update build view to link part types for better navigation
All checks were successful
Build / build (push) Successful in 2m2s
Deploy / build (push) Successful in 2m43s
2025-06-15 09:27:32 +02:00
92187fd345 Handle non-positive capacities in idealUnitForCapacity method 2025-06-15 09:27:29 +02:00
0dbab45651 Enhance asset display by handling null builds and sorting assets by QR code 2025-06-15 09:26:08 +02:00
14ac78982f Reorder fields in HddAsset for clarity
All checks were successful
Build / build (push) Successful in 1m20s
2025-06-15 09:14:13 +02:00
8 changed files with 31 additions and 16 deletions

View File

@@ -5,7 +5,7 @@ on:
- '*' - '*'
jobs: jobs:
build: build:
runs-on: standard-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4

View File

@@ -1,11 +1,12 @@
name: Deploy name: Deploy
on: on:
push: push:
tags: branches:
- 'v*' - master
jobs: jobs:
build: build:
runs-on: standard-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -18,10 +19,10 @@ jobs:
cache: 'gradle' cache: 'gradle'
- name: Build Jar - name: Build Jar
run: ./gradlew bootJar run: ./gradlew bootJar --no-daemon
- name: Build Container - name: Build Container
run: docker build --tag gitea.seeseepuff.be/seeseemelk/pcinv:${{github.ref_name}} . run: docker build --tag gitea.seeseepuff.be/seeseemelk/pcinv:latest .
- name: Login - name: Login
with: # Set the secret as an input with: # Set the secret as an input
@@ -29,4 +30,4 @@ jobs:
run: docker login gitea.seeseepuff.be -u seeseemelk -p ${{ secrets.PACKAGE_RW }} run: docker login gitea.seeseepuff.be -u seeseemelk -p ${{ secrets.PACKAGE_RW }}
- name: Push Container - name: Push Container
run: docker push gitea.seeseepuff.be/seeseemelk/pcinv:${{github.ref_name}} run: docker push gitea.seeseepuff.be/seeseemelk/pcinv:latest

View File

@@ -1,5 +1,6 @@
package be.seeseepuff.pcinv.controllers; package be.seeseepuff.pcinv.controllers;
import be.seeseepuff.pcinv.models.Asset;
import be.seeseepuff.pcinv.models.WorkLogEntry; import be.seeseepuff.pcinv.models.WorkLogEntry;
import be.seeseepuff.pcinv.services.AssetService; import be.seeseepuff.pcinv.services.AssetService;
import be.seeseepuff.pcinv.services.BuildService; import be.seeseepuff.pcinv.services.BuildService;
@@ -94,7 +95,12 @@ public class WebController {
model.addAttribute(DESCRIPTOR, assetService.getAssetDescriptor(type)); model.addAttribute(DESCRIPTOR, assetService.getAssetDescriptor(type));
model.addAttribute(DESCRIPTORS, tree); model.addAttribute(DESCRIPTORS, tree);
model.addAttribute(PROPERTIES, tree.stream().flatMap(d -> d.getProperties().stream()).toList()); model.addAttribute(PROPERTIES, tree.stream().flatMap(d -> d.getProperties().stream()).toList());
model.addAttribute(ASSETS, assetService.getAssetsByType(type)); var assets = assetService.getAssetsByType(type);
assets.sort(Comparator
.comparing((Asset a) -> a.getAsset().getBrand(), Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing((Asset a) -> a.getAsset().getModel(), Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(Asset::getQr));
model.addAttribute(ASSETS, assets);
return "browse_type"; return "browse_type";
} }

View File

@@ -44,6 +44,10 @@ public class CapacityInfo {
} }
public static CapacityUnit idealUnitForCapacity(long capacity, CapacityUnit[] units) { public static CapacityUnit idealUnitForCapacity(long capacity, CapacityUnit[] units) {
if (capacity <= 0) {
return CapacityUnit.BYTES; // Default to bytes for non-positive capacities
}
return Arrays.stream(units) return Arrays.stream(units)
.sorted(Comparator.comparing(CapacityUnit::getBytes).reversed()) .sorted(Comparator.comparing(CapacityUnit::getBytes).reversed())
.filter(unit -> capacity % unit.getBytes() == 0) .filter(unit -> capacity % unit.getBytes() == 0)

View File

@@ -57,16 +57,16 @@ public class HddAsset implements Asset
@InputList @InputList
private String driveType; private String driveType;
@Description("Number of heads in the drive.")
@Property("Heads")
@HideInOverview
private Integer heads;
@Description("Number of cylinders in the drive.") @Description("Number of cylinders in the drive.")
@Property("Cylinders") @Property("Cylinders")
@HideInOverview @HideInOverview
private Integer cylinders; private Integer cylinders;
@Description("Number of heads in the drive.")
@Property("Heads")
@HideInOverview
private Integer heads;
@Description("Number of sectors in the drive.") @Description("Number of sectors in the drive.")
@Property("Sectors") @Property("Sectors")
@HideInOverview @HideInOverview

View File

@@ -9,7 +9,8 @@
<tr th:each="a : ${assets}"> <tr th:each="a : ${assets}">
<td th:each="p : ${properties}" th:if="${!p.hideInOverview}"> <td th:each="p : ${properties}" th:if="${!p.hideInOverview}">
<a th:if="${p.name == 'qr'}" th:href="'/view/'+${a.getQr()}" th:text="${p.renderValue(a)}"></a> <a th:if="${p.name == 'qr'}" th:href="'/view/'+${a.getQr()}" th:text="${p.renderValue(a)}"></a>
<span th:if="${p.name != 'qr'}" th:text="${p.renderValue(a)}"></span> <a th:if="${p.name == 'build' && a.getAsset().getBuild() != null}" th:href="'/build/'+${a.getAsset().getBuild().getId()}" th:text="${p.renderValue(a)}"></a>
<span th:if="${p.name != 'qr' && (p.name != 'build' || a.getAsset().getBuild() == null)}" th:text="${p.renderValue(a)}"></span>
</td> </td>
<td> <td>
<a th:href="'/view/'+${a.getQr()}">View</a> <a th:href="'/view/'+${a.getQr()}">View</a>

View File

@@ -15,7 +15,7 @@
</tr> </tr>
<tr th:each="p : ${build.getParts()}"> <tr th:each="p : ${build.getParts()}">
<td><a th:href="'/view/' + ${p.qr}" th:text="${p.qr}"></a></td> <td><a th:href="'/view/' + ${p.qr}" th:text="${p.qr}"></a></td>
<td th:text="${descriptors.getDescriptorForType(p.type).displayName}"></td> <td><a th:href="'/browse/' + ${p.type}" th:text="${descriptors.getDescriptorForType(p.type).displayName}"></a></td>
<td th:text="${descriptors.getGenericProperty('brand').renderValue(p)}"></td> <td th:text="${descriptors.getGenericProperty('brand').renderValue(p)}"></td>
<td th:text="${descriptors.getGenericProperty('model').renderValue(p)}"></td> <td th:text="${descriptors.getGenericProperty('model').renderValue(p)}"></td>
</tr> </tr>

View File

@@ -7,7 +7,10 @@
<table border="1" cellpadding="4"> <table border="1" cellpadding="4">
<tr th:each="p : ${d.properties}"> <tr th:each="p : ${d.properties}">
<th bgcolor="lightgray"><b th:text="${p.displayName}"></b></th> <th bgcolor="lightgray"><b th:text="${p.displayName}"></b></th>
<td th:if="${p.name == 'build'}"><a th:href="'/build/' + ${asset.getAsset().getBuild().id}" th:text="${p.renderValue(asset)}"></a></td> <td th:if="${p.name == 'build'}">
<a th:if="${asset.getAsset().getBuild() != null}" th:href="'/build/' + ${asset.getAsset().getBuild().id}" th:text="${p.renderValue(asset)}"></a>
<span th:if="${asset.getAsset().getBuild() == null}" th:text="${p.renderValue(asset)}"></span>
</td>
<td th:if="${p.name != 'build'}" th:text="${p.renderValue(asset)}"></td> <td th:if="${p.name != 'build'}" th:text="${p.renderValue(asset)}"></td>
</tr> </tr>
</table> </table>