-
-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathpackage.sh
More file actions
executable file
·177 lines (149 loc) · 4.22 KB
/
Copy pathpackage.sh
File metadata and controls
executable file
·177 lines (149 loc) · 4.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#!/usr/bin/env bash
# Package KDE Plasma widgets into distributable .plasmoid files
set -e
PACKAGE_DIR="2-packaged"
PACKAGES_SRC="packages"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Compile translations (.po -> .mo) so they get bundled into the .plasmoid. No-op without gettext.
build_translations() {
if command -v msgfmt &>/dev/null; then
echo "[*] Compiling translations..."
"${SCRIPT_DIR}/translate/build.sh" >/dev/null 2>&1 || true
fi
}
package_widget() {
local WIDGET_NAME="$1"
local WIDGET_DIR="${PACKAGES_SRC}/${WIDGET_NAME}"
local METADATA_FILE="${WIDGET_DIR}/metadata.json"
if [[ ! -f "$METADATA_FILE" ]]; then
echo "[!] Error: metadata.json not found in ${WIDGET_NAME}"
return 1
fi
echo ""
echo "================================"
echo "[*] Packaging: ${WIDGET_NAME}"
echo "================================"
local WIDGET_ID=$(jq -r '.KPlugin.Id' "$METADATA_FILE")
local VERSION=$(jq -r '.KPlugin.Version' "$METADATA_FILE")
if [[ -z "$WIDGET_ID" || "$WIDGET_ID" == "null" ]]; then
echo "[!] Error: Invalid widget ID in metadata.json"
return 1
fi
local OUTPUT_NAME="${WIDGET_NAME}"
if [[ -n "$VERSION" && "$VERSION" != "null" ]]; then
OUTPUT_NAME="${WIDGET_NAME}-${VERSION}"
fi
local OUTPUT_FILE="${PACKAGE_DIR}/${OUTPUT_NAME}.plasmoid"
local TEMP_DIR=$(mktemp -d)
trap "rm -rf $TEMP_DIR" EXIT
echo "[*] Copying widget files (dereferencing symlinks)..."
tar -C "${WIDGET_DIR}" -chf - . | tar -C "$TEMP_DIR" -xf -
echo "[*] Cleaning up development files..."
find "$TEMP_DIR" -name "*.swp" -delete 2>/dev/null || true
find "$TEMP_DIR" -name "*.swo" -delete 2>/dev/null || true
find "$TEMP_DIR" -name "*~" -delete 2>/dev/null || true
find "$TEMP_DIR" -name ".DS_Store" -delete 2>/dev/null || true
mkdir -p "$PACKAGE_DIR"
local ABS_OUTPUT=$(realpath "$OUTPUT_FILE")
echo "[*] Creating .plasmoid package..."
pushd "$TEMP_DIR" > /dev/null
zip -q -r "$ABS_OUTPUT" .
popd > /dev/null
echo "[+] Package created successfully!"
echo " Widget ID: ${WIDGET_ID}"
echo " Version: ${VERSION}"
echo " Output: ${ABS_OUTPUT}"
echo " Size: $(du -h "$OUTPUT_FILE" | cut -f1)"
return 0
}
print_usage() {
echo "Usage:"
echo " ./package.sh <package_folder> Package a single widget (works for test-* too)"
echo " ./package.sh -a | --all Package all non-test widgets"
echo " ./package.sh -t | --test Package only test-* widgets"
echo " ./package.sh -a -t Package everything (or: -at)"
}
WANT_ALL=false
WANT_TEST=false
WIDGET_NAME=""
while [[ $# -gt 0 ]]; do
case "$1" in
-a|--all)
WANT_ALL=true
shift
;;
-t|--test)
WANT_TEST=true
shift
;;
-at|-ta)
WANT_ALL=true
WANT_TEST=true
shift
;;
-h|--help)
print_usage
exit 0
;;
-*)
echo "[!] Unknown flag: $1"
print_usage
exit 1
;;
*)
if [[ -n "$WIDGET_NAME" ]]; then
echo "[!] Multiple widget names not supported: $WIDGET_NAME and $1"
exit 1
fi
WIDGET_NAME="$1"
shift
;;
esac
done
if [[ "$WANT_ALL" == "true" || "$WANT_TEST" == "true" ]]; then
if [[ -n "$WIDGET_NAME" ]]; then
echo "[!] Cannot combine a widget name with -a / -t"
exit 1
fi
build_translations
ALL_WIDGETS=($(ls -d ${PACKAGES_SRC}/*/ 2>/dev/null | xargs -n 1 basename))
if [[ ${#ALL_WIDGETS[@]} -eq 0 ]]; then
echo "[!] No widgets found in ${PACKAGES_SRC} directory"
exit 1
fi
WIDGETS=()
for widget in "${ALL_WIDGETS[@]}"; do
if [[ "$widget" == test-* ]]; then
if [[ "$WANT_TEST" == "true" ]]; then
WIDGETS+=("$widget")
fi
else
if [[ "$WANT_ALL" == "true" ]]; then
WIDGETS+=("$widget")
fi
fi
done
if [[ ${#WIDGETS[@]} -eq 0 ]]; then
echo "[!] No matching widgets to package"
exit 1
fi
echo "[*] Packaging ${#WIDGETS[@]} widget(s)..."
for widget in "${WIDGETS[@]}"; do
package_widget "$widget" || echo "[!] Failed: $widget"
done
echo ""
echo "[+] All packages saved to: $(realpath $PACKAGE_DIR)"
elif [[ -n "$WIDGET_NAME" && -d "${PACKAGES_SRC}/$WIDGET_NAME" ]]; then
build_translations
package_widget "$WIDGET_NAME"
echo "[+] Packaging complete!"
else
if [[ -n "$WIDGET_NAME" ]]; then
echo "[!] Widget package not found: $WIDGET_NAME"
fi
echo "[+] Available widgets:"
ls "$PACKAGES_SRC"
echo ""
print_usage
exit 1
fi