Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/org/adblockplus/sbrowser/contentblocker/engine/Engine.java

Issue 29355386: Issue 4463 - Content blocker unavailable error message (Closed)
Patch Set: Adjusting indentation Created Oct. 7, 2016, 2:38 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2016 Eyeo GmbH 3 * Copyright (C) 2006-2016 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details. 12 * GNU General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License 14 * You should have received a copy of the GNU General Public License
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18 package org.adblockplus.sbrowser.contentblocker.engine; 18 package org.adblockplus.sbrowser.contentblocker.engine;
19 19
20 import java.io.BufferedReader; 20 import java.io.BufferedReader;
21 import java.io.BufferedWriter;
21 import java.io.File; 22 import java.io.File;
23 import java.io.FileOutputStream;
22 import java.io.IOException; 24 import java.io.IOException;
23 import java.io.InputStream; 25 import java.io.InputStream;
24 import java.io.InputStreamReader; 26 import java.io.InputStreamReader;
27 import java.io.OutputStreamWriter;
28 import java.io.Writer;
25 import java.net.URL; 29 import java.net.URL;
26 import java.net.URLEncoder; 30 import java.net.URLEncoder;
27 import java.util.ArrayList; 31 import java.util.ArrayList;
28 import java.util.HashMap; 32 import java.util.HashMap;
29 import java.util.List; 33 import java.util.List;
30 import java.util.Map; 34 import java.util.Map;
31 import java.util.concurrent.LinkedBlockingQueue; 35 import java.util.concurrent.LinkedBlockingQueue;
32 import java.util.concurrent.TimeUnit; 36 import java.util.concurrent.TimeUnit;
33 import java.util.concurrent.locks.ReentrantLock; 37 import java.util.concurrent.locks.ReentrantLock;
34 import java.util.regex.Pattern; 38 import java.util.regex.Pattern;
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 this.nextUpdateBroadcast = System.currentTimeMillis() + BROADCAST_COMBINAT ION_DELAY_MILLIS; 161 this.nextUpdateBroadcast = System.currentTimeMillis() + BROADCAST_COMBINAT ION_DELAY_MILLIS;
158 } 162 }
159 finally 163 finally
160 { 164 {
161 this.unlock(); 165 this.unlock();
162 } 166 }
163 } 167 }
164 168
165 private void sendUpdateBroadcast() 169 private void sendUpdateBroadcast()
166 { 170 {
171 createAndWriteFile();
172
167 runOnUiThread(new Runnable() 173 runOnUiThread(new Runnable()
168 { 174 {
169 @Override 175 @Override
170 public void run() 176 public void run()
171 { 177 {
172 final Intent intent = new Intent(); 178 final Intent intent = new Intent();
173 intent.setAction(ACTION_UPDATE); 179 intent.setAction(ACTION_UPDATE);
174 intent.setData(Uri.parse("package:" + Engine.this.serviceContext.getPack ageName())); 180 intent.setData(Uri.parse("package:" + Engine.this.serviceContext.getPack ageName()));
175 Engine.this.serviceContext.sendBroadcast(intent); 181 Engine.this.serviceContext.sendBroadcast(intent);
176 } 182 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 { 235 {
230 this.engineEvents.add(new ChangeEnabledStateEvent(id, enabled)); 236 this.engineEvents.add(new ChangeEnabledStateEvent(id, enabled));
231 } 237 }
232 238
233 void downloadFinished(final String id, final int responseCode, final String re sponse, 239 void downloadFinished(final String id, final int responseCode, final String re sponse,
234 final Map<String, String> headers) 240 final Map<String, String> headers)
235 { 241 {
236 this.engineEvents.add(new DownloadFinishedEvent(id, responseCode, response, headers)); 242 this.engineEvents.add(new DownloadFinishedEvent(id, responseCode, response, headers));
237 } 243 }
238 244
239 public File createAndWriteFile() throws IOException 245 public void createAndWriteFile()
240 { 246 {
241 this.lock(); 247 this.lock();
242 try 248 try
243 { 249 {
244 Log.d(TAG, "Writing filters..."); 250 Log.d(TAG, "Writing filters...");
245 return this.subscriptions.createAndWriteFile(); 251 final File filterFile = this.subscriptions.createAndWriteFile();
252
253 final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferen ces(this.serviceContext);
254 final String key = this.serviceContext.getString(R.string.key_cached_filte r_path);
255 prefs.edit().putString(key, filterFile.getAbsolutePath()).commit();
256
257 }
258 catch (IOException e)
259 {
260 Log.e(TAG, "Failed to write filters", e);
246 } 261 }
247 finally 262 finally
248 { 263 {
249 this.unlock(); 264 this.unlock();
250 } 265 }
251 } 266 }
252 267
253 public static void runOnUiThread(final Runnable runnable) 268 public static void runOnUiThread(final Runnable runnable)
254 { 269 {
255 new Handler(Looper.getMainLooper()).post(runnable); 270 new Handler(Looper.getMainLooper()).post(runnable);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 try 335 try
321 { 336 {
322 engine.defaultSubscriptions = DefaultSubscriptions.fromStream(subscription sXml); 337 engine.defaultSubscriptions = DefaultSubscriptions.fromStream(subscription sXml);
323 } 338 }
324 finally 339 finally
325 { 340 {
326 subscriptionsXml.close(); 341 subscriptionsXml.close();
327 } 342 }
328 343
329 Log.d(TAG, "Finished reading 'subscriptions.xml'"); 344 Log.d(TAG, "Finished reading 'subscriptions.xml'");
330 engine.subscriptions = Subscriptions.initialize(engine, context.getFilesDir( ), 345 engine.subscriptions = Subscriptions.initialize(engine, getSubscriptionsDir( context),
331 context.getCacheDir()); 346 getFilterCacheDir(context));
332 347
333 final InputStream prefsJson = context.getResources().openRawResource(R.raw.p refs); 348 final InputStream prefsJson = context.getResources().openRawResource(R.raw.p refs);
334 try 349 try
335 { 350 {
336 engine.jsonPrefs = JSONPrefs.create(prefsJson); 351 engine.jsonPrefs = JSONPrefs.create(prefsJson);
337 } 352 }
338 finally 353 finally
339 { 354 {
340 prefsJson.close(); 355 prefsJson.close();
341 } 356 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 { 401 {
387 additional++; 402 additional++;
388 engine.subscriptions.add(sub); 403 engine.subscriptions.add(sub);
389 } 404 }
390 } 405 }
391 406
392 Log.d(TAG, "Added " + additional + " additional default/built-in subscript ions"); 407 Log.d(TAG, "Added " + additional + " additional default/built-in subscript ions");
393 engine.subscriptions.persistSubscriptions(); 408 engine.subscriptions.persistSubscriptions();
394 } 409 }
395 410
411 final File cachedFilterFile = getCachedFilterFile(context);
412 if (cachedFilterFile == null || !cachedFilterFile.exists())
413 {
414 engine.sendUpdateBroadcast();
415 }
416
396 engine.handlerThread = new Thread(new EventHandler(engine)); 417 engine.handlerThread = new Thread(new EventHandler(engine));
397 engine.handlerThread.setDaemon(true); 418 engine.handlerThread.setDaemon(true);
398 engine.handlerThread.start(); 419 engine.handlerThread.start();
399 420
400 engine.downloader = Downloader.create(context, engine); 421 engine.downloader = Downloader.create(context, engine);
401 422
402 return engine; 423 return engine;
403 } 424 }
404 425
405 public static String readFileAsString(InputStream instream) throws IOException 426 public static String readFileAsString(InputStream instream) throws IOException
(...skipping 11 matching lines...) Expand all
417 { 438 {
418 final ArrayList<String> list = new ArrayList<String>(); 439 final ArrayList<String> list = new ArrayList<String>();
419 final BufferedReader r = new BufferedReader(new InputStreamReader(instream, "UTF-8")); 440 final BufferedReader r = new BufferedReader(new InputStreamReader(instream, "UTF-8"));
420 for (String line = r.readLine(); line != null; line = r.readLine()) 441 for (String line = r.readLine(); line != null; line = r.readLine())
421 { 442 {
422 list.add(line); 443 list.add(line);
423 } 444 }
424 return list; 445 return list;
425 } 446 }
426 447
448 public static File getOrCreateCachedFilterFile(Context context) throws IOExcep tion
449 {
450 final File cachedFilterFile = getCachedFilterFile(context);
451 if (cachedFilterFile != null && cachedFilterFile.exists())
452 {
453 Log.d(TAG, "Cached filter file found: " + cachedFilterFile);
454 return cachedFilterFile;
455 }
456
457 Log.d(TAG, "Cached filter file not found. Using dummy filter file");
458 final File dummyFilterFile = getDummyFilterFile(context);
459 if (!dummyFilterFile.exists())
460 {
461 Log.d(TAG, "Creating dummy filter file...");
462 dummyFilterFile.getParentFile().mkdirs();
463 final BufferedWriter writer = new BufferedWriter(
464 new OutputStreamWriter(new FileOutputStream(dummyFilterFile), "UTF-8") );
465 try
466 {
467 writeFilterHeaders(writer);
468 }
469 finally
470 {
471 writer.close();
472 }
473 }
474 return dummyFilterFile;
475 }
476
477 public static void writeFilterHeaders(Writer writer) throws IOException
478 {
479 writer.write("[Adblock Plus 2.0]\n");
480 writer.write("! This file was automatically created.\n");
481 }
482
483 private static File getCachedFilterFile(Context context)
484 {
485 final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreference s(context);
486 final String cachedFilterPath = prefs.getString(context.getString(R.string.k ey_cached_filter_path), null);
487 if (cachedFilterPath != null)
488 {
489 return new File(cachedFilterPath);
490 }
491
492 return null;
493 }
494
495 private static File getDummyFilterFile(Context context)
496 {
497 return new File(getFilterCacheDir(context), "dummy.txt");
498 }
499
500 private static File getFilterCacheDir(Context context)
501 {
502 return new File(context.getCacheDir(), "subscriptions");
503 }
504
505 private static File getSubscriptionsDir(Context context)
506 {
507 return new File(context.getFilesDir(), "subscriptions");
508 }
509
427 URL createDownloadURL(final Subscription sub) throws IOException 510 URL createDownloadURL(final Subscription sub) throws IOException
428 { 511 {
429 final StringBuilder sb = new StringBuilder(); 512 final StringBuilder sb = new StringBuilder();
430 513
431 sb.append(sub.getURL()); 514 sb.append(sub.getURL());
432 if (sub.getURL().getQuery() != null) 515 if (sub.getURL().getQuery() != null)
433 { 516 {
434 sb.append('&'); 517 sb.append('&');
435 } 518 }
436 else 519 else
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 Log.d(TAG, headers.toString()); 710 Log.d(TAG, headers.toString());
628 this.downloader.enqueueDownload(this.createDownloadURL(sub), sub.getId(), headers); 711 this.downloader.enqueueDownload(this.createDownloadURL(sub), sub.getId(), headers);
629 } 712 }
630 } 713 }
631 714
632 public void connectivityChanged() 715 public void connectivityChanged()
633 { 716 {
634 this.downloader.connectivityChanged(); 717 this.downloader.connectivityChanged();
635 } 718 }
636 } 719 }
OLDNEW

Powered by Google App Engine
This is Rietveld