#!/usr/bin/env bash
# This file is part of Ark Cpp Client.
#
# (c) Ark Ecosystem <info@ark.io>
#
# For the full copyright and license information, please view the LICENSE
# file that was distributed with this source code.
# #########
# This script extends support to the Arduino IDE.
#
# The Arduino IDE doesn't support extending its search path outside of the 'src' folder.
# The Ark Cpp-Client SDK exposes its public interface via the 'includes' folder.
#
# This script moves the headers from 'includes' into their reletive directories in the 'src' folder;
# it then delete the 'includes' folder.
#
# Additionally, once this script has been ran, it can be executed again to undo these changes.
# (i.e. recreates the directory tree and moves headers back to 'includes'.)
# #########
# Directories
EXTRAS_DIR=`dirname "$0"`
INCLUDE_DIR=${EXTRAS_DIR}/../src/include/cpp-client
SRC_DIR=${EXTRAS_DIR}/../src
INCLUDE_API_DIR=${INCLUDE_DIR}/api
SRC_API_DIR=${SRC_DIR}/api
INCLUDE_BLOCKS_DIR=${INCLUDE_DIR}/api/blocks
INCLUDE_DELEGATES_DIR=${INCLUDE_DIR}/api/delegates
INCLUDE_NODE_DIR=${INCLUDE_DIR}/api/node
INCLUDE_PEERS_DIR=${INCLUDE_DIR}/api/peers
INCLUDE_TRANSACTIONS_DIR=${INCLUDE_DIR}/api/transactions
INCLUDE_VOTES_DIR=${INCLUDE_DIR}/api/votes
INCLUDE_WALLETS_DIR=${INCLUDE_DIR}/api/wallets
SRC_BLOCKS_DIR=${SRC_DIR}/api/blocks
SRC_DELEGATES_DIR=${SRC_DIR}/api/delegates
SRC_NODE_DIR=${SRC_DIR}/api/node
SRC_PEERS_DIR=${SRC_DIR}/api/peers
SRC_TRANSACTIONS_DIR=${SRC_DIR}/api/transactions
SRC_VOTES_DIR=${SRC_DIR}/api/votes
SRC_WALLETS_DIR=${SRC_DIR}/api/wallets
INCLUDE_CONNECTION_DIR=${INCLUDE_DIR}/connection
SRC_CONNECTION_DIR=${SRC_DIR}/connection
INCLUDE_HTTP_DIR=${INCLUDE_DIR}/http
SRC_HTTP_DIR=${SRC_DIR}/http
# Interface
echo -e "\n\nš Welcome Aboard š¢\n\n"
sleep 1
if [[ -d ${INCLUDE_DIR} ]]; then
echo -e "š¤ This script extends compatibility to the Arduino IDE š¤\n"
sleep 2
echo -e "šŖ All header files will be moved to their 'src' folders šŖ\n"
sleep 2
else
echo -e "š¤ Looks like this library was already converted to support the Arduino IDE š¤\n"
sleep 2
echo -e "šŖ All header files will be moved back to the 'include' folder šŖ\n"
sleep 2
fi
echo -e "\nš These changes are permanent, any unsaved changes will be lost š\n"
sleep 4
# Prompts for continuation
read -p "ā ļø Are you sure you want to continue? (Y/n):" -n 1 -r
echo
if [[ ${REPLY} =~ ^[Nn]$ ]]; then
echo -e "\n\nš Exiting script...\nNo Changes were made š\n\n";
exit 0;
else
echo -e "\n\nš Let's go!\n";
fi
if [[ -d ${INCLUDE_DIR} ]]; then
# This will run if headers are in the 'includes' directory tree.
echo -e "****************************************\n"
echo -e "Moving 'arkClient.h' to 'src' directory.\n"
mv ${INCLUDE_DIR}/arkClient.h ${SRC_DIR}
sleep 1
echo -e "Moving API headers.\n"
mv ${INCLUDE_API_DIR}/abstract.h ${SRC_API_DIR}
mv ${INCLUDE_API_DIR}/api.h ${SRC_API_DIR}
mv ${INCLUDE_API_DIR}/base.h ${SRC_API_DIR}
mv ${INCLUDE_API_DIR}/paths.h ${SRC_API_DIR}
mv ${INCLUDE_BLOCKS_DIR}/blocks.h ${SRC_BLOCKS_DIR}
mv ${INCLUDE_DELEGATES_DIR}/delegates.h ${SRC_DELEGATES_DIR}
mv ${INCLUDE_NODE_DIR}/node.h ${SRC_NODE_DIR}
mv ${INCLUDE_PEERS_DIR}/peers.h ${SRC_PEERS_DIR}
mv ${INCLUDE_TRANSACTIONS_DIR}/transactions.h ${SRC_TRANSACTIONS_DIR}
mv ${INCLUDE_VOTES_DIR}/votes.h ${SRC_VOTES_DIR}
mv ${INCLUDE_WALLETS_DIR}/wallets.h ${SRC_WALLETS_DIR}
sleep 1
echo "Creating 'connection' folder š"
mkdir ${SRC_CONNECTION_DIR}
sleep 1
echo -e "Moving 'connection.h' to 'src/connection'.\n"
mv ${INCLUDE_CONNECTION_DIR}/connection.h ${SRC_CONNECTION_DIR}
sleep 1
echo -e "Moving 'http.h'\n"
mv ${INCLUDE_HTTP_DIR}/http.h ${SRC_HTTP_DIR}
sleep 1
echo -e "Removing old directories š\n"
rm -rf ${INCLUDE_DIR}
sleep 1
echo -e "****************************************\n"
sleep 1
echo -e "\nAll Done!\nššššš\n"
echo -e "\nYou can now use Cpp-Client with the Arduino IDE š\n\n"
exit 0
else
# This will run if headers are already in the 'src' directory tree.
echo -e "****************************************\n"
echo -e "Recreating the 'include' folder š\n"
mkdir ${INCLUDE_DIR}
sleep 1
echo -e "Moving 'arkClient.h' back to the 'include' directory.\n"
mv ${SRC_DIR}/arkClient.h ${INCLUDE_DIR}
sleep 1
echo -e "Recreating API directories š\n"
mkdir ${INCLUDE_API_DIR}
mkdir ${INCLUDE_BLOCKS_DIR}
mkdir ${INCLUDE_DELEGATES_DIR}
mkdir ${INCLUDE_NODE_DIR}
mkdir ${INCLUDE_PEERS_DIR}
mkdir ${INCLUDE_TRANSACTIONS_DIR}
mkdir ${INCLUDE_VOTES_DIR}
mkdir ${INCLUDE_WALLETS_DIR}
sleep 1
echo -e "Moving API headers back to the 'include' tree.\n"
mv ${SRC_API_DIR}/abstract.h ${INCLUDE_API_DIR}
mv ${SRC_API_DIR}/api.h ${INCLUDE_API_DIR}
mv ${SRC_API_DIR}/base.h ${INCLUDE_API_DIR}
mv ${SRC_API_DIR}/paths.h ${INCLUDE_API_DIR}
mv ${SRC_BLOCKS_DIR}/blocks.h ${INCLUDE_BLOCKS_DIR}
mv ${SRC_DELEGATES_DIR}/delegates.h ${INCLUDE_DELEGATES_DIR}
mv ${SRC_NODE_DIR}/node.h ${INCLUDE_NODE_DIR}
mv ${SRC_PEERS_DIR}/peers.h ${INCLUDE_PEERS_DIR}
mv ${SRC_TRANSACTIONS_DIR}/transactions.h ${INCLUDE_TRANSACTIONS_DIR}
mv ${SRC_VOTES_DIR}/votes.h ${INCLUDE_VOTES_DIR}
mv ${SRC_WALLETS_DIR}/wallets.h ${INCLUDE_WALLETS_DIR}
sleep 1
echo -e "Creating 'include/connection' folder š"
mkdir ${INCLUDE_CONNECTION_DIR}
sleep 1
echo -e "Moving 'connection.h' to 'src/connection'.\n"
mv ${SRC_CONNECTION_DIR}/connection.h ${INCLUDE_CONNECTION_DIR}
sleep 1
echo -e "Creating 'http' folder š"
mkdir ${INCLUDE_HTTP_DIR}
sleep 1
echo -e "Moving 'http.h'\n"
mv ${SRC_HTTP_DIR}/http.h ${INCLUDE_HTTP_DIR}
sleep 1
echo -e "Removing old directories š\n"
rm -rf ${SRC_CONNECTION_DIR}
sleep 1
echo -e "****************************************\n"
sleep 1
echo -e "\nAll Done!\nššššš\n"
echo -e "\nArduino IDE compatibility has been reverted š\n\n"
exit 0
fi