data/Pagootle.Format.ps1xml

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
    <SelectionSets>
        <SelectionSet>
            <Name>PagootleTypes</Name>
            <Types>
                <TypeName>ProGetAssetDirectoryItem</TypeName>
                <TypeName>ProGetApiKey</TypeName>
                <TypeName>ProGetAssetItemMetadata</TypeName>
            </Types>
        </SelectionSet>
    </SelectionSets>
    <!-- ################ CONTROL DEFINITIONS ################ -->
    <Controls>
        <Control>
            <Name>ProGetAssetDirectoryItem-GroupingFormat</Name>
            <CustomControl>
                <CustomEntries>
                    <CustomEntry>
                        <CustomItem>
                            <Frame>
                                <LeftIndent>4</LeftIndent>
                                <CustomItem>
                                    <Text>Folder: </Text>
                                    <ExpressionBinding>
                                        <ScriptBlock>
                                            "/" + $_.Parent
                                        </ScriptBlock>
                                    </ExpressionBinding>
                                </CustomItem>
                            </Frame>
                        </CustomItem>
                    </CustomEntry>
                </CustomEntries>
            </CustomControl>
        </Control>
    </Controls>
    <ViewDefinitions>
        <View>
            <Name>ProGetAssetDirectoryItem</Name>
            <ViewSelectedBy>
                <TypeName>ProGetAssetDirectoryItem</TypeName>
            </ViewSelectedBy>
            <GroupBy>
                <PropertyName>Parent</PropertyName>
                <CustomControlName>ProGetAssetDirectoryItem-GroupingFormat</CustomControlName>
            </GroupBy>
            <TableControl>
                <TableHeaders>
                    <TableColumnHeader>
                        <Label>Name</Label>
                        <Alignment>Left</Alignment>
                        <Width>58</Width>
                    </TableColumnHeader>
                    <TableColumnHeader>
                        <Label>Modified</Label>
                        <Width>20</Width>
                    </TableColumnHeader>
                    <TableColumnHeader>
                        <Label>Size</Label>
                        <Width>12</Width>
                    </TableColumnHeader>
                </TableHeaders>
                <TableRowEntries>
                    <TableRowEntry>
                        <TableColumnItems>
                            <TableColumnItem>
                                <ScriptBlock>
                                    if ($PSStyle) { # Pwsh
                                        if ($_.Type -eq 'dir') {
                                            "$($PSStyle.FileInfo.Directory)$($_.Name)$($PSStyle.Reset)"
                                        } elseif ($PSStyle.FormatHyperlink -and $_.Content) {
                                            "$($PSStyle.FormatHyperlink($_.Name, $_.Content))$($PSStyle.Reset)"
                                        }
                                    } elseif ($Host.PrivateData) { # PowerShell, not a good test
                                        if ($_.Type -eq 'dir') {
                                            "$([char]27)[7;$(37);$(44)m$($_.Name)$([char]27)[0m"
                                        #} elseif ($_.Content) {
                                        # "$([char]27)]8;;$($_.Content)`a$($_.Name)$([char]27)]8;;`a" # TODO: Fix this
                                        } else {
                                            $_.Name
                                        }
                                    } else { # Fallback
                                        $_.Name
                                    }
                                </ScriptBlock>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>Modified</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <Alignment>Right</Alignment>
                                <ScriptBlock>
                                    switch ($_.Size) {
                                        {$_ -lt 1KB} {return "$($_) B"}
                                        {$_ -lt 1MB} {return "$([Math]::Round($_ / 1KB, 2)) KB"}
                                        {$_ -lt 1GB} {return "$([Math]::Round($_ / 1MB, 2)) MB"}
                                        {$_ -ge 1GB} {return "$([Math]::Round($_ / 1GB, 2)) GB"}
                                    }
                                </ScriptBlock>
                            </TableColumnItem>
                        </TableColumnItems>
                    </TableRowEntry>
                </TableRowEntries>
            </TableControl>
        </View>
        <View>
            <Name>ProGetAssetItemMetadata</Name>
            <ViewSelectedBy>
                <TypeName>ProGetAssetItemMetadata</TypeName>
            </ViewSelectedBy>
            <GroupBy>
                <PropertyName>Parent</PropertyName>
                <CustomControlName>ProGetAssetDirectoryItem-GroupingFormat</CustomControlName>
            </GroupBy>
            <TableControl>
                <TableHeaders>
                    <TableColumnHeader>
                        <Label>Name</Label>
                        <Alignment>Left</Alignment>
                    </TableColumnHeader>
                    <TableColumnHeader>
                        <Label>Type</Label>
                    </TableColumnHeader>
                    <TableColumnHeader>
                        <Label>UserMetadata</Label>
                    </TableColumnHeader>
                    <TableColumnHeader>
                        <Label>CacheHeader</Label>
                    </TableColumnHeader>
                </TableHeaders>
                <TableRowEntries>
                    <TableRowEntry>
                        <TableColumnItems>
                            <TableColumnItem>
                                <PropertyName>Name</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <ScriptBlock>
                                    $_.Type.Split(';')[0]
                                </ScriptBlock>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>UserMetadata</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>CacheHeader</PropertyName>
                            </TableColumnItem>
                        </TableColumnItems>
                        <Wrap/>
                    </TableRowEntry>
                </TableRowEntries>
            </TableControl>
        </View>
        <View>
            <Name>ProGetApiKey</Name>
            <ViewSelectedBy>
                <TypeName>ProGetApiKey</TypeName>
            </ViewSelectedBy>
            <TableControl>
                <TableHeaders>
                    <TableColumnHeader>
                        <Label>Id</Label>
                        <Alignment>Left</Alignment>
                        <Width>4</Width>
                    </TableColumnHeader>
                    <TableColumnHeader>
                        <Label>Name/Description</Label>
                    </TableColumnHeader>
                    <TableColumnHeader>
                        <Label>Type</Label>
                        <Width>8</Width>
                    </TableColumnHeader>
                    <TableColumnHeader>
                        <Label>Permissions</Label>
                        <Width>40</Width>
                    </TableColumnHeader>
                    <TableColumnHeader>
                        <Label>Expiration</Label>
                        <Width>12</Width>
                    </TableColumnHeader>
                </TableHeaders>
                <TableRowEntries>
                    <TableRowEntry>
                        <TableColumnItems>
                            <TableColumnItem>
                                <PropertyName>Id</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <ScriptBlock>
                                    "$(if ($_.DisplayName) {$_.DisplayName} else {"(id=$($_.Id))"})`n$(if($_.Description){"$($PSStyle.Dim)$($_.Description)$($PSStyle.Reset)"})"
                                </ScriptBlock>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>Type</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <ScriptBlock>
                                    $Current = $_
                                    switch ($Current.Type) {
                                        "system" {
                                            $Current.SystemApis
                                        }
                                        "user" {
                                            $Current.User
                                        }
                                        "feed" {
                                            if ($Current.Feed) {
                                                @(
                                                    "$($Current.PackagePermissions -join ', ')"
                                                    "`n(in feed"
                                                    $Current.Feed + ')'
                                                ) -join ' '
                                            } elseif ($Current.FeedGroup) {
                                                @(
                                                    "$($Current.PackagePermissions -join ', ')"
                                                    "`n(in feed group"
                                                    $Current.FeedGroup + ')'
                                                ) -join ' '
                                            } else {
                                                @(
                                                    "$($Current.PackagePermissions -join ', ')"
                                                    "`n(in all feeds)"
                                                ) -join ' '
                                            }
                                        }
                                    }
                                </ScriptBlock>
                            </TableColumnItem>
                            <TableColumnItem>
                                <ScriptBlock>
                                    if ($_.Expiration -gt 0) {
                                        '{0:yyyy}-{0:MMM}-{0:dd}' -f $_.Expiration
                                    } else {
                                        "Not Set"
                                    }
                                </ScriptBlock>
                            </TableColumnItem>
                        </TableColumnItems>
                        <Wrap/>
                    </TableRowEntry>
                </TableRowEntries>
            </TableControl>
        </View>
    </ViewDefinitions>
</Configuration>