Wunsch zum Bildarchiv

Ich verwende auch das Bildarchiv.

Ich würde mir zwei zusätzlich Features wünschen.

  1. Die Reihenfolge müsste Alt nach Neu sein, also das Neuste immer zuoberst (könnte mir vorstellen, dass das ein kleiner Aufwand ist).
  2. Die Bilder sollten im Webfront verlinkt sein, daher wenn ich auf ein kleines Bild klicke sollte es gross angezeigt werden (könnte mir vorstellen, dass das ein grosser Aufwand ist)

Zu Punkt eins, ich habe in dieser Funktion schon herumprobiert aber es nicht geschafft, die Reihenfolge zu ändern. Hat einer der Profis einen Tipp?

private function CheckForDeletePicture($CID)
    {
        $childIDs = IPS_GetChildrenIDs($CID);

        //Sortieren der childIDs nach Position (älteste Bilder nach vorne)
        usort($childIDs, function ($a, $b)
        {
            $a = IPS_GetObject($a);
            $b = IPS_GetObject($b);
            return ($a['ObjectPosition'] < $b['ObjectPosition']) ? -1 : (($a['ObjectPosition'] == $b['ObjectPosition']) ? 0 : 1);
        });

        if (count($childIDs) >= $this->ReadPropertyInteger('MaxQuantity')) {
            //Anzahl Bilder welche gelöscht werden müssen
            $delCount = count($childIDs) - $this->ReadPropertyInteger('MaxQuantity');
            for ($i = 0; $i <= $delCount; $i++) {
                IPS_DeleteMedia($childIDs[$i], true);
            }
        }
    }
1 „Gefällt mir“

Das wäre mir auch am liebsten.
Wenn ich wieder Zeit habe, teste ich evtl mal am Quellcode des Moduls.

@mb-stern Wie hast du das Modul verwendet?
Ich habe als Bildquelle ein Medienobjekt, auf dieses Objekt hole ich je nach Ereignis einen akteullen Screenshot.
Das hat mit dem Modul jedoch nicht funktioniert, weil sich die ID des Medienobjektes bei jeder Bildaktualisierung geändert hat.

Ich verwende die Personenerkennug (Boolean Variable) meiner Kamera

Hatte bei meiner Fragestellung ein Brett vorm Kopf.
Trotzdem Danke.

Habe es nun geschafft, die Sortierung im Bildarchiv umzukehren, daher die neuste Datei ist oben.

Hier die angepasste module.php aus dem Pfad .store/de.symcon.imagearchive/BildArchiv

<?php

declare(strict_types=1);
class BildArchiv extends IPSModule
{
    public function Create()
    {
        //Never delete this line!
        parent::Create();

        //Properties
        $this->RegisterPropertyInteger('ImageID', 0);
        $this->RegisterPropertyInteger('TriggerVariableID', 0);
        $this->RegisterPropertyInteger('MaxQuantity', 10);
    }

    public function Destroy()
    {
        //Never delete this line!
        parent::Destroy();
    }

    public function ApplyChanges()
    {
        //Never delete this line!
        parent::ApplyChanges();

        $this->CreateCategoryByIdent($this->InstanceID, 'Images', 'Bilderarchiv');

        $triggerID = $this->ReadPropertyInteger('TriggerVariableID');
        if ($triggerID != 0) {
            $eID = @IPS_GetObjectIDByIdent('AddImage', $this->InstanceID);
            if ($eID == 0) {
                $eID = IPS_CreateEvent(0);
                IPS_SetParent($eID, $this->InstanceID);
                IPS_SetIdent($eID, 'AddImage');
                IPS_SetName($eID, 'AddImage');
                IPS_SetHidden($eID, true);
                IPS_SetEventTriggerSubsequentExecution($eID, false);
                IPS_SetEventScript($eID, 'BA_AddImage($_IPS[\'TARGET\']);');
                IPS_SetEventTrigger($eID, IPS_GetEvent($eID)['TriggerType'], $triggerID);
                IPS_SetEventActive($eID, true);
            } else {
                IPS_SetEventTrigger($eID, IPS_GetEvent($eID)['TriggerType'], $triggerID);
            }
        }

        //Add references
        foreach ($this->GetReferenceList() as $referenceID) {
            $this->UnregisterReference($referenceID);
        }
        if ($triggerID != 0) {
            $this->RegisterReference($triggerID);
        }
        $imageID = $this->ReadPropertyInteger('ImageID');
        if ($imageID != 0) {
            $this->RegisterReference($imageID);
        }
    }

    public function AddImage()
    {
        $cID = IPS_GetObjectIDByIdent('Images', $this->InstanceID);

        //Erst kontrollieren ob das Maximum an Bildern erreicht ist, wenn ja überschüssige Bilder löschen
        $this->CheckForDeletePicture($cID);

        //Neues Bild erstellen und Inhalt kopieren
        $this->CopyNewPicture($cID);
    }

    private function CheckForDeletePicture($CID)
    {
        $childIDs = IPS_GetChildrenIDs($CID);

        //Sortieren der childIDs nach Position (älteste Bilder nach vorne)
        usort($childIDs, function ($a, $b)
        {
            $a = IPS_GetObject($a);
            $b = IPS_GetObject($b);
            return ($a['ObjectPosition'] > $b['ObjectPosition']) ? -1 : (($a['ObjectPosition'] == $b['ObjectPosition']) ? 0 : 1); // < auf > geändert wegen umgekehrter Sortierreihenfolge
	    //return ($a['ObjectPosition'] < $b['ObjectPosition']) ? -1 : (($a['ObjectPosition'] == $b['ObjectPosition']) ? 0 : 1);
        });

        if (count($childIDs) >= $this->ReadPropertyInteger('MaxQuantity')) {
            //Anzahl Bilder welche gelöscht werden müssen
            $delCount = count($childIDs) - $this->ReadPropertyInteger('MaxQuantity');
            for ($i = 0; $i <= $delCount; $i++) {
                IPS_DeleteMedia($childIDs[$i], true);
            }
        }
    }

    private function CopyNewPicture($CID)
    {
        $pID = $this->ReadPropertyInteger('ImageID');

        $mID = IPS_CreateMedia(1);
        IPS_SetName($mID, date('H:i:s d.m.Y'));
        IPS_SetParent($mID, $CID);
        IPS_SetMediaCached($mID, true);
        IPS_SetMediaFile($mID, 'media/' . $mID . '.' . pathinfo(IPS_GetMedia($pID)['MediaFile'])['extension'], false);
        IPS_SetMediaContent($mID, IPS_GetMediaContent($pID));
        IPS_SetPosition($mID, -time()); // time von plu auf minus geändert wegen umgekehrter Sortierreihenfolge
	//IPS_SetPosition($mID, time());  
    }

    private function CreateCategoryByIdent($ID, $Ident, $Name)
    {
        $cID = @IPS_GetObjectIDByIdent($Ident, $ID);
        if ($cID === false) {
            $cID = IPS_CreateCategory();
            IPS_SetParent($cID, $ID);
            IPS_SetName($cID, $Name);
            IPS_SetIdent($cID, $Ident);
        }
        return $cID;
    }
}
1 „Gefällt mir“

Hab mir mittlerweile was eigenes gebaut. Aber trotzdem danke, dass du das nochmal öffentlich machst.