Blame Scripts/Bash/Cli/Functions/Render/render_doDm.sh

ae8a10
#!/bin/bash
ae8a10
#
ab1d67
# render_doDm.sh -- This function collects Display Manager (DM)
ce597a
# required files and creates a tar.gz package that groups them all
ce597a
# together. Use this function as last-rendition action for Gdm and Kdm
ce597a
# base-rendition actions.
eb0e14
#
7cd8e9
# Usage:
eb0e14
#
d856c1
#   ACTIONS[1]='LAST:renderDm:TYPE:RESOLUTION'
eb0e14
#
7cd8e9
# Where:
eb0e14
#
643925
#   TYPE can be either `Gdm' or `Kdm'. These values correspond to the
d856c1
#   directory names used to store related design models.
eb0e14
#
d856c1
#   RESOLUTION represents the screen resolution tar.gz files are
d856c1
#   produced for (e.g., 800x600, 1024x768, 2048x1536, etc.). 
eb0e14
#
d856c1
# In order to produce tar.gz files correctly, both screen resolution
d856c1
# definition inside pre-rendition configuration script and background
d856c1
# name inside theme directory structure need to match one another.  If
d856c1
# one screen resolution is defined correctly, but there is no
d856c1
# background information for it, the related tar.gz file is not
d856c1
# produced and the next file in the list of files to process is
d856c1
# evaluated.
ae8a10
#
9f5f2e
# Copyright (C) 2009-2011 Alain Reguera Delgado
ae8a10
# 
7cd8e9
# This program is free software; you can redistribute it and/or
7cd8e9
# modify it under the terms of the GNU General Public License as
7cd8e9
# published by the Free Software Foundation; either version 2 of the
7cd8e9
# License, or (at your option) any later version.
ae8a10
# 
ae8a10
# This program is distributed in the hope that it will be useful, but
ae8a10
# WITHOUT ANY WARRANTY; without even the implied warranty of
ae8a10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
ae8a10
# General Public License for more details.
ae8a10
#
ae8a10
# You should have received a copy of the GNU General Public License
ae8a10
# along with this program; if not, write to the Free Software
ae8a10
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
ae8a10
# USA.
ae8a10
# 
ae8a10
# ----------------------------------------------------------------------
ae8a10
# $Id$
ae8a10
# ----------------------------------------------------------------------
ae8a10
ab1d67
function render_doDm {
ae8a10
d856c1
    local -a SRC
d856c1
    local -a DST
eb0e14
    local DM=''
d856c1
    local TGZ=''
d856c1
    local COUNT=0
d856c1
    local RESOLUTION=''
d856c1
    local RESOLUTIONS=''
ae8a10
8af4d8
    # Print separator line.
8af4d8
    cli_printMessage '-' 'AsSeparatorLine'
8af4d8
15b1d2
    # Get display manager passed from render.conf.sh pre-rendition
ae8a10
    # configuration script.
ab1d67
    DM=$(render_getConfigOption "${ACTION}" '2')
643925
 
d856c1
    # Sanitate display manager passed from render.conf.sh
d856c1
    # pre-rendition configuration script. Whatever value be retrived
d856c1
    # as display manager configuration option is converted to
643925
    # uppercase in order to match either Gdm or Kdm design model
d856c1
    # directory structures.
643925
    DM=$(cli_getRepoName "$DM" 'd')
ae8a10
15b1d2
    # Get screen resolutions passed from render.conf.sh pre-rendition
eb0e14
    # configuration script.
ab1d67
    RESOLUTIONS=$(render_getConfigOption "${ACTION}" '3')
ae8a10
d856c1
    # Check screen resolutions passed from render.conf.sh
d856c1
    # pre-rendition configuration script.
eb0e14
    if [[ "$RESOLUTIONS" == '' ]];then
07c2fe
        cli_printMessage "`gettext "There is no resolution information to process."`" 'AsErrorLine'
ae8a10
        cli_printMessage $(caller) "AsToKnowMoreLine"
ae8a10
    fi
ae8a10
d856c1
    # Define source files using absolute paths.
a77db3
    SRC[0]=$(cli_getRepoTLDir)/Identity/Brands/Img/Symbol/48.png
643925
    SRC[1]=${OUTPUT}/release.png
643925
    SRC[2]=${OUTPUT}/screenshot.png
86c3d1
    SRC[3]=$(dirname $TEMPLATE)/GdmGreeterTheme.xml
86c3d1
    SRC[4]=$(dirname $TEMPLATE)/GdmGreeterTheme.desktop
d856c1
    SRC[5]=$(cli_getRepoTLDir)/Identity/Themes/Motifs/$(cli_getPathComponent '--theme')/Backgrounds/Img/Png
86c3d1
    SRC[6]=$(dirname $TEMPLATE)/icon-language.png
86c3d1
    SRC[7]=$(dirname $TEMPLATE)/icon-reboot.png
86c3d1
    SRC[8]=$(dirname $TEMPLATE)/icon-session.png
86c3d1
    SRC[9]=$(dirname $TEMPLATE)/icon-shutdown.png
d856c1
d856c1
    # Define name used as temporal holder to build tar.gz file. 
d856c1
    TGZ=$(cli_getPathComponent '--theme-name')
d856c1
d856c1
    # Define target files using relative paths.
d856c1
    DST[0]=${TGZ}/centos-symbol.png
d856c1
    DST[1]=${TGZ}/centos-release.png
d856c1
    DST[2]=${TGZ}/screenshot.png
d856c1
    DST[3]=${TGZ}/${TGZ}.xml
d856c1
    DST[4]=${TGZ}/GdmGreeterTheme.desktop
d856c1
    DST[5]=${TGZ}/background.png
d856c1
    DST[6]=${TGZ}/icon-language.png
d856c1
    DST[7]=${TGZ}/icon-reboot.png
d856c1
    DST[8]=${TGZ}/icon-session.png
d856c1
    DST[9]=${TGZ}/icon-shutdown.png
d856c1
d856c1
    # Move into the working directory.
643925
    pushd ${OUTPUT} > /dev/null
d856c1
d856c1
    # Create directory used as temporal holder to build tar.gz file.
d856c1
    if [[ ! -d ${TGZ} ]];then
d856c1
        mkdir ${TGZ}
eb0e14
    fi
ae8a10
d856c1
    for RESOLUTION in $RESOLUTIONS;do
d991f5
d856c1
        while [[ $COUNT -lt ${#SRC[*]} ]];do
ae8a10
d856c1
            if [[ $COUNT -eq 5 ]];then
ae8a10
d856c1
                # Redefine background information using resolution as
d856c1
                # reference. Avoid concatenation.
d856c1
                SRC[$COUNT]=$(echo "${SRC[$COUNT]}" | cut -d/ -f-13)/${RESOLUTION}-final.png
ae8a10
d856c1
                # If background information defined inside
d856c1
                # pre-rendition configuration script doesn't match
d856c1
                # background information inside theme-specific
d856c1
                # backgrounds directory structure, try the next
d856c1
                # background definition.
d856c1
                if [[ ! -f ${SRC[$COUNT]} ]];then
d856c1
                    continue 2
d856c1
                fi
d856c1
        
d856c1
            elif [[ $COUNT =~ '^[6-9]$' ]];then
ae8a10
643925
                # If display manager is Kdm, then increment counter and
643925
                # resume the next iteration. Icons aren't used on Kdm,
d856c1
                # so there's no need to have them inside it.
643925
                if [[ $DM =~ '^Kdm$' ]];then
d856c1
                    COUNT=$(($COUNT + 1))
d856c1
                    continue
d856c1
                fi
ae8a10
d856c1
            fi
eb0e14
d856c1
            # Check existence of source files.
d856c1
            cli_checkFiles ${SRC[$COUNT]}
ae8a10
d856c1
            # Copy files from source to target location.
d856c1
            cp ${SRC[$COUNT]} ${DST[$COUNT]}
ae8a10
d856c1
            # Replace common translation markers from design model
d856c1
            # files with appropriate information.
d856c1
            if [[ $COUNT =~ '^(3|4)$'  ]];then
79e54d
                cli_replaceTMarkers "${DST[$COUNT]}"
8b5668
            fi
ae8a10
d856c1
            # Increment counter.
d856c1
            COUNT=$(($COUNT + 1))
ae8a10
d856c1
        done
ae8a10
d856c1
        # Reset counter.
d856c1
        COUNT=0
ae8a10
643925
        # Print action message.
643925
        cli_printMessage "${OUTPUT}/${RESOLUTION}.tar.gz" "AsCreatingLine"
ae8a10
d856c1
        # Create tar.gz file.
d856c1
        tar -czf "${RESOLUTION}.tar.gz" $TGZ
ae8a10
d856c1
    done
ae8a10
d856c1
    # Remove directory used as temporal holder to build targ.gz
d856c1
    # file.
d856c1
    rm -r $TGZ
ae8a10
d856c1
    # Remove release-specific images.
d856c1
    cli_printMessage "${SRC[1]}" "AsDeletingLine"
d856c1
    rm ${SRC[1]}
d856c1
    cli_printMessage "${SRC[2]}" "AsDeletingLine"
d856c1
    rm ${SRC[2]}
ec641d
d856c1
    # Return to where we were initially.
d856c1
    popd > /dev/null
d856c1
ae8a10
}