ggscrapeView |
---|
94 | 94 … | req_fragment "topic/${group_id}/${topic_id}" | sed -n\ |
95 | 95 … | 's/.*<td class="subject"><a href="[^"]*'$topic_id'\/\([^"]*\)".*/\1/p' |
96 | 96 … | } |
97 | 97 … | |
| 98 … | +fix_message() { |
| 99 … | + local file="$1" |
| 100 … | + # Some messages have two duplicate sets of headers, the second set starting |
| 101 … | + # with some X-Google stuff. Remove the second set of headers if they are |
| 102 … | + # present. |
| 103 … | + if sed -n '/^\r$/{ n; /^X-Google-Groups:/q; q 1; }' "$file"; then |
| 104 … | + debug_print 'Removing duplicate headers' |
| 105 … | + sed -i~ '/^X-Google-Groups:/,/^\r$/d' "$file" && rm "$file~" |
| 106 … | + fi |
| 107 … | +} |
| 108 … | + |
98 | 109 … | download_message() { |
99 | 110 … | local topic_id="$1" |
100 | 111 … | local msg_id="$2" |
101 | 112 … | debug_print download topic $topic_id message $msg_id |
106 | 117 … | echo "message ${topic_id}${msg_id} downloading." |
107 | 118 … | temp=$(mktemp) |
108 | 119 … | if req "message/raw?msg=${group_id}/${topic_id}/${msg_id}" -o "$temp" |
109 | 120 … | then |
| 121 … | + fix_message "$temp" |
110 | 122 … | mv "$temp" "$path" |
111 | 123 … | if [[ -n "$ln_dir" ]]; then |
112 | 124 … | ln "$path" "$ln_dir" |
113 | 125 … | fi |
147 | 159 … | ggscrape <group_id> test |
148 | 160 … | ggscrape <group_id> topics |
149 | 161 … | ggscrape <group_id> messages <topic_id> |
150 | 162 … | ggscrape <group_id> download <dest_dir> |
| 163 … | + ggscrape fix_message <file> |
151 | 164 … | |
152 | 165 … | Options: |
153 | 166 … | -h, --help Show this screen |
154 | 167 … | --version Show version |
168 | 181 … | cmd= |
169 | 182 … | topic_id= |
170 | 183 … | topic_begin= |
171 | 184 … | topic_end= |
| 185 … | +fix_file= |
172 | 186 … | |
173 | 187 … | while [[ "$#" -gt 0 ]]; do |
174 | 188 … | case "$1" in |
175 | 189 … | -h|--help) show_help; exit;; |
182 | 196 … | topics) cmd=topics;; |
183 | 197 … | test) cmd=test;; |
184 | 198 … | messages) cmd=messages; topic_id="$2"; shift;; |
185 | 199 … | download) cmd=download; dest_dir="$2"; shift;; |
| 200 … | + fix_message) cmd=fix_message; fix_file="$2"; shift;; |
186 | 201 … | *) if [[ -z "$group_id" ]]; then |
187 | 202 … | group_id="$1" |
188 | 203 … | else |
189 | 204 … | unknown_option "$1" |
191 | 206 … | esac |
192 | 207 … | shift |
193 | 208 … | done |
194 | 209 … | |
| 210 … | +if [[ $cmd==fix_message ]]; then |
| 211 … | + if [[ -z "$fix_file" ]]; then |
| 212 … | + show_help |
| 213 … | + exit 1 |
| 214 … | + fi |
| 215 … | + fix_message "$fix_file" |
| 216 … | + exit |
| 217 … | +fi |
| 218 … | + |
195 | 219 … | if [[ -z "$group_id" ]]; then |
196 | 220 … | show_help |
197 | 221 … | exit 1 |
198 | 222 … | fi |