9 Commits

Author SHA1 Message Date
eec7f40e72 Merge pull request 'fix: fixed the Issue with long Names and adapted the count of Entity in a row' (#33) from SomeCSSReworks into main
Some checks failed
Build Docker Linux ARM64 / build-docker-linux-arm64 (push) Failing after 5m55s
Reviewed-on: #33
2025-12-27 23:00:00 +01:00
899a36a49c Merge branch 'main' into SomeCSSReworks 2025-12-27 22:59:47 +01:00
8e607ee180 Merge pull request '.gitea/workflows/linux_arm64_docker.yaml aktualisiert' (#32) from RemovedUnnecessaryImageCopy into main
Some checks failed
Build Docker Linux ARM64 / build-docker-linux-arm64 (push) Has been cancelled
Reviewed-on: #32
2025-12-27 22:57:56 +01:00
87e6132f34 .gitea/workflows/linux_arm64_docker.yaml aktualisiert 2025-12-27 22:57:34 +01:00
dd845f4be6 fix: fixed the Issue with long Names and adapted the count of Entity in a row 2025-12-27 22:52:34 +01:00
6ca8fe7bdc Merge pull request '.gitea/workflows/linux_arm64_docker.yaml aktualisiert' (#30) from UpdateMainPushWorkflowForARM64Docker into main
All checks were successful
Build Docker Linux ARM64 / build-docker-linux-arm64 (push) Successful in 9m4s
Reviewed-on: #30
2025-12-27 22:45:14 +01:00
56bcd712f1 .gitea/workflows/linux_arm64_docker.yaml aktualisiert 2025-12-27 22:44:59 +01:00
4e3eca0650 Merge pull request 'Added Adventure Genre to StartUp Actions' (#28) from AddAdventureGenre into main
Reviewed-on: #28
2025-12-27 00:37:30 +01:00
2160c9abbc Added Adventure Genre to StartUp Actions 2025-12-27 00:36:36 +01:00
5 changed files with 50 additions and 26 deletions

View File

@@ -3,7 +3,7 @@ name: Build Docker Linux ARM64
on: on:
push: push:
branches: branches:
#- main - main
jobs: jobs:
build-docker-linux-arm64: build-docker-linux-arm64:
@@ -18,8 +18,16 @@ jobs:
- name: Setup Docker Buildx - name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v3
- name: Get Repository Name
id: get_repo
run: |
echo "REPO_LC=${GITHUB_REPOSITORY,,}" >> $GITHUB_ENV
- name: Build Linux ARM64 Docker Image - name: Build Linux ARM64 Docker Image
run: docker build -t couchlog-linux-arm64 . run: |
docker build \
-t gitea.penry.de/${{ env.REPO_LC }}:latest \
.
- name: Save Docker Image to Tar - name: Save Docker Image to Tar
run: docker save -o CouchLog-Linux-ARM64-Docker-Image.tar couchlog-linux-arm64 run: docker save -o CouchLog-Linux-ARM64-Docker-Image.tar couchlog-linux-arm64
@@ -30,4 +38,4 @@ jobs:
name: CouchLog-Linux-ARM64-Docker-Image name: CouchLog-Linux-ARM64-Docker-Image
path: CouchLog-Linux-ARM64-Docker-Image.tar path: CouchLog-Linux-ARM64-Docker-Image.tar
if-no-files-found: error if-no-files-found: error
retention-days: 1 retention-days: 5

2
.gitignore vendored
View File

@@ -2,5 +2,7 @@
bin bin
Debug Debug
/CouchLog/Data/CouchLog.db /CouchLog/Data/CouchLog.db
/CouchLog/Data/CouchLog.db-shm
/CouchLog/Data/CouchLog.db-wal
#Migrations #Migrations
obj obj

View File

@@ -43,10 +43,10 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="Picture" class="form-label">Picture</label> <label for="Picture" class="form-label">Picture</label>
<InputFile OnChange="@LoadFiles" accept="image/*"/> <InputFile OnChange="@LoadImage" accept="image/*" />
@if (!string.IsNullOrEmpty(ImagePreviewUrl)) @if (!string.IsNullOrEmpty(ImageString))
{ {
<img src="@ImagePreviewUrl" style="max-width: 256px; max-height: 256px;" /> <img src="@ImageString" style="max-width: 256px; max-height: 256px;" />
} }
</div> </div>
<div class="mb-3"> <div class="mb-3">
@@ -66,12 +66,12 @@
<!-- #endregion --> <!-- #endregion -->
<!-- #region Show Entitys --> <!-- #region Show Entitys -->
<div class="row"> <div class="row g-4">
@foreach (var Entity in GlobalEntities) @foreach (var Entity in GlobalEntities)
{ {
if (!Entity.IsPrivate || (Entity.IsPrivate && (Entity.CreatorId == AppUser.Id))) if (!Entity.IsPrivate || (Entity.IsPrivate && (Entity.CreatorId == AppUser.Id)))
{ {
<div name="Enity-Container" class="col-12 col-md-6 col-lg-3 mb-4 Entity-Container"> <div name="Enity-Container" class="col-6 col-md-4 col-lg-2 col-xl-2 mb-4 Entity-Container">
<div name="Entity-Container-Card" class="Entity-Container-Card"> <div name="Entity-Container-Card" class="Entity-Container-Card">
<div class="Entity-Container-Menu-Button dropdown ms-1"> <div class="Entity-Container-Menu-Button dropdown ms-1">
@@ -151,6 +151,7 @@
private bool isCollapseNewGlobalEntityOpen = false; private bool isCollapseNewGlobalEntityOpen = false;
private int SelectedMediaTypeId; private int SelectedMediaTypeId;
private bool isPrivate = false; private bool isPrivate = false;
private string ImageString;
/// <summary> /// <summary>
/// ///
@@ -159,9 +160,9 @@
/// <exception cref="NotImplementedException"></exception> /// <exception cref="NotImplementedException"></exception>
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
GlobalEntities = await CouchLogDB.GlobalEntities.OrderByDescending(Entity => Entity.Id).ToListAsync(); GlobalEntities = await CouchLogDB.GlobalEntities.OrderByDescending(Entity => Entity.Title).ToListAsync();
MediaTypes = await CouchLogDB.MediaType.OrderBy(Type => Type.Id).ToListAsync(); MediaTypes = await CouchLogDB.MediaType.OrderBy(Type => Type.Id).ToListAsync();
Genres = await CouchLogDB.Genres.OrderBy(Genre => Genre.Id).ToListAsync(); Genres = await CouchLogDB.Genres.OrderBy(Genre => Genre.Name).ToListAsync();
var AuthState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); var AuthState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
User = AuthState.User; User = AuthState.User;
@@ -181,6 +182,19 @@
UserPrivateEntityIds = TempUserPrivateEntityIds.ToHashSet(); UserPrivateEntityIds = TempUserPrivateEntityIds.ToHashSet();
} }
private async Task LoadImage(InputFileChangeEventArgs e)
{
Picture = e.File;
foreach(var file in e.GetMultipleFiles())
{
using var stream = file.OpenReadStream();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
ImageString = $"data:{file.ContentType};base64,{Convert.ToBase64String(ms.ToArray())}";
}
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>

View File

@@ -24,45 +24,44 @@
<div class="row g-4"> <div class="row g-4">
@foreach (var Entity in PrivateEntities) @foreach (var Entity in PrivateEntities)
{ {
/*
Hier bleiben wir bei col-lg-6 (halbe Bildschirmbreite),
wie du es im roten Kasten wolltest.
*/
<div class="col-12 col-lg-6 col-xxl-4"> <div class="col-12 col-lg-6 col-xxl-4">
<div class="card shadow-sm border-0 overflow-hidden private-entity-card"> <div class="card shadow-sm border-0 overflow-hidden private-entity-card">
<div class="row g-0 h-100"> <div class="row g-0 h-100">
<!-- BILD: col-auto sorgt dafür, dass sich die Breite nach CSS richtet --> <!-- Feste Breite für das Bild, kein Umbruch -->
<div class="col-auto img-wrapper"> <div class="col-auto" style="flex: 0 0 auto; min-width: 120px; max-width: 150px;">
@if (!string.IsNullOrEmpty(Entity.GlobalEntity?.PicturePath)) @if (!string.IsNullOrEmpty(Entity.GlobalEntity?.PicturePath))
{ {
<img src="/@Entity.GlobalEntity.PicturePath" <img src="/@Entity.GlobalEntity.PicturePath"
class="entity-img" class="entity-img w-100 h-100"
style="object-fit: cover;"
alt="@Entity.GlobalEntity.Title"> alt="@Entity.GlobalEntity.Title">
} }
else else
{ {
<div class="d-flex align-items-center justify-content-center h-100 bg-light text-muted small px-2"> <div class="d-flex align-items-center justify-content-center h-100 bg-light text-muted small">
Kein Bild Kein Bild
</div> </div>
} }
</div> </div>
<!-- INFO: 'col' nimmt automatisch den RESTLICHEN Platz ein --> <!-- Der Rest nimmt den verbleibenden Platz -->
<div class="col"> <div class="col" style="min-width: 0;">
<div class="card-body d-flex flex-column h-100 py-2 px-3"> <div class="card-body d-flex flex-column h-100 py-2 px-3">
<!-- Header --> <!-- Header mit besserer Text-Behandlung -->
<div class="d-flex justify-content-between align-items-start"> <div class="d-flex justify-content-between align-items-start mb-2">
<div class="overflow-hidden"> <div style="min-width: 0; flex: 1;">
<h5 class="card-title fw-bold mb-0 text-truncate">@Entity.GlobalEntity?.Title</h5> <h5 class="card-title fw-bold mb-0" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">
@Entity.GlobalEntity?.Title
</h5>
<small class="text-muted meta-text"> <small class="text-muted meta-text">
@Entity.CreationTime.ToShortDateString() @Entity.CreationTime.ToShortDateString()
</small> </small>
</div> </div>
<div class="dropdown ms-1"> <div class="dropdown ms-2" style="flex-shrink: 0;">
<button class="btn btn-link menu-btn" type="button" data-bs-toggle="modal" data-bs-target="#modal-@Entity.Id"> <button class="btn btn-link menu-btn" type="button" data-bs-toggle="modal" data-bs-target="#modal-@Entity.Id">
&#8942; &#8942;
</button> </button>
@@ -79,7 +78,7 @@
} }
</select> </select>
@if (Entity.GlobalEntity?.MediaType.Name == "Series") @if (Entity.GlobalEntity?.MediaType.Name == "Series" || Entity.GlobalEntity?.MediaType.Name == "Anime")
{ {
<select class="form-select" value="@Entity.Season" @onchange="@(e => UpdateSeason(Entity, e.Value))"> <select class="form-select" value="@Entity.Season" @onchange="@(e => UpdateSeason(Entity, e.Value))">
@{ @{

View File

@@ -55,6 +55,7 @@ namespace CouchLog
{ {
new() { Name = "Action", CreationTime = DateTime.Now }, new() { Name = "Action", CreationTime = DateTime.Now },
new() { Name = "Animation", CreationTime = DateTime.Now }, new() { Name = "Animation", CreationTime = DateTime.Now },
new() { Name = "Adventure", CreationTime = DateTime.Now },
new() { Name = "Comedy", CreationTime = DateTime.Now }, new() { Name = "Comedy", CreationTime = DateTime.Now },
new() { Name = "Crime", CreationTime = DateTime.Now }, new() { Name = "Crime", CreationTime = DateTime.Now },
new() { Name = "Drama", CreationTime = DateTime.Now }, new() { Name = "Drama", CreationTime = DateTime.Now },