#!/bin/bash # file: gsl__post_manager # Folder: /var/lib/gsl/scripts # By echolib # License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 #----------------------------------------------------------------------- # ----------------------------------------------------------- # MAIN LOOP. Read from Post list. Do according to Post Status # ----------------------------------------------------------- #----------------------------------------------------------------------- gsl__loop_posts() { gsl__check_nbr_posts (( $gsl_nbr_posts == 0 )) \ && gsl__logs_print \ "$gsl_log_w" \ "Files" \ "Not found" \ "Nothing to do" \ "${PWD}" \ && gsl_checker_war=true \ && return gsl__logs_print \ "$gsl_log_i" \ "Files" \ "Found" \ "$gsl_nbr_posts" \ "${PWD}" for gsl_post in `ls -1 *.gsl 2>/dev/null` do # Check specific asked Post if [[ "$gsl_this_post" ]];then ! [[ "$gsl_post" == "$gsl_this_post" ]] \ && continue fi gsl__get_sum "$gsl_post" # Post too small / Should miss headers if (( "$gsl_post_size" <= $gsl_post_min_size ));then gsl__logs_print \ "$gsl_log_w" \ "File" \ "Content" \ "Not enough datas $gsl_post ($gsl_post_size < $gsl_post_min_size)" \ "${PWD}/$gsl_post" gsl_checker_war=true continue fi # Set DB Post file gsl_file_db_post="$gsl_dir_db/$gsl_post.db" gsl__db_get_post_datas "$1" gsl__db_compare_post_hash gsl__post_begin gsl__get_needed_headers gsl__page_prepare_datas if [[ "$gsl_post_new_hash" ]];then unset gsl_db_post_status gsl_checker_war=true if [[ -f "$gsl_srv_wip_page" ]];then rm -f "$gsl_srv_wip_page" && \ gsl__logs_print \ "$gsl_log_w" \ "wip" \ "Delete" \ "$gsl_post_type ; $gsl_post has changed !" \ "$gsl_srv_wip_page" fi if [[ -f "$gsl_file_db_post" ]];then rm -f "$gsl_file_db_post" && \ gsl__logs_print \ "$gsl_log_w" \ "DB" \ "Delete" \ "file ; $gsl_post has changed !" \ "$gsl_file_db_post" fi fi # From COMMAND [OPT] case "$1" in check) if ! [[ "$gsl_force_check" ]];then ! [[ "$gsl_post_new_hash" ]] && continue fi gsl__logs_print \ "$gsl_log_i" \ "Reading" \ "File" \ "$gsl_post" \ "${PWD}" gsl__all_checkers ;; make) case "$gsl_db_post_status" in chk) gsl__all_makers ;; *) if ! [[ "$gsl_post_new_hash" ]];then # Should not be used... [[ "$gsl_force_make" ]] \ && gsl__all_makers \ && continue if [[ -f "$gsl_srv_wip_page" ]];then gsl__logs_print \ "$gsl_log_w" \ "Post" \ "Make" \ "$gsl_post already Converted" \ "$gsl_file_db_posts" gsl_checker_war=true continue fi fi ;; esac ;; www) gsl_checker_war=true case "$2" in add) case "$gsl_db_post_status" in wip|www) rsync -a --delete \ "$gsl_srv_wip_page" "$gsl_srv_www_page" && \ gsl__logs_print \ "$gsl_log_w" \ "SRV" \ "www" \ "Synced: $gsl_post_type $gsl_post" \ "$gsl_srv_www_page" gsl__db_set_post_status www ;; *) gsl__logs_print \ "$gsl_log_e" \ "Post" \ "Status" \ "$gsl_db_post_status: $gsl_post not Converted" \ "$gsl_file_db_posts" gsl_checker_err=true ;; esac ;; remove) case "$gsl_post_type" in post) ! [[ -d "$gsl_srv_www_page" ]] \ && return gsl_rm_c="rm -rf" ;; page) ! [[ -f "$gsl_srv_www_page" ]] \ && return gsl_rm_c="rm -f" ;; esac $gsl_rm_c "$gsl_srv_www_page" && \ gsl__logs_print \ "$gsl_log_w" \ "SRV" \ "www" \ "REMOVED $gsl_post_type $gsl_post" \ "$gsl_srv_www_page" gsl__db_set_post_status wip ;; esac ;; esac done } #----------------------------------------------------------------------- # -------------------- # Doing some checkings # -------------------- #----------------------------------------------------------------------- #======================================================================= # Check NAME post from [OPT] ; should be from autocompletion #======================================================================= gsl__check_opt_post() { if [[ `ls -1 *.gsl | grep "$1"` ]];then gsl_this_post="$1" else echo "! $1 Not Found" exit fi } #======================================================================= # Check if posts from PWD folder #======================================================================= gsl__check_nbr_posts() { gsl_nbr_posts=`ls -1 *.gsl 2>/dev/null | wc -l` (( $gsl_nbr_posts == 0 )) \ && echo "! No Posts found with .gsl extension" \ && exit } #====================================================================== # Create TMP file > Get Content Post Only (after #1) #====================================================================== gsl__post_content_only() { gsl_tmp_post=`mktemp` awk -v l="$gsl_post_begin" \ 'NR >= l' \ "$gsl_post" \ > "$gsl_tmp_post" } gsl__post_begin() { gsl_post_begin=` awk -v m="#1" \ 'match($1,m) {print NR;exit}' \ "$gsl_post"` }