added libtorrent parse scripts
authorRazvan Deaconescu <razvan.deaconescu@cs.pub.ro>
Tue, 8 Dec 2009 17:14:20 +0000 (19:14 +0200)
committerRazvan Deaconescu <razvan.deaconescu@cs.pub.ro>
Tue, 8 Dec 2009 17:15:10 +0000 (19:15 +0200)
scripts/parse_log_files [new file with mode: 0755]
scripts/parse_status_files [new file with mode: 0755]
tribler-mod/Tribler/Test/API/contentdir/file.avi [deleted file]
tribler-mod/Tribler/Test/API/file.wmv [deleted file]
tribler-mod/Tribler/Test/API/file2.wmv [deleted file]

diff --git a/scripts/parse_log_files b/scripts/parse_log_files
new file mode 100755 (executable)
index 0000000..b1b3daf
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+DATABASE_FILE=client-limitation-experiment.db
+REPOSITORY_ROOT=../../../cs-p2p-next
+
+echo "Running libtorrent log file parser."
+echo "Database file is $DATABASE_FILE"
+echo -e "Repository root is $REPOSITORY_ROOT"
+echo -e "Going hot ...\n"
+
+id=0
+start_from=21
+for folder in $(find .. -type d -name 'p2p-next-*' | sort); do
+       ((id++))
+       if test $id -lt $start_from; then
+               continue
+       fi
+
+       echo "Parsing status folder $folder for session id $id ... "
+
+       for log_file in $(find $folder/log/libtorrent_logs5* -type f); do
+               yes y | PYTHONPATH=$REPOSITORY_ROOT/auto/db/ python $REPOSITORY_ROOT/log-parser/libtorrent/LogParser.py -i $id -f $log_file $DATABASE_FILE
+       done
+
+done
diff --git a/scripts/parse_status_files b/scripts/parse_status_files
new file mode 100755 (executable)
index 0000000..7a14641
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+DATABASE_FILE=client-test.db
+REPOSITORY_ROOT=../../../cs-p2p-next
+
+echo "Running status file parser."
+echo "Database file is $DATABASE_FILE"
+echo -e "Repository root is $REPOSITORY_ROOT"
+echo -e "Going hot ...\n"
+
+id=0
+for status_file in $(find .. -type f -name 'hrktorrent_file*.log' | sort); do
+       ((id++))
+       echo -n "Parsing status file $status_file for session id $id ... "
+
+       PYTHONPATH=$REPOSITORY_ROOT/auto/db/ python $REPOSITORY_ROOT/log-parser/libtorrent/StatusParser.py -i $id -f $status_file $DATABASE_FILE
+       echo "done"
+done
diff --git a/tribler-mod/Tribler/Test/API/contentdir/file.avi b/tribler-mod/Tribler/Test/API/contentdir/file.avi
deleted file mode 100644 (file)
index 08a5020..0000000
+++ /dev/null
@@ -1,1371 +0,0 @@
-#!/usr/bin/python\r
-\r
-#########################################################################\r
-#\r
-# Author : Choopan RATTANAPOKA, Jie Yang, Arno Bakker\r
-#\r
-# Description : Main ABC [Yet Another Bittorrent Client] python script.\r
-#               you can run from source code by using\r
-#               >python abc.py\r
-#               need Python, WxPython in order to run from source code.\r
-#########################################################################\r
-\r
-# Arno: M2Crypto overrides the method for https:// in the\r
-# standard Python libraries. This causes msnlib to fail and makes Tribler\r
-# freakout when "http://www.tribler.org/version" is redirected to\r
-# "https://www.tribler.org/version/" (which happened during our website\r
-# changeover) Until M2Crypto 0.16 is patched I'll restore the method to the\r
-# original, as follows.\r
-#\r
-# This must be done in the first python file that is started.\r
-#\r
-\r
-import urllib\r
-original_open_https = urllib.URLopener.open_https\r
-import M2Crypto\r
-urllib.URLopener.open_https = original_open_https\r
-\r
-import sys, locale\r
-import os\r
-import wx, commands\r
-from wx import xrc\r
-#import hotshot\r
-\r
-if sys.platform == "darwin":\r
-    # on Mac, we can only load VLC libraries\r
-    # relative to the location of tribler.py\r
-    os.chdir(os.path.abspath(os.path.dirname(sys.argv[0])))\r
-\r
-from threading import Thread, Timer, Event,currentThread,enumerate\r
-from time import time, ctime, sleep\r
-from traceback import print_exc, print_stack\r
-from cStringIO import StringIO\r
-import urllib\r
-\r
-from interconn import ServerListener, ClientPassParam\r
-from launchmanycore import ABCLaunchMany\r
-\r
-from ABC.Toolbars.toolbars import ABCBottomBar2, ABCStatusBar, ABCMenuBar, ABCToolBar\r
-from ABC.GUI.menu import ABCMenu\r
-from ABC.Scheduler.scheduler import ABCScheduler\r
-\r
-from webservice import WebListener\r
-\r
-if (sys.platform == 'win32'):\r
-    from Dialogs.regdialog import RegCheckDialog\r
-\r
-from ABC.GUI.list import ManagedList\r
-from Utility.utility import Utility\r
-from Utility.constants import * #IGNORE:W0611\r
-\r
-from Tribler.__init__ import tribler_init, tribler_done\r
-from BitTornado.__init__ import product_name\r
-from safeguiupdate import DelayedInvocation,FlaglessDelayedInvocation\r
-import webbrowser\r
-from Tribler.Dialogs.MugshotManager import MugshotManager\r
-from Tribler.vwxGUI.GuiUtility import GUIUtility\r
-import Tribler.vwxGUI.updateXRC as updateXRC\r
-from Tribler.Video.VideoPlayer import VideoPlayer,return_feasible_playback_modes,PLAYBACKMODE_INTERNAL\r
-from Tribler.Video.VideoServer import VideoHTTPServer\r
-from Tribler.Dialogs.GUIServer import GUIServer\r
-from Tribler.vwxGUI.TasteHeart import set_tasteheart_bitmaps\r
-from Tribler.vwxGUI.perfBar import set_perfBar_bitmaps\r
-from Tribler.Dialogs.BandwidthSelector import BandwidthSelector\r
-from Tribler.Subscriptions.rss_client import TorrentFeedThread\r
-from Tribler.Dialogs.activities import *\r
-from Tribler.DecentralizedTracking import mainlineDHT\r
-from Tribler.DecentralizedTracking.rsconvert import RawServerConverter\r
-from Tribler.DecentralizedTracking.mainlineDHTChecker import mainlineDHTChecker\r
-\r
-from Tribler.notification import init as notification_init\r
-from Tribler.vwxGUI.font import *\r
-from Tribler.Web2.util.update import Web2Updater\r
-\r
-from Tribler.CacheDB.CacheDBHandler import BarterCastDBHandler\r
-from Tribler.Overlay.permid import permid_for_user\r
-from BitTornado.download_bt1 import EVIL\r
-\r
-DEBUG = False\r
-ALLOW_MULTIPLE = False\r
-start_time = 0\r
-start_time2 = 0\r
-\r
-\r
-################################################################\r
-#\r
-# Class: FileDropTarget\r
-#\r
-# To enable drag and drop for ABC list in main menu\r
-#\r
-################################################################\r
-class FileDropTarget(wx.FileDropTarget): \r
-    def __init__(self, utility):\r
-        # Initialize the wsFileDropTarget Object \r
-        wx.FileDropTarget.__init__(self) \r
-        # Store the Object Reference for dropped files \r
-        self.utility = utility\r
-      \r
-    def OnDropFiles(self, x, y, filenames):\r
-        for filename in filenames:\r
-            self.utility.queue.addtorrents.AddTorrentFromFile(filename)\r
-        return True\r
-\r
-\r
-##############################################################\r
-#\r
-# Class : ABCList\r
-#\r
-# ABC List class that contains the torrent list\r
-#\r
-############################################################## \r
-class ABCList(ManagedList):\r
-    def __init__(self, parent):\r
-        style = wx.LC_REPORT|wx.LC_VRULES|wx.CLIP_CHILDREN\r
-        \r
-        prefix = 'column'\r
-        minid = 4\r
-        maxid = 26\r
-        exclude = []\r
-        rightalign = [COL_PROGRESS, \r
-                      COL_SIZE, \r
-                      COL_DLSPEED, \r
-                      COL_ULSPEED, \r
-                      COL_RATIO, \r
-                      COL_PEERPROGRESS, \r
-                      COL_DLSIZE, \r
-                      COL_ULSIZE, \r
-                      COL_TOTALSPEED]\r
-\r
-        ManagedList.__init__(self, parent, style, prefix, minid, maxid, exclude, rightalign)\r
-        \r
-        dragdroplist = FileDropTarget(self.utility)\r
-        self.SetDropTarget(dragdroplist)\r
-        \r
-        self.lastcolumnsorted = -1\r
-        self.reversesort = 0\r
-\r
-        self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)\r
-        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColLeftClick)\r
-\r
-        self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.OnItemSelected)\r
-        \r
-        # Bring up advanced details on left double click\r
-        self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick)\r
-        \r
-        # Bring up local settings on middle double click\r
-        self.Bind(wx.EVT_MIDDLE_DCLICK, self.utility.actions[ACTION_LOCALUPLOAD].action)\r
-\r
-    # Do thing when keys are pressed down\r
-    def OnKeyDown(self, event):\r
-        keycode = event.GetKeyCode()\r
-        if event.CmdDown():\r
-            if keycode == ord('a') or keycode == ord('A'):\r
-                # Select all files (CTRL-A)\r
-                self.selectAll()\r
-            elif keycode == ord('x') or keycode == ord('X'):\r
-                # Invert file selection (CTRL-X)\r
-                self.invertSelection()\r
-        elif keycode == wx.WXK_RETURN or keycode == wx.WXK_NUMPAD_ENTER:\r
-            # Open advanced details (Enter)\r
-            self.utility.actions[ACTION_DETAILS].action()\r
-        elif keycode == wx.WXK_SPACE:\r
-            # Open local settings (Space)\r
-            self.utility.actions[ACTION_LOCALUPLOAD].action()\r
-        elif keycode == 399:\r
-            # Open right-click menu (windows menu key)\r
-            self.OnItemSelected()\r
-        \r
-        event.Skip()\r
-        \r
-    def OnColLeftClick(self, event):\r
-        rank = event.GetColumn()\r
-        colid = self.columns.getIDfromRank(rank)\r
-        if colid == self.lastcolumnsorted:\r
-            self.reversesort = 1 - self.reversesort\r
-        else:\r
-            self.reversesort = 0\r
-        self.lastcolumnsorted = colid\r
-        self.utility.queue.sortList(colid, self.reversesort)       \r
-        \r
-    def selectAll(self):\r
-        self.updateSelected(select = range(0, self.GetItemCount()))\r
-\r
-    def updateSelected(self, unselect = None, select = None):\r
-        if unselect is not None:\r
-            for index in unselect:\r
-                self.SetItemState(index, 0, wx.LIST_STATE_SELECTED)\r
-        if select is not None:\r
-            for index in select:\r
-                self.Select(index)\r
-        self.SetFocus()\r
-\r
-    def getTorrentSelected(self, firstitemonly = False, reverse = False):\r
-        queue = self.utility.queue\r
-        \r
-        torrentselected = []\r
-        for index in self.getSelected(firstitemonly, reverse):\r
-            ABCTorrentTemp = queue.getABCTorrent(index = index)\r
-            if ABCTorrentTemp is not None:\r
-                torrentselected.append(ABCTorrentTemp)\r
-        return torrentselected\r
-\r
-    def OnItemSelected(self, event = None):\r
-        selected = self.getTorrentSelected()\r
-        if not selected:\r
-            return\r
-\r
-        popupmenu = ABCMenu(self.utility, 'menu_listrightclick')\r
-\r
-        # Popup the menu.  If an item is selected then its handler\r
-        # will be called before PopupMenu returns.\r
-        if event is None:\r
-            # use the position of the first selected item (key event)\r
-            ABCTorrentTemp = selected[0]\r
-            position = self.GetItemPosition(ABCTorrentTemp.listindex)\r
-        else:\r
-            # use the cursor position (mouse event)\r
-            position = event.GetPosition()\r
-        \r
-        self.PopupMenu(popupmenu, position)\r
-\r
-    def OnLeftDClick(self, event):\r
-        event.Skip()\r
-        try:\r
-            self.utility.actions[ACTION_DETAILS].action()\r
-        except:\r
-            print_exc()\r
-\r
-\r
-##############################################################\r
-#\r
-# Class : ABCPanel\r
-#\r
-# Main ABC Panel class\r
-#\r
-############################################################## \r
-class ABCPanel(wx.Panel):\r
-    def __init__(self, parent):\r
-        style = wx.CLIP_CHILDREN\r
-        wx.Panel.__init__(self, parent, -1, style = style)\r
-\r
-        #Debug Output.\r
-        sys.stdout.write('Preparing GUI.\n');\r
-        \r
-        self.utility    = parent.utility\r
-        self.utility.window = self\r
-        self.queue = self.utility.queue\r
-               \r
-        # List of deleting torrents events that occur when the RateManager is active\r
-        # Such events are processed after the RateManager finishes\r
-        # postponedevents is a list of tupples : each tupple contains the method of ABCPanel to be called to\r
-        # deal with the event and the event.\r
-        self.postponedevents = []\r
-\r
-        #Manual Bittorrent Adding UI\r
-        ##############################\r
-        colSizer = wx.BoxSizer(wx.VERTICAL)\r
-        \r
-        self.list = ABCList(self)\r
-        self.utility.list = self.list\r
-        colSizer.Add(self.list, 1, wx.ALL|wx.EXPAND, 3)\r
-            \r
-        """\r
-        # Add status bar\r
-        statbarbox = wx.BoxSizer(wx.HORIZONTAL)\r
-        self.sb_buttons = ABCStatusButtons(self,self.utility)\r
-        statbarbox.Add(self.sb_buttons, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 0)\r
-        self.abc_sb = ABCStatusBar(self,self.utility)\r
-        statbarbox.Add(self.abc_sb, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 0)\r
-        colSizer.Add(statbarbox, 0, wx.ALL|wx.EXPAND, 0)\r
-        """\r
-        \r
-        #colSizer.Add(self.contentPanel, 1, wx.ALL|wx.EXPAND, 3)\r
-        self.SetSizer(colSizer)\r
-        self.SetAutoLayout(True)\r
-        \r
-        self.list.SetFocus()\r
-        \r
-        \r
-    def getSelectedList(self, event = None):\r
-        return self.list\r
-\r
-    ######################################\r
-    # Update ABC on-the-fly\r
-    ######################################\r
-    def updateColumns(self, force = False):\r
-        # Update display in column for inactive torrent\r
-        for ABCTorrentTemp in self.utility.torrents["all"]:\r
-            ABCTorrentTemp.updateColumns(force = force)\r
\r
-      \r
-##############################################################\r
-#\r
-# Class : ABCTaskBarIcon\r
-#\r
-# Task Bar Icon\r
-#\r
-############################################################## \r
-class ABCTaskBarIcon(wx.TaskBarIcon):\r
-    def __init__(self, parent):\r
-        wx.TaskBarIcon.__init__(self)\r
-        \r
-        self.utility = parent.utility\r
-        \r
-        self.TBMENU_RESTORE = wx.NewId()\r
-\r
-        # setup a taskbar icon, and catch some events from it\r
-        self.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, parent.onTaskBarActivate)\r
-        self.Bind(wx.EVT_MENU, parent.onTaskBarActivate, id = self.TBMENU_RESTORE)\r
-               \r
-        self.updateIcon(False)\r
-        \r
-    def updateIcon(self,iconifying = False):\r
-        remove = True\r
-        \r
-        mintray = self.utility.config.Read('mintray', "int")\r
-        if (mintray >= 2) or ((mintray >= 1) and iconifying):\r
-            remove = False\r
-        \r
-        if remove and self.IsIconInstalled():\r
-            self.RemoveIcon()\r
-        elif not remove and not self.IsIconInstalled():\r
-            self.SetIcon(self.utility.icon, product_name)\r
-        \r
-    def CreatePopupMenu(self):        \r
-        menu = wx.Menu()\r
-        \r
-        self.utility.actions[ACTION_STOPALL].addToMenu(menu, bindto = self)\r
-        self.utility.actions[ACTION_UNSTOPALL].addToMenu(menu, bindto = self)\r
-        menu.AppendSeparator()\r
-        menu.Append(self.TBMENU_RESTORE, self.utility.lang.get('showabcwindow'))\r
-        self.utility.actions[ACTION_EXIT].addToMenu(menu, bindto = self)\r
-        return menu\r
-\r
-\r
-##############################################################\r
-#\r
-# Class : ABColdFrame\r
-#\r
-# Main ABC Frame class that contains menu and menu bar management\r
-# and contains ABCPanel\r
-#\r
-############################################################## \r
-class ABCOldFrame(wx.Frame,FlaglessDelayedInvocation):\r
-    def __init__(self, ID, params, utility):\r
-        self.utility = utility\r
-        #self.utility.frame = self\r
-        \r
-        title = "Old Interface"\r
-        # Get window size and position from config file\r
-        size = (400,400)\r
-        style = wx.DEFAULT_FRAME_STYLE | wx.CLIP_CHILDREN\r
-        \r
-        wx.Frame.__init__(self, None, ID, title, size = size, style = style)\r
-        \r
-        FlaglessDelayedInvocation.__init__(self)\r
-\r
-        self.GUIupdate = True\r
-\r
-        self.window = ABCPanel(self)\r
-        self.Bind(wx.EVT_SET_FOCUS, self.onFocus)\r
-        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)\r
-        \r
-        self.tb = ABCToolBar(self) # new Tribler gui has no toolbar\r
-        self.SetToolBar(self.tb)\r
-\r
-            \r
-    def onFocus(self, event = None):\r
-        if event is not None:\r
-            event.Skip()\r
-        self.window.getSelectedList(event).SetFocus()\r
-\r
-    def OnCloseWindow(self, event = None):\r
-        self.Hide()\r
-\r
-# Custom class loaded by XRC\r
-class ABCFrame(wx.Frame, DelayedInvocation):\r
-    def __init__(self, *args):\r
-        if len(args) == 0:\r
-            pre = wx.PreFrame()\r
-            # the Create step is done by XRC.\r
-            self.PostCreate(pre)\r
-            self.Bind(wx.EVT_WINDOW_CREATE, self.OnCreate)\r
-        else:\r
-            wx.Frame.__init__(self, args[0], args[1], args[2], args[3])\r
-            self._PostInit()\r
-        \r
-    def OnCreate(self, event):\r
-        self.Unbind(wx.EVT_WINDOW_CREATE)\r
-        wx.CallAfter(self._PostInit)\r
-        event.Skip()\r
-        return True\r
-    \r
-    def _PostInit(self):\r
-        # Do all init here\r
-        self.guiUtility = GUIUtility.getInstance()\r
-        self.utility = self.guiUtility.utility\r
-        self.params = self.guiUtility.params\r
-        self.utility.frame = self\r
-        \r
-        title = self.utility.lang.get('title') + \\r
-                " " + \\r
-                self.utility.lang.get('version')\r
-        \r
-        # Get window size and position from config file\r
-        size, position = self.getWindowSettings()\r
-        style = wx.DEFAULT_FRAME_STYLE | wx.CLIP_CHILDREN\r
-        \r
-        self.SetSize(size)\r
-        self.SetPosition(position)\r
-        self.SetTitle(title)\r
-        tt = self.GetToolTip()\r
-        if tt is not None:\r
-            tt.SetTip('')\r
-        \r
-        #wx.Frame.__init__(self, None, ID, title, position, size, style = style)\r
-        \r
-        self.doneflag = Event()\r
-        DelayedInvocation.__init__(self)\r
-\r
-        dragdroplist = FileDropTarget(self.utility)\r
-        self.SetDropTarget(dragdroplist)\r
-\r
-        self.tbicon = None\r
-\r
-        # Arno: see ABCPanel\r
-        #self.abc_sb = ABCStatusBar(self,self.utility)\r
-        #self.SetStatusBar(self.abc_sb)\r
-\r
-        """\r
-        # Add status bar\r
-        statbarbox = wx.BoxSizer(wx.HORIZONTAL)\r
-        self.sb_buttons = ABCStatusButtons(self,self.utility)\r
-        statbarbox.Add(self.sb_buttons, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 0)\r
-        self.abc_sb = ABCStatusBar(self,self.utility)\r
-        statbarbox.Add(self.abc_sb, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 0)\r
-        #colSizer.Add(statbarbox, 0, wx.ALL|wx.EXPAND, 0)\r
-        self.SetStatusBar(statbarbox)\r
-        """\r
-        \r
-        \r
-        try:\r
-            self.SetIcon(self.utility.icon)\r
-        except:\r
-            pass\r
-\r
-        # Don't update GUI as often when iconized\r
-        self.GUIupdate = True\r
-\r
-        # Start the scheduler before creating the ListCtrl\r
-        self.utility.queue  = ABCScheduler(self.utility)\r
-        #self.window = ABCPanel(self)\r
-        #self.abc_sb = self.window.abc_sb\r
-        \r
-        \r
-        self.oldframe = ABCOldFrame(-1, self.params, self.utility)\r
-        self.oldframe.Refresh()\r
-        self.oldframe.Layout()\r
-        #self.oldframe.Show(True)\r
-        \r
-        self.window = self.GetChildren()[0]\r
-        self.window.utility = self.utility\r
-        \r
-        """\r
-        self.list = ABCList(self.window)\r
-        self.list.Show(False)\r
-        self.utility.list = self.list\r
-        print self.window.GetName()\r
-        self.window.list = self.list\r
-        self.utility.window = self.window\r
-        """\r
-        #self.window.sb_buttons = ABCStatusButtons(self,self.utility)\r
-        \r
-        self.utility.window.postponedevents = []\r
-        \r
-        # Menu Options\r
-        ############################\r
-        menuBar = ABCMenuBar(self)\r
-        if sys.platform == "darwin":\r
-            wx.App.SetMacExitMenuItemId(wx.ID_CLOSE)\r
-        self.SetMenuBar(menuBar)\r
-        \r
-        #self.tb = ABCToolBar(self) # new Tribler gui has no toolbar\r
-        #self.SetToolBar(self.tb)\r
-        \r
-        self.buddyFrame = None\r
-        self.fileFrame = None\r
-        self.buddyFrame_page = 0\r
-        self.buddyFrame_size = (800, 500)\r
-        self.buddyFrame_pos = None\r
-        self.fileFrame_size = (800, 500)\r
-        self.fileFrame_pos = None\r
-        \r
-        # Menu Events \r
-        ############################\r
-\r
-        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)\r
-#        self.Bind(wx.EVT_MENU, self.OnMenuExit, id = wx.ID_CLOSE)\r
-\r
-        # leaving here for the time being:\r
-        # wxMSW apparently sends the event to the App object rather than\r
-        # the top-level Frame, but there seemed to be some possibility of\r
-        # change\r
-        self.Bind(wx.EVT_QUERY_END_SESSION, self.OnCloseWindow)\r
-        self.Bind(wx.EVT_END_SESSION, self.OnCloseWindow)\r
-        \r
-        try:\r
-            self.tbicon = ABCTaskBarIcon(self)\r
-        except:\r
-            pass\r
-        self.Bind(wx.EVT_ICONIZE, self.onIconify)\r
-        self.Bind(wx.EVT_SET_FOCUS, self.onFocus)\r
-        self.Bind(wx.EVT_SIZE, self.onSize)\r
-        self.Bind(wx.EVT_MAXIMIZE, self.onSize)\r
-        #self.Bind(wx.EVT_IDLE, self.onIdle)\r
-        \r
-        # Start up the controller\r
-        self.utility.controller = ABCLaunchMany(self.utility)\r
-        self.utility.controller.start()\r
-        \r
-        # Start up mainline DHT\r
-        # Arno: do this in a try block, as khashmir gives a very funky\r
-        # error when started from a .dmg (not from cmd line) on Mac. In particular\r
-        # it complains that it cannot find the 'hex' encoding method when\r
-        # hstr.encode('hex') is called, and hstr is a string?!\r
-        #\r
-        try:\r
-            rsconvert = RawServerConverter(self.utility.controller.get_rawserver())\r
-            mainlineDHT.init('', self.utility.listen_port, self.utility.getConfigPath(),rawserver=rsconvert)\r
-            # Create torrent-liveliness checker based on DHT\r
-            c = mainlineDHTChecker.getInstance()\r
-            c.register(mainlineDHT.dht)\r
-        except:\r
-            print_exc()\r
-\r
-        # Give GUI time to set up stuff\r
-        wx.Yield()\r
-\r
-        #if server start with params run it\r
-        #####################################\r
-        \r
-        if DEBUG:\r
-            print >>sys.stderr,"abc: wxFrame: params is",self.params\r
-        \r
-        if self.params[0] != "":\r
-            success, msg, ABCTorrentTemp = self.utility.queue.addtorrents.AddTorrentFromFile(self.params[0],caller=CALLER_ARGV)\r
-\r
-        self.utility.queue.postInitTasks(self.params)\r
-\r
-        if self.params[0] != "":\r
-            # Update torrent.list, but after having read the old list of torrents, otherwise we get interference\r
-            ABCTorrentTemp.torrentconfig.writeSrc(False)\r
-            self.utility.torrentconfig.Flush()\r
-\r
-        self.videoFrame = None\r
-        feasible = return_feasible_playback_modes(self.utility.getPath())\r
-        if PLAYBACKMODE_INTERNAL in feasible:\r
-            # This means vlc is available\r
-            from Tribler.Video.EmbeddedPlayer import VideoFrame\r
-            self.videoFrame = VideoFrame(self)\r
-\r
-            #self.videores = xrc.XmlResource("Tribler/vwxGUI/MyPlayer.xrc")\r
-            #self.videoframe = self.videores.LoadFrame(None, "MyPlayer")\r
-            #self.videoframe.Show()\r
-            \r
-            videoplayer = VideoPlayer.getInstance()\r
-            videoplayer.set_parentwindow(self.videoFrame)\r
-        else:\r
-            videoplayer = VideoPlayer.getInstance()\r
-            videoplayer.set_parentwindow(self)\r
-\r
-        sys.stdout.write('GUI Complete.\n')\r
-\r
-        self.Show(True)\r
-        \r
-        \r
-        # Just for debugging: add test permids and display top 5 peers from which the most is downloaded in bartercastdb\r
-        bartercastdb = BarterCastDBHandler()\r
-        mypermid = bartercastdb.my_permid\r
-        \r
-        if DEBUG:\r
-            bartercastdb.incrementItem((mypermid, "testpermid_1"), 'uploaded', 1024)\r
-            bartercastdb.incrementItem((mypermid, "testpermid_1"), 'downloaded', 20000)\r
-                    \r
-            bartercastdb.incrementItem((mypermid, "testpermid_2"), 'uploaded', 40000)\r
-            bartercastdb.incrementItem((mypermid, "testpermid_2"), 'downloaded', 60000)\r
-            \r
-            top = bartercastdb.getTopNPeers(5)['top']\r
-    \r
-            print 'My Permid: ', permid_for_user(mypermid)\r
-            \r
-            print 'Top 5 BarterCast peers:'\r
-            print '======================='\r
-    \r
-            i = 1\r
-            for (permid, up, down) in top:\r
-                print '%2d: %15s  -  %10d up  %10d down' % (i, bartercastdb.getName(permid), up, down)\r
-                i += 1\r
-        \r
-        \r
-        # Check to see if ABC is associated with torrents\r
-        #######################################################\r
-        if (sys.platform == 'win32'):\r
-            if self.utility.config.Read('associate', "boolean"):\r
-                if self.utility.regchecker and not self.utility.regchecker.testRegistry():\r
-                    dialog = RegCheckDialog(self)\r
-                    dialog.ShowModal()\r
-                    dialog.Destroy()\r
-\r
-        self.checkVersion()\r
-\r
-        \r
-    def checkVersion(self):\r
-        t = Timer(2.0, self._checkVersion)\r
-        t.start()\r
-        \r
-    def _checkVersion(self):\r
-        my_version = self.utility.getVersion()\r
-        try:\r
-            curr_status = urllib.urlopen('http://tribler.org/version').readlines()\r
-            line1 = curr_status[0]\r
-            if len(curr_status) > 1:\r
-                self.update_url = curr_status[1].strip()\r
-            else:\r
-                self.update_url = 'http://tribler.org'\r
-            _curr_status = line1.split()\r
-            self.curr_version = _curr_status[0]\r
-            if self.newversion(self.curr_version, my_version):\r
-                # Arno: we are a separate thread, delegate GUI updates to MainThread\r
-                self.upgradeCallback()\r
-            \r
-            # Also check new version of web2definitions for youtube etc. search\r
-            Web2Updater(self.utility).checkUpdate()\r
-        except Exception,e:\r
-            print >> sys.stderr, "Tribler: Version check failed", ctime(time()), str(e)\r
-            #print_exc()\r
-            \r
-    def newversion(self, curr_version, my_version):\r
-        curr = curr_version.split('.')\r
-        my = my_version.split('.')\r
-        if len(my) >= len(curr):\r
-            nversion = len(my)\r
-        else:\r
-            nversion = len(curr)\r
-        for i in range(nversion):\r
-            if i < len(my):\r
-                my_v = int(my[i])\r
-            else:\r
-                my_v = 0\r
-            if i < len(curr):\r
-                curr_v = int(curr[i])\r
-            else:\r
-                curr_v = 0\r
-            if curr_v > my_v:\r
-                return True\r
-            elif curr_v < my_v:\r
-                return False\r
-        return False\r
-\r
-    def upgradeCallback(self):\r
-        self.invokeLater(self.OnUpgrade)    \r
-        # TODO: warn multiple times?\r
-    \r
-    def OnUpgrade(self, event=None):\r
-        self.setActivity(ACT_NEW_VERSION)\r
-            \r
-    def onFocus(self, event = None):\r
-        if event is not None:\r
-            event.Skip()\r
-        #self.window.getSelectedList(event).SetFocus()\r
-        \r
-    def setGUIupdate(self, update):\r
-        oldval = self.GUIupdate\r
-        self.GUIupdate = update\r
-        \r
-        if self.GUIupdate and not oldval:\r
-            # Force an update of all torrents\r
-            for torrent in self.utility.torrents["all"]:\r
-                torrent.updateColumns()\r
-                torrent.updateColor()\r
-\r
-\r
-    def taskbarCallback(self):\r
-        self.invokeLater(self.onTaskBarActivate,[])\r
-\r
-\r
-    #######################################\r
-    # minimize to tray bar control\r
-    #######################################\r
-    def onTaskBarActivate(self, event = None):\r
-        self.Iconize(False)\r
-        self.Show(True)\r
-        self.Raise()\r
-        \r
-        if self.tbicon is not None:\r
-            self.tbicon.updateIcon(False)\r
-\r
-        #self.window.list.SetFocus()\r
-\r
-        # Resume updating GUI\r
-        self.setGUIupdate(True)\r
-\r
-    def onIconify(self, event = None):\r
-        # This event handler is called both when being minimalized\r
-        # and when being restored.\r
-        if DEBUG:\r
-            if event is not None:\r
-                print  >> sys.stderr,"abc: onIconify(",event.Iconized()\r
-            else:\r
-                print  >> sys.stderr,"abc: onIconify event None"\r
-        if event.Iconized():                                                                                                               \r
-            if (self.utility.config.Read('mintray', "int") > 0\r
-                and self.tbicon is not None):\r
-                self.tbicon.updateIcon(True)\r
-                self.Show(False)\r
-\r
-            # Don't update GUI while minimized\r
-            self.setGUIupdate(False)\r
-        else:\r
-            self.setGUIupdate(True)\r
-        if event is not None:\r
-            event.Skip()\r
-\r
-    def onSize(self, event = None):\r
-        # Arno: On Windows when I enable the tray icon and then change\r
-        # virtual desktop (see MS DeskmanPowerToySetup.exe)\r
-        # I get a onIconify(event.Iconized()==True) event, but when\r
-        # I switch back, I don't get an event. As a result the GUIupdate\r
-        # remains turned off. The wxWidgets wiki on the TaskBarIcon suggests\r
-        # catching the onSize event. \r
-        \r
-        if DEBUG:\r
-            if event is not None:\r
-                print  >> sys.stderr,"abc: onSize:",self.GetSize()\r
-            else:\r
-                print  >> sys.stderr,"abc: onSize: None"\r
-        self.setGUIupdate(True)\r
-        if event is not None:\r
-            if event.GetEventType() == wx.EVT_MAXIMIZE:\r
-                self.window.SetClientSize(self.GetClientSize())\r
-            event.Skip()\r
-        \r
-\r
-        # Refresh subscreens\r
-        self.refreshNeeded = True\r
-        self.guiUtility.refreshOnResize()\r
-        \r
-    def onIdle(self, event = None):\r
-        """\r
-        Only refresh screens (especially detailsPanel) when resizes are finished\r
-        This gives less flickering, but doesnt look pretty, so i commented it out\r
-        """\r
-        if self.refreshNeeded:\r
-            self.guiUtility.refreshOnResize()\r
-            self.refreshNeeded = False\r
-        \r
-    def getWindowSettings(self):\r
-        width = self.utility.config.Read("window_width")\r
-        height = self.utility.config.Read("window_height")\r
-        try:\r
-            size = wx.Size(int(width), int(height))\r
-        except:\r
-            size = wx.Size(710, 400)\r
-        \r
-        x = self.utility.config.Read("window_x")\r
-        y = self.utility.config.Read("window_y")\r
-        if (x == "" or y == ""):\r
-            position = wx.DefaultPosition\r
-        else:\r
-            position = wx.Point(int(x), int(y))\r
-            \r
-        return size, position     \r
-        \r
-    def saveWindowSettings(self):\r
-        width, height = self.GetSizeTuple()\r
-        x, y = self.GetPositionTuple()\r
-        self.utility.config.Write("window_width", width)\r
-        self.utility.config.Write("window_height", height)\r
-        self.utility.config.Write("window_x", x)\r
-        self.utility.config.Write("window_y", y)\r
-\r
-        self.utility.config.Flush()\r
-       \r
-    ##################################\r
-    # Close Program\r
-    ##################################\r
-               \r
-    def OnCloseWindow(self, event = None):\r
-        if event != None:\r
-            nr = event.GetEventType()\r
-            lookup = { wx.EVT_CLOSE.evtType[0]: "EVT_CLOSE", wx.EVT_QUERY_END_SESSION.evtType[0]: "EVT_QUERY_END_SESSION", wx.EVT_END_SESSION.evtType[0]: "EVT_END_SESSION" }\r
-            if nr in lookup: nr = lookup[nr]\r
-            print "Closing due to event ",nr\r
-            print >>sys.stderr,"Closing due to event ",nr\r
-        else:\r
-            print "Closing untriggered by event"\r
-        \r
-        # Don't do anything if the event gets called twice for some reason\r
-        if self.utility.abcquitting:\r
-            return\r
-\r
-        # Check to see if we can veto the shutdown\r
-        # (might not be able to in case of shutting down windows)\r
-        if event is not None:\r
-            try:\r
-                if event.CanVeto() and self.utility.config.Read('confirmonclose', "boolean") and not event.GetEventType() == wx.EVT_QUERY_END_SESSION.evtType[0]:\r
-                    dialog = wx.MessageDialog(None, self.utility.lang.get('confirmmsg'), self.utility.lang.get('confirm'), wx.OK|wx.CANCEL)\r
-                    result = dialog.ShowModal()\r
-                    dialog.Destroy()\r
-                    if result != wx.ID_OK:\r
-                        event.Veto()\r
-                        return\r
-            except:\r
-                data = StringIO()\r
-                print_exc(file = data)\r
-                sys.stderr.write(data.getvalue())\r
-                pass\r
-            \r
-        self.utility.abcquitting = True\r
-        self.GUIupdate = False\r
-        \r
-        self.guiUtility.guiOpen.clear()\r
-        \r
-        # Close the Torrent Maker\r
-        self.utility.actions[ACTION_MAKETORRENT].closeWin()\r
-\r
-        try:\r
-            self.utility.webserver.stop()\r
-        except:\r
-            data = StringIO()\r
-            print_exc(file = data)\r
-            sys.stderr.write(data.getvalue())\r
-            pass\r
-\r
-        try:\r
-            # tell scheduler to close all active thread\r
-            self.utility.queue.clearScheduler()\r
-        except:\r
-            data = StringIO()\r
-            print_exc(file = data)\r
-            sys.stderr.write(data.getvalue())\r
-            pass\r
-\r
-        try:\r
-            # Restore the window before saving size and position\r
-            # (Otherwise we'll get the size of the taskbar button and a negative position)\r
-            self.onTaskBarActivate()\r
-            self.saveWindowSettings()\r
-        except:\r
-            #print_exc(file=sys.stderr)\r
-            print_exc()\r
-\r
-        try:\r
-            if self.buddyFrame is not None:\r
-                self.buddyFrame.Destroy()\r
-            if self.fileFrame is not None:\r
-                self.fileFrame.Destroy()\r
-            if self.videoFrame is not None:\r
-                self.videoFrame.Destroy()\r
-        except:\r
-            pass\r
-\r
-        self.oldframe.Destroy()\r
-\r
-        try:\r
-            if self.tbicon is not None:\r
-                self.tbicon.RemoveIcon()\r
-                self.tbicon.Destroy()\r
-            self.Destroy()\r
-        except:\r
-            data = StringIO()\r
-            print_exc(file = data)\r
-            sys.stderr.write(data.getvalue())\r
-            pass\r
-\r
-        # Arno: at the moment, Tribler gets a segmentation fault when the\r
-        # tray icon is always enabled. This SEGV occurs in the wx mainloop\r
-        # which is entered as soon as we leave this method. Hence I placed\r
-        # tribler_done() here, so the database are closed properly\r
-        # before the crash.\r
-        #\r
-        # Arno, 2007-02-28: Preferably this should be moved to the main \r
-        # run() method below, that waits a while to allow threads to finish.\r
-        # Ideally, the database should still be open while they finish up.\r
-        # Because of the crash problem with the icontray this is the safer\r
-        # place.\r
-        #\r
-        # Arno, 2007-08-10: When a torrentfile is passed on the command line,\r
-        # the client will crash just after this point due to unknown reasons\r
-        # (it even does it when we don't look at the cmd line args at all!)\r
-        # Hence, for safety, I close the DB here already. \r
-        #if sys.platform == 'linux2':\r
-        #\r
-        \r
-        #tribler_done(self.utility.getConfigPath())            \r
-        \r
-        if DEBUG:    \r
-            print >>sys.stderr,"abc: OnCloseWindow END"\r
-\r
-        if DEBUG:\r
-            ts = enumerate()\r
-            for t in ts:\r
-                print >>sys.stderr,"abc: Thread still running",t.getName(),"daemon",t.isDaemon()\r
-\r
-\r
-\r
-    def onWarning(self,exc):\r
-        msg = self.utility.lang.get('tribler_startup_nonfatalerror')\r
-        msg += str(exc.__class__)+':'+str(exc)\r
-        dlg = wx.MessageDialog(None, msg, self.utility.lang.get('tribler_warning'), wx.OK|wx.ICON_WARNING)\r
-        result = dlg.ShowModal()\r
-        dlg.Destroy()\r
-\r
-    def onUPnPError(self,upnp_type,listenport,error_type,exc=None,listenproto='TCP'):\r
-\r
-        if error_type == 0:\r
-            errormsg = unicode(' UPnP mode '+str(upnp_type)+' ')+self.utility.lang.get('tribler_upnp_error1')\r
-        elif error_type == 1:\r
-            errormsg = unicode(' UPnP mode '+str(upnp_type)+' ')+self.utility.lang.get('tribler_upnp_error2')+unicode(str(exc))+self.utility.lang.get('tribler_upnp_error2_postfix')\r
-        elif error_type == 2:\r
-            errormsg = unicode(' UPnP mode '+str(upnp_type)+' ')+self.utility.lang.get('tribler_upnp_error3')\r
-        else:\r
-            errormsg = unicode(' UPnP mode '+str(upnp_type)+' Unknown error')\r
-\r
-        msg = self.utility.lang.get('tribler_upnp_error_intro')\r
-        msg += listenproto+' '\r
-        msg += str(listenport)\r
-        msg += self.utility.lang.get('tribler_upnp_error_intro_postfix')\r
-        msg += errormsg\r
-        msg += self.utility.lang.get('tribler_upnp_error_extro') \r
-\r
-        dlg = wx.MessageDialog(None, msg, self.utility.lang.get('tribler_warning'), wx.OK|wx.ICON_WARNING)\r
-        result = dlg.ShowModal()\r
-        dlg.Destroy()\r
-\r
-    def onReachable(self,event=None):\r
-        """ Called by GUI thread """\r
-        if self.firewallStatus is not None:\r
-            self.firewallStatus.setToggled(True)\r
-            tt = self.firewallStatus.GetToolTip()\r
-            if tt is not None:\r
-                tt.SetTip(self.utility.lang.get('reachable_tooltip'))\r
-\r
-\r
-    def setActivity(self,type,msg=u''):\r
-    \r
-        if currentThread().getName() != "MainThread":\r
-            print  >> sys.stderr,"abc: setActivity thread",currentThread().getName(),"is NOT MAIN THREAD"\r
-            print_stack()\r
-    \r
-        if type == ACT_NONE:\r
-            prefix = u''\r
-            msg = u''\r
-        elif type == ACT_UPNP:\r
-            prefix = self.utility.lang.get('act_upnp')\r
-        elif type == ACT_REACHABLE:\r
-            prefix = self.utility.lang.get('act_reachable')\r
-        elif type == ACT_GET_EXT_IP_FROM_PEERS:\r
-            prefix = self.utility.lang.get('act_get_ext_ip_from_peers')\r
-        elif type == ACT_MEET:\r
-            prefix = self.utility.lang.get('act_meet')\r
-        elif type == ACT_GOT_METADATA:\r
-            prefix = self.utility.lang.get('act_got_metadata')\r
-        elif type == ACT_RECOMMEND:\r
-            prefix = self.utility.lang.get('act_recommend')\r
-        elif type == ACT_DISK_FULL:\r
-            prefix = self.utility.lang.get('act_disk_full')   \r
-        elif type == ACT_NEW_VERSION:\r
-            prefix = self.utility.lang.get('act_new_version')   \r
-        if msg == u'':\r
-            text = prefix\r
-        else:\r
-            text = unicode( prefix+u' '+msg)\r
-            \r
-        if DEBUG:\r
-            print  >> sys.stderr,"abc: Setting activity",`text`,"EOT"\r
-        self.messageField.SetLabel(text)\r
-\r
-\r
-class TorThread(Thread):\r
-    \r
-    def __init__(self):\r
-        Thread.__init__(self)\r
-        self.setDaemon(True)\r
-        self.setName("TorThread"+self.getName())\r
-        self.child_out = None\r
-        self.child_in = None\r
-        \r
-    def run(self):\r
-        try:\r
-            if DEBUG:\r
-                print >>sys.stderr,"TorThread starting",currentThread().getName()\r
-            if sys.platform == "win32":\r
-                # Not "Nul:" but "nul" is /dev/null on Win32\r
-                cmd = 'tor.exe'\r
-                sink = 'nul'\r
-            elif sys.platform == "darwin":\r
-                cmd = 'tor.mac'\r
-                sink = '/dev/null'\r
-            else:\r
-                cmd = 'tor'\r
-                sink = '/dev/null'\r
-\r
-            (self.child_out,self.child_in) = os.popen2( "%s --log err-err > %s 2>&1" % (cmd,sink), 'b' )\r
-            while True:\r
-                if DEBUG:\r
-                    print >>sys.stderr,"TorThread reading",currentThread().getName()\r
-\r
-                msg = self.child_in.read()\r
-                if DEBUG:\r
-                    print >>sys.stderr,"TorThread: tor said",msg\r
-                if len(msg) == 0:\r
-                    break\r
-                sleep(1)\r
-        except:\r
-            print_exc()\r
-\r
-    def shutdown(self):\r
-        if self.child_out is not None:\r
-            self.child_out.close()\r
-        if self.child_in is not None:\r
-            self.child_in.close()\r
-            \r
-\r
-##############################################################\r
-#\r
-# Class : ABCApp\r
-#\r
-# Main ABC application class that contains ABCFrame Object\r
-#\r
-##############################################################\r
-class ABCApp(wx.App,FlaglessDelayedInvocation):\r
-    def __init__(self, x, params, single_instance_checker, abcpath):\r
-        global start_time, start_time2\r
-        start_time2 = time()\r
-        #print "[StartUpDebug]----------- from ABCApp.__init__ ----------Tribler starts up at", ctime(start_time2), "after", start_time2 - start_time\r
-        self.params = params\r
-        self.single_instance_checker = single_instance_checker\r
-        self.abcpath = abcpath\r
-        self.error = None\r
-        self.torthread = None\r
-        wx.App.__init__(self, x)\r
-        \r
-    def OnInit(self):\r
-        try:\r
-            self.utility = Utility(self.abcpath)\r
-            # Set locale to determine localisation\r
-            locale.setlocale(locale.LC_ALL, '')\r
-\r
-            sys.stdout.write('Client Starting Up.\n')\r
-            sys.stdout.write('Build: ' + self.utility.lang.get('build') + '\n')\r
-            \r
-            bm = wx.Bitmap(os.path.join(self.utility.getPath(),'icons','splash.jpg'),wx.BITMAP_TYPE_JPEG)\r
-            #s = wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN\r
-            #s = wx.SIMPLE_BORDER|wx.FRAME_NO_TASKBAR|wx.FRAME_FLOAT_ON_PARENT\r
-            self.splash = wx.SplashScreen(bm, wx.SPLASH_CENTRE_ON_SCREEN|wx.SPLASH_TIMEOUT, 1000, None, -1)\r
-            \r
-            wx.CallAfter(self.PostInit)\r
-            return True\r
-            \r
-        except Exception,e:\r
-            print_exc()\r
-            self.error = e\r
-            self.onError()\r
-            return False\r
-\r
-\r
-    def PostInit(self):\r
-        try:\r
-            tribler_init(self.utility.getConfigPath(),self.utility.getPath(),self.db_exception_handler)\r
-            self.utility.setTriblerVariables()\r
-            self.utility.postAppInit()\r
-            \r
-            # Singleton for executing tasks that are too long for GUI thread and\r
-            # network thread\r
-            self.guiserver = GUIServer.getInstance()\r
-            self.guiserver.register()\r
-    \r
-            # Singleton for management of user's mugshots (i.e. icons/display pictures)\r
-            self.mm = MugshotManager.getInstance()\r
-            self.mm.register(self.utility.getConfigPath(),self.utility.getPath())\r
-\r
-            # H4x0r a bit\r
-            set_tasteheart_bitmaps(self.utility.getPath())\r
-            set_perfBar_bitmaps(self.utility.getPath())\r
-    \r
-            # Put it here so an error is shown in the startup-error popup\r
-            self.serverlistener = ServerListener(self.utility)\r
-            \r
-            # Check webservice for autostart webservice\r
-            #######################################################\r
-            WebListener(self.utility)\r
-            if self.utility.webconfig.Read("webautostart", "boolean"):\r
-                self.utility.webserver.start()\r
-                \r
-            # Start single instance server listenner\r
-            ############################################\r
-            self.serverthread   = Thread(target = self.serverlistener.start)\r
-            self.serverthread.setDaemon(True)\r
-            self.serverthread.setName("SingleInstanceServer"+self.serverthread.getName())\r
-            self.serverthread.start()\r
-    \r
-            self.videoplayer = VideoPlayer.getInstance()\r
-            self.videoplayer.register(self.utility)\r
-            self.videoserver = VideoHTTPServer.getInstance()\r
-            self.videoserver.background_serve()\r
-\r
-            notification_init( self.utility )\r
-\r
-            # Change config when experiment ends, before ABCLaunchMany is created\r
-            global EVIL\r
-            if EVIL and time() > 1190099288.0:\r
-                EVIL = False\r
-                end = self.utility.config.Read('lure_ended', "boolean")\r
-                if not end:\r
-                    self.utility.config.Write('lure_ended', 1, "boolean")\r
-                    self.utility.config.Write('tor_enabled', 0, "boolean")\r
-                    self.utility.config.Write('ut_pex_max_addrs_from_peer', 16)\r
-                \r
-                    msg = "The Tribler download accelerator using the TOR network has been turned off. For more information visit http://TV.seas.Harvard.edu/"\r
-                    dlg = wx.MessageDialog(None, msg, "Tribler Warning", wx.OK|wx.ICON_INFORMATION)\r
-                    result = dlg.ShowModal()\r
-                    dlg.Destroy()\r
-                \r
-            enabled = self.utility.config.Read('tor_enabled', "boolean")\r
-            if enabled:\r
-                self.torthread = TorThread()\r
-                self.torthread.start()\r
-\r
-            #\r
-            # Read and create GUI from .xrc files\r
-            #\r
-            #self.frame = ABCFrame(-1, self.params, self.utility)\r
-            self.guiUtility = GUIUtility.getInstance(self.utility, self.params)\r
-            updateXRC.main([os.path.join(self.utility.getPath(),'Tribler','vwxGUI')])\r
-            self.res = xrc.XmlResource(os.path.join(self.utility.getPath(),'Tribler','vwxGUI','MyFrame.xrc'))\r
-            self.guiUtility.xrcResource = self.res\r
-            self.frame = self.res.LoadFrame(None, "MyFrame")\r
-            self.guiUtility.frame = self.frame\r
-            self.guiUtility.scrollWindow = xrc.XRCCTRL(self.frame, "level0")\r
-            self.guiUtility.mainSizer = self.guiUtility.scrollWindow.GetSizer()\r
-            self.frame.topBackgroundRight = xrc.XRCCTRL(self.frame, "topBG3")\r
-            self.guiUtility.scrollWindow.SetScrollbars(1,1,1024,768)\r
-            self.guiUtility.scrollWindow.SetScrollRate(15,15)\r
-            self.frame.mainButtonPersons = xrc.XRCCTRL(self.frame, "mainButtonPersons")\r
-\r
-\r
-            self.frame.numberPersons = xrc.XRCCTRL(self.frame, "numberPersons")\r
-            numperslabel = xrc.XRCCTRL(self.frame, "persons")\r
-            self.frame.numberFiles = xrc.XRCCTRL(self.frame, "numberFiles")\r
-            numfileslabel = xrc.XRCCTRL(self.frame, "files")\r
-            self.frame.messageField = xrc.XRCCTRL(self.frame, "messageField")\r
-            self.frame.firewallStatus = xrc.XRCCTRL(self.frame, "firewallStatus")\r
-            tt = self.frame.firewallStatus.GetToolTip()\r
-            if tt is not None:\r
-                tt.SetTip(self.utility.lang.get('unknownreac_tooltip'))\r
-            \r
-            if sys.platform == "linux2":\r
-                self.frame.numberPersons.SetFont(wx.Font(9,FONTFAMILY,FONTWEIGHT,wx.NORMAL,False,FONTFACE))\r
-                self.frame.numberFiles.SetFont(wx.Font(9,FONTFAMILY,FONTWEIGHT,wx.NORMAL,False,FONTFACE))\r
-                self.frame.messageField.SetFont(wx.Font(9,FONTFAMILY,FONTWEIGHT,wx.NORMAL,False,FONTFACE))\r
-                numperslabel.SetFont(wx.Font(9,FONTFAMILY,FONTWEIGHT,wx.NORMAL,False,FONTFACE))\r
-                numfileslabel.SetFont(wx.Font(9,FONTFAMILY,FONTWEIGHT,wx.NORMAL,False,FONTFACE))\r
-            """\r
-            searchfilebut = xrc.XRCCTRL(self.frame, "bt257cC")\r
-            searchfilebut.Bind(wx.EVT_LEFT_UP, self.guiUtility.buttonClicked)\r
-            searchpersbut = xrc.XRCCTRL(self.frame, "bt258cC")\r
-            searchpersbut.Bind(wx.EVT_LEFT_UP, self.guiUtility.buttonClicked)     \r
-            \r
-            self.frame.searchtxtctrl = xrc.XRCCTRL(self.frame, "tx220cCCC")\r
-            """\r
-            \r
-            #self.frame.Refresh()\r
-            #self.frame.Layout()\r
-            self.frame.Show(True)\r
-#===============================================================================\r
-#            global start_time2\r
-#            current_time = time()\r
-#            print "\n\n[StartUpDebug]-----------------------------------------"\r
-#            print "[StartUpDebug]"\r
-#            print "[StartUpDebug]----------- from ABCApp.OnInit ----------Tribler frame is shown after", current_time-start_time2\r
-#            print "[StartUpDebug]"\r
-#            print "[StartUpDebug]-----------------------------------------\n\n"\r
-#===============================================================================\r
-            \r
-            # GUI start\r
-            # - load myFrame \r
-            # - load standardGrid\r
-            # - gui utility > button mainButtonFiles = clicked\r
-        \r
-\r
-            self.Bind(wx.EVT_QUERY_END_SESSION, self.frame.OnCloseWindow)\r
-            self.Bind(wx.EVT_END_SESSION, self.frame.OnCloseWindow)\r
-            \r
-            \r
-            #asked = self.utility.config.Read('askeduploadbw', 'boolean')\r
-            asked = True\r
-            if not asked:\r
-                dlg = BandwidthSelector(self.frame,self.utility)\r
-                result = dlg.ShowModal()\r
-                if result == wx.ID_OK:\r
-                    ulbw = dlg.getUploadBandwidth()\r
-                    self.utility.config.Write('maxuploadrate',ulbw)\r
-                    self.utility.config.Write('maxseeduploadrate',ulbw)\r
-                    self.utility.config.Write('askeduploadbw','1')\r
-                dlg.Destroy()\r
-\r
-            # Arno, 2007-05-03: wxWidgets 2.8.3.0 and earlier have the MIME-type for .bmp \r
-            # files set to 'image/x-bmp' whereas 'image/bmp' is the official one.\r
-            try:\r
-                bmphand = None\r
-                hands = wx.Image.GetHandlers()\r
-                for hand in hands:\r
-                    #print "Handler",hand.GetExtension(),hand.GetType(),hand.GetMimeType()\r
-                    if hand.GetMimeType() == 'image/x-bmp':\r
-                        bmphand = hand\r
-                        break\r
-                #wx.Image.AddHandler()\r
-                if bmphand is not None:\r
-                    bmphand.SetMimeType('image/bmp')\r
-            except:\r
-                # wx < 2.7 don't like wx.Image.GetHandlers()\r
-                print_exc()\r
-            \r
-            # Must be after ABCLaunchMany is created\r
-            self.torrentfeed = TorrentFeedThread.getInstance()\r
-            self.torrentfeed.register(self.utility)\r
-            self.torrentfeed.start()\r
-            \r
-            #print "DIM",wx.GetDisplaySize()\r
-            #print "MM",wx.GetDisplaySizeMM()\r
-\r
-            wx.CallAfter(self.startWithRightView)            \r
-            \r
-        except Exception,e:\r
-            print_exc()\r
-            self.error = e\r
-            self.onError()\r
-            return False\r
-\r
-        return True\r
-\r
-    def onError(self,source=None):\r
-        # Don't use language independence stuff, self.utility may not be\r
-        # valid.\r
-        msg = "Unfortunately, Tribler ran into an internal error:\n\n"\r
-        if source is not None:\r
-            msg += source\r
-        msg += str(self.error.__class__)+':'+str(self.error)\r
-        msg += '\n'\r
-        msg += 'Please see the FAQ on www.tribler.org on how to act.'\r
-        dlg = wx.MessageDialog(None, msg, "Tribler Fatal Error", wx.OK|wx.ICON_ERROR)\r
-        result = dlg.ShowModal()\r
-        print_exc()\r
-        dlg.Destroy()\r
-\r
-    def MacOpenFile(self,filename):\r
-        self.utility.queue.addtorrents.AddTorrentFromFile(filename)\r
-\r
-    def OnExit(self):\r
-        \r
-        self.torrentfeed.shutdown()\r
-        if self.torthread is not None:\r
-            self.torthread.shutdown()\r
-        mainlineDHT.deinit()\r
-        \r
-        if not ALLOW_MULTIPLE:\r
-            del self.single_instance_checker\r
-        ClientPassParam("Close Connection")\r
-        return 0\r
-    \r
-    def db_exception_handler(self,e):\r
-        if DEBUG:\r
-            print >> sys.stderr,"abc: Database Exception handler called",e,"value",e.args,"#"\r
-        try:\r
-            if e.args[1] == "DB object has been closed":\r
-                return # We caused this non-fatal error, don't show.\r
-            if self.error is not None and self.error.args[1] == e.args[1]:\r
-                return # don't repeat same error\r
-        except:\r
-            print >> sys.stderr, "abc: db_exception_handler error", e, type(e)\r
-            print_exc()\r
-            #print_stack()\r
-        self.error = e\r
-        self.invokeLater(self.onError,[],{'source':"The database layer reported: "})\r
-    \r
-    def getConfigPath(self):\r
-        return self.utility.getConfigPath()\r
-\r
-    def startWithRightView(self):\r
-        if self.params[0] != "":\r
-            self.guiUtility.standardLibraryOverview()\r
-    \r
-        \r
-class DummySingleInstanceChecker:\r
-    \r
-    def __init__(self,basename):\r
-        pass\r
-\r
-    def IsAnotherRunning(self):\r
-        "Uses pgrep to find other tribler.py processes"\r
-        # If no pgrep available, it will always start tribler\r
-        progressInfo = commands.getoutput('pgrep -fl tribler.py | grep -v pgrep')\r
-        numProcesses = len(progressInfo.split('\n'))\r
-        if DEBUG:\r
-            print 'ProgressInfo: %s, num: %d' % (progressInfo, numProcesses)\r
-        return numProcesses > 1\r
-                \r
-        \r
-##############################################################\r
-#\r
-# Main Program Start Here\r
-#\r
-##############################################################\r
-def run(params = None):\r
-    global start_time\r
-    start_time = time()\r
-    if params is None:\r
-        params = [""]\r
-    \r
-    if len(sys.argv) > 1:\r
-        params = sys.argv[1:]\r
-    \r
-    # Create single instance semaphore\r
-    # Arno: On Linux and wxPython-2.8.1.1 the SingleInstanceChecker appears\r
-    # to mess up stderr, i.e., I get IOErrors when writing to it via print_exc()\r
-    #\r
-    # TEMPORARILY DISABLED on Linux\r
-    if sys.platform != 'linux2':\r
-        single_instance_checker = wx.SingleInstanceChecker("tribler-" + wx.GetUserId())\r
-    else:\r
-        single_instance_checker = DummySingleInstanceChecker("tribler-")\r
-\r
-    #print "[StartUpDebug]---------------- 1", time()-start_time\r
-    if not ALLOW_MULTIPLE and single_instance_checker.IsAnotherRunning():\r
-        #Send  torrent info to abc single instance\r
-        ClientPassParam(params[0])\r
-        #print "[StartUpDebug]---------------- 2", time()-start_time\r
-    else:\r
-        abcpath = os.path.abspath(os.path.dirname(sys.argv[0]))\r
-        # Arno: don't chdir to allow testing as other user from other dir.\r
-        #os.chdir(abcpath)\r
-\r
-        # Launch first abc single instance\r
-        app = ABCApp(0, params, single_instance_checker, abcpath)\r
-        configpath = app.getConfigPath()\r
-#        print "[StartUpDebug]---------------- 3", time()-start_time\r
-        app.MainLoop()\r
-\r
-        print "Client shutting down. Sleeping for a few seconds to allow other threads to finish"\r
-        sleep(4)\r
-\r
-        # This is the right place to close the database, unfortunately Linux has\r
-        # a problem, see ABCFrame.OnCloseWindow\r
-        #\r
-        #if sys.platform != 'linux2':\r
-        #    tribler_done(configpath)\r
-        os._exit(0)\r
-\r
-if __name__ == '__main__':\r
-    run()\r
-\r
diff --git a/tribler-mod/Tribler/Test/API/file.wmv b/tribler-mod/Tribler/Test/API/file.wmv
deleted file mode 100644 (file)
index ff5f772..0000000
Binary files a/tribler-mod/Tribler/Test/API/file.wmv and /dev/null differ
diff --git a/tribler-mod/Tribler/Test/API/file2.wmv b/tribler-mod/Tribler/Test/API/file2.wmv
deleted file mode 100644 (file)
index 4097171..0000000
Binary files a/tribler-mod/Tribler/Test/API/file2.wmv and /dev/null differ