diff --git a/source/net/sourceforge/filebot/Analytics.java b/source/net/sourceforge/filebot/Analytics.java index a60364b4..5ef6d372 100644 --- a/source/net/sourceforge/filebot/Analytics.java +++ b/source/net/sourceforge/filebot/Analytics.java @@ -1,7 +1,5 @@ - package net.sourceforge.filebot; - import static com.dmurph.tracking.JGoogleAnalyticsTracker.GoogleAnalyticsVersion.*; import static net.sourceforge.filebot.Settings.*; @@ -18,52 +16,49 @@ import com.dmurph.tracking.JGoogleAnalyticsTracker; import com.dmurph.tracking.VisitorData; import com.sun.jna.Platform; - public class Analytics { - + private static JGoogleAnalyticsTracker tracker; private static VisitorData visitorData; - + private static String host = "filebot.sourceforge.net"; private static String currentView = null; - + private static boolean enabled = false; - - + public static synchronized JGoogleAnalyticsTracker getTracker() throws Throwable { if (tracker != null) return tracker; - + // disable useless background logging, if it doesn't work it doesn't work, won't affect anything (putting it here works for Java 6) Logger.getLogger("com.dmurph.tracking").setLevel(Level.OFF); - + Logger.getLogger("java.util.prefs").setLevel(Level.OFF); + // initialize tracker visitorData = restoreVisitorData(); tracker = new JGoogleAnalyticsTracker(getConfig(getApplicationProperty("analytics.WebPropertyID"), visitorData), V_4_7_2); - + // store session data on shutdown Runtime.getRuntime().addShutdownHook(new Thread("AnalyticsShutdownHook") { - + @Override public void run() { storeVisitorData(visitorData); JGoogleAnalyticsTracker.completeBackgroundTasks(2000); } }); - + return tracker; } - - + public static void trackView(Class view, String title) { trackView(view.getName().replace('.', '/'), title); } - - + public static synchronized void trackView(String view, String title) { if (!enabled) return; - + if (currentView == null) { // track application startup try { @@ -79,58 +74,56 @@ public class Analytics { Logger.getLogger(Analytics.class.getName()).log(Level.WARNING, e.toString()); } } - + currentView = view; } - - + public static void trackEvent(String category, String action, String label) { trackEvent(category, action, label, null); } - - + public static synchronized void trackEvent(String category, String action, String label, Integer value) { if (!enabled) return; - + try { getTracker().trackEvent(normalize(category), normalize(action), normalize(label), value); } catch (Throwable e) { Logger.getLogger(Analytics.class.getName()).log(Level.WARNING, e.toString()); } } - - + private static String normalize(String label) { if (label == null) return null; - + // trim braces return label.replaceAll("[*()]", "").trim(); } - - + public static synchronized void setEnabled(boolean b) { enabled = b; } - - + + public static boolean isEnabled() { + return enabled; + } + private static String getDeploymentMethod() { return getApplicationDeployment() == null ? "fatjar" : getApplicationDeployment(); } - - + private static AnalyticsConfigData getConfig(String webPropertyID, VisitorData visitorData) { AnalyticsConfigData config = new AnalyticsConfigData(webPropertyID, visitorData); - + config.setUserAgent(getUserAgent()); config.setEncoding(System.getProperty("file.encoding")); config.setUserLanguage(getUserLanguage()); - + try { if (GraphicsEnvironment.isHeadless()) throw new HeadlessException(); - + // desktop environment GraphicsDevice[] display = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices(); config.setScreenResolution(getScreenResolution(display)); @@ -140,16 +133,15 @@ public class Analytics { config.setScreenResolution("80x25"); config.setColorDepth("1"); } - + return config; } - - + private static String getUserAgent() { // initialize with default values String wm = System.getProperty("os.name"); String os = System.getProperty("os.name") + " " + System.getProperty("os.version"); - + try { if (Platform.isWindows()) { wm = "Windows"; @@ -160,7 +152,7 @@ public class Analytics { } else { if (!GraphicsEnvironment.isHeadless() && Platform.isX11()) wm = "X11"; - + if (Platform.isLinux()) os = "Linux " + System.getProperty("os.arch"); else if (Platform.isSolaris()) @@ -173,62 +165,58 @@ public class Analytics { } catch (Throwable e) { // ignore any Platform detection issues and especially ignore LinkageErrors that might occur on headless machines } - + return String.format("%s/%s (%s; U; %s; JRE %s)", getApplicationName(), getApplicationVersion(), wm, os, System.getProperty("java.version")); } - - + private static String getUserLanguage() { String language = System.getProperty("user.language"); - + // user region or country String region = System.getProperty("user.region"); if (region == null) region = System.getProperty("user.country"); - + // return language string user language with or without user region if (region == null) return language; - + return language + "-" + region; } - - + private static String getScreenResolution(GraphicsDevice[] display) { int screenHeight = 0; int screenWidth = 0; - + // get size of each screen for (int i = 0; i < display.length; i++) { DisplayMode dm = display[i].getDisplayMode(); screenWidth += dm.getWidth(); screenHeight += dm.getHeight(); } - + return screenWidth + "x" + screenHeight; } - - + private static String getColorDepth(GraphicsDevice[] display) { StringBuilder sb = new StringBuilder(); - + for (int i = 0; i < display.length; i++) { if (sb.length() > 0) { sb.append(", "); } - + sb.append(display[i].getDisplayMode().getBitDepth()); } - + return sb.toString(); } - + private static final String VISITOR_ID = "visitorId"; private static final String TIMESTAMP_FIRST = "timestampFirst"; private static final String TIMESTAMP_LAST = "timestampLast"; private static final String VISITS = "visits"; - - + private synchronized static VisitorData restoreVisitorData() { try { // try to restore visitor @@ -237,15 +225,14 @@ public class Analytics { long timestampFirst = Long.parseLong(data.get(TIMESTAMP_FIRST)); long timestampLast = Long.parseLong(data.get(TIMESTAMP_LAST)); int visits = Integer.parseInt(data.get(VISITS)); - + return VisitorData.newSession(visitorId, timestampFirst, timestampLast, visits); } catch (Exception e) { // new visitor return VisitorData.newVisitor(); } } - - + private synchronized static void storeVisitorData(VisitorData visitor) { Map data = getPersistentData(); data.put(VISITOR_ID, String.valueOf(visitor.getVisitorId())); @@ -253,23 +240,21 @@ public class Analytics { data.put(TIMESTAMP_LAST, String.valueOf(visitor.getTimestampPrevious())); data.put(VISITS, String.valueOf(visitor.getVisits())); } - - + private static Map getPersistentData() { return Settings.forPackage(Analytics.class).node("analytics").asMap(); } - - + /** * Dummy constructor to prevent instantiation */ private Analytics() { throw new UnsupportedOperationException(); } - + static { // disable useless background logging, if it doesn't work it doesn't work, won't affect anything (putting it here works for Java 7) Logger.getLogger("com.dmurph.tracking").setLevel(Level.OFF); } - + } diff --git a/source/net/sourceforge/filebot/ui/transfer/LoadAction.java b/source/net/sourceforge/filebot/ui/transfer/LoadAction.java index 4021a707..7df3f6ca 100644 --- a/source/net/sourceforge/filebot/ui/transfer/LoadAction.java +++ b/source/net/sourceforge/filebot/ui/transfer/LoadAction.java @@ -10,6 +10,7 @@ import javax.swing.AbstractAction; import javax.swing.Icon; import javax.swing.JFileChooser; +import net.sourceforge.filebot.Analytics; import net.sourceforge.filebot.ResourceManager; import net.sourceforge.filebot.Settings; import net.sourceforge.filebot.ui.transfer.TransferablePolicy.TransferAction; @@ -53,8 +54,10 @@ public class LoadAction extends AbstractAction { chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); chooser.setMultiSelectionEnabled(true); - // tell noobs to use drag-n-drop - UILogger.info("Why do you not use drag-and-drop to directly drop in your files?"); + // tell noobs to use drag-n-drop (but avoid annoying people that got it from the app stores) + if (Analytics.isEnabled()) { + UILogger.info("Why do you not use drag-and-drop to directly drop in your files?"); + } if (chooser.showOpenDialog(null) != JFileChooser.APPROVE_OPTION) { return; diff --git a/website/data/query-blacklist.txt b/website/data/query-blacklist.txt index f34d599a..92b28c7f 100644 --- a/website/data/query-blacklist.txt +++ b/website/data/query-blacklist.txt @@ -94,6 +94,7 @@ ^TV$ ^user$ ^utorrent$ +^vari$ ^VCD$ ^VIDEO_TS$ ^volume[0-9]?$