Merge lp:~pedro/mago/banshee into lp:~mago-contributors/mago/mago-1.0

Proposed by Pedro Villavicencio
Status: Merged
Merged at revision: 150
Proposed branch: lp:~pedro/mago/banshee
Merge into: lp:~mago-contributors/mago/mago-1.0
Diff against target: 535 lines (+489/-0)
9 files modified
banshee/README (+24/-0)
banshee/banshee_tests.py (+50/-0)
banshee/banshee_tests.xml (+68/-0)
banshee/data/extendedm3u.m3u (+11/-0)
banshee/data/extendedpls.pls (+15/-0)
banshee/data/simplem3u.m3u (+5/-0)
banshee/data/simplepls.pls (+8/-0)
mago/application/banshee.py (+278/-0)
mago/test_suite/banshee.py (+30/-0)
To merge this branch: bzr merge lp:~pedro/mago/banshee
Reviewer Review Type Date Requested Status
Nagappan Alagappan Approve
Review via email: mp+41944@code.launchpad.net

Description of the change

Banshee tests, currently it supports:

* Enable/Disable Plugins: Plugin disabled due to a crash: bug 681362
* Import playlists:
  - Import extended m3u
  - Import extended pls
  - Import simple m3u
  - Import simple pls
* Add Podcast.
* Check the Miro podcast directory.
* Smart Playlist creation with utf8 characters.
* Play a file.

To post a comment you must log in.
Revision history for this message
Nagappan Alagappan (nagappan) wrote :

+ if not ldtp.guiexist('frmBansheeMediaPlayer'):
 + self.application.set_name('frmbanshee*')

Maybe you can use the names from definition, if they doesn't exist, maybe we can define it !

Thanks

review: Approve
Revision history for this message
Jean-Baptiste Lallement (jibel) wrote :

Merged to trunk with the modifications suggested by Nagappan.
Nice work. Thanks all.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added directory 'banshee'
=== added file 'banshee/README'
--- banshee/README 1970-01-01 00:00:00 +0000
+++ banshee/README 2010-11-26 11:36:12 +0000
@@ -0,0 +1,24 @@
1BANSHEE TESTS
2=============
3
4Safety
5------
6The recommendation is to run these tests on a separate user configuration since it deletes the banshee configuration and the Podcasts.
7
8Configuration
9-------------
10A few playlists need to be available at the data/ directory, which are available with these tests.
11
12Available Tests
13---------------
14
15* Enable/Disable Plugins: Plugin disabled due to a crash ,
16* Import playlists:
17 - Import extended m3u
18 - Import extended pls
19 - Import simple m3u
20 - Import simple pls
21* Add Podcast.
22* Check the Miro podcast directory.
23* Smart Playlist creation with utf8 characters.
24* Play a file.
025
=== added file 'banshee/banshee_tests.py'
--- banshee/banshee_tests.py 1970-01-01 00:00:00 +0000
+++ banshee/banshee_tests.py 2010-11-26 11:36:12 +0000
@@ -0,0 +1,50 @@
1# -*- coding: utf-8 -*-
2import os
3import shutil
4from time import time, gmtime, strftime
5
6from mago.test_suite.banshee import Banshee_TestSuite
7
8class Banshee_Tests(Banshee_TestSuite):
9
10 def enable_disable_plugins(self):
11 self.application.banshee_enable_disable_plugins(True)
12 self.application.banshee_enable_disable_plugins(False)
13 self.application.banshee_enable_disable_plugins(True)
14
15 def add_podcast(self, podcast_url):
16 self.application.banshee_add_podcast(podcast_url)
17 #remove the podcast folder.
18 podcasts_folder = os.getenv('HOME') + '/Podcasts/'
19 if os.path.exists(podcasts_folder):
20 shutil.rmtree(podcasts_folder)
21
22 def import_extended_m3u(self, extendedm3u):
23 path = os.path.join(self.get_test_dir(), extendedm3u)
24 self.application.banshee_import_playlist(path)
25
26 def import_extended_pls(self, extendedpls):
27 path = os.path.join(self.get_test_dir(), extendedpls)
28 self.application.banshee_import_playlist(path)
29
30 def import_simple_m3u(self, simplem3u):
31 path = os.path.join(self.get_test_dir(), simplem3u)
32 self.application.banshee_import_playlist(path)
33
34 def import_simple_pls(self, simplepls):
35 path = os.path.join(self.get_test_dir(), simplepls)
36 self.application.banshee_import_playlist(path)
37
38 def test_miro_guide(self):
39 self.application.banshee_miro_guide()
40
41 def play_file(self, file_path, tmp_path):
42 self.application.create_wav_file(440, file_path)
43 self.application.banshee_play_file(file_path, tmp_path)
44
45 def create_smart_playlist(self, playlist_name, artist):
46 self.application.banshee_create_smart_playlist(playlist_name, artist)
47
48if __name__ == "__main__":
49 banshee_test = Banshee_Tests()
50 banshee_test.run()
051
=== added file 'banshee/banshee_tests.xml'
--- banshee/banshee_tests.xml 1970-01-01 00:00:00 +0000
+++ banshee/banshee_tests.xml 2010-11-26 11:36:12 +0000
@@ -0,0 +1,68 @@
1<?xml version="1.0"?>
2<suite name="Banshee">
3 <class>banshee_tests.Banshee_Tests</class>
4 <description>
5 Tests that verifies Banshee functionalities.
6 </description>
7<!-- this test case makes banshee crash so disabling it for now,
8 filed bug about it: https://bugs.launchpad.net/ubuntu/+source/banshee/+bug/681362
9 <case name="Enable/Disable Plugins">
10 <method>enable_disable_plugins</method>
11 <description>Enables and disable all the plugins available in banshee</description>
12 </case>-->
13 <case name="Import extended m3u">
14 <method>import_extended_m3u</method>
15 <description>Import an extended m3u playlist</description>
16 <args>
17 <extendedm3u>data/extendedm3u.m3u</extendedm3u>
18 </args>
19 </case>
20 <case name="Import extended pls">
21 <method>import_extended_pls</method>
22 <description>Import an extended pls playlist</description>
23 <args>
24 <extendedpls>data/extendedpls.pls</extendedpls>
25 </args>
26 </case>
27 <case name="Import simple m3u">
28 <method>import_simple_m3u</method>
29 <description>Import a simple m3u playlist</description>
30 <args>
31 <simplem3u>data/simplem3u.m3u</simplem3u>
32 </args>
33 </case>
34 <case name="Import simple pls">
35 <method>import_simple_pls</method>
36 <description>Import a simple pls playlist</description>
37 <args>
38 <simplepls>data/simplepls.pls</simplepls>
39 </args>
40 </case>
41 <case name="Add Podcast">
42 <method>add_podcast</method>
43 <description>Add a Podcast into banshee</description>
44 <args>
45 <podcast_url>http://feeds.feedburner.com/UbuntuUkPodcastOgg-low?format=xml</podcast_url>
46 </args>
47 </case>
48 <case name="Miro">
49 <method>test_miro_guide</method>
50 <description>Load the Podcast directory - Miro Guide</description>
51 </case>
52 <case name="SmartPlayList">
53 <method>create_smart_playlist</method>
54 <description>Create an smart Playlist with UTF8 characters</description>
55 <args>
56 <playlist_name>ⵥꜳꜼʨサボ</playlist_name>
57 <artist>⺺⺭⺠⺓⺑⺏⻋</artist>
58 </args>
59 </case>
60 <case name="Play File">
61 <method>play_file</method>
62 <description>Play a file and verify it works</description>
63 <args>
64 <file_path>/tmp/banshee.wav</file_path>
65 <tmp_path>/tmp/banshee-capture.wav</tmp_path>
66 </args>
67 </case>
68</suite>
069
=== added directory 'banshee/data'
=== added file 'banshee/data/extendedm3u.m3u'
--- banshee/data/extendedm3u.m3u 1970-01-01 00:00:00 +0000
+++ banshee/data/extendedm3u.m3u 2010-11-26 11:36:12 +0000
@@ -0,0 +1,11 @@
1#EXTM3U
2#EXTINF:-1,Remote PLS
3http://remote/remote.pls
4#EXTINF:246,Local MP3
5local.mp3
6#EXTINF:120,Relative Local MP3
7relative/local.mp3
8#EXTINF:3,Spaced Relative Local MP3
9spaced relative/local.mp3
10#EXTINF:,Spaced Absolute Local MP3
11/spaced absolute/local.mp3
012
=== added file 'banshee/data/extendedpls.pls'
--- banshee/data/extendedpls.pls 1970-01-01 00:00:00 +0000
+++ banshee/data/extendedpls.pls 2010-11-26 11:36:12 +0000
@@ -0,0 +1,15 @@
1[playlist]
2Title1=Remote PLS
3File1=http://remote/remote.pls
4Length1=0
5File2=local.mp3
6Title2=Local MP3
7Length2=246
8Length3=120
9Title3=Relative Local MP3
10File3=relative/local.mp3
11Title4=Spaced Relative Local MP3
12File4=spaced relative/local.mp3
13Length4=3
14File5=/spaced absolute/local.mp3
15Title5=Spaced Absolute Local MP3
016
=== added file 'banshee/data/simplem3u.m3u'
--- banshee/data/simplem3u.m3u 1970-01-01 00:00:00 +0000
+++ banshee/data/simplem3u.m3u 2010-11-26 11:36:12 +0000
@@ -0,0 +1,5 @@
1http://remote/remote.pls
2local.mp3
3relative/local.mp3
4spaced relative/local.mp3
5/spaced absolute/local.mp3
06
=== added file 'banshee/data/simplepls.pls'
--- banshee/data/simplepls.pls 1970-01-01 00:00:00 +0000
+++ banshee/data/simplepls.pls 2010-11-26 11:36:12 +0000
@@ -0,0 +1,8 @@
1[playlist]
2File1=http://remote/remote.pls
3File2=local.mp3
4File3=relative/local.mp3
5File4=spaced relative/local.mp3
6File5=/spaced absolute/local.mp3
7NumberOfEntries=5
8Version=2
09
=== added file 'mago/application/banshee.py'
--- mago/application/banshee.py 1970-01-01 00:00:00 +0000
+++ mago/application/banshee.py 2010-11-26 11:36:12 +0000
@@ -0,0 +1,278 @@
1PACKAGE = "mago"
2
3#-*- coding:utf-8 -*-
4"""
5This is the "banshee" module.
6
7This module provides a wrapper for LDTP to make writing Banshee tests easier.
8"""
9import ooldtp
10import ldtp
11import os
12from .main import Application
13from ..gconfwrapper import GConf
14from ..cmd import globals
15import time
16import gettext
17from ..application.totem import Totem
18import pygst
19pygst.require("0.10")
20import gst
21
22gettext.install (True)
23gettext.bindtextdomain (PACKAGE, globals.LOCALE_SHARE)
24gettext.textdomain (PACKAGE)
25t = gettext.translation(PACKAGE, globals.LOCALE_SHARE, fallback = True)
26_ = t.gettext
27
28
29class Banshee(Application):
30 """
31 banshee manages the Banshee application.
32 """
33
34 LAUNCHER = 'banshee-1'
35 LAUNCHER_ARGS = []
36 WINDOW = 'frmBansheeMediaPlayer'
37
38 WINDOW_PLAY = 'frmbanshee*'
39
40 BTN_6 = _('btn6')
41 BTN_7 = _('btn7')
42 BTN_BROWSE = _('btnBrowse')
43 BTN_CLOSE = _('btnClose')
44 BTN_NEXT = _('btnNext')
45 BTN_PLAY = _('btnPlay')
46 BTN_PREVIOUS = _('btnPrevious')
47 BTN_REFRESH = _('btnRefresh')
48 BTN_VOLUME = _('btnVolume')
49 BTN_OPEN = _('btnOpen')
50 BTN_ADDPODCAST = _('btnAddPodcast')
51 BTN_SUBSCRIBE = _('btnSubscribe')
52 BTN_STOP = _('btnStop')
53 BTN_IMPORT = _('btnImport')
54 BTN_HOME = _('btnHome')
55 BTN_SAVE = _('btnSave')
56 CBO_ALBUM = _('cboAlbum')
57 DLG_PREFERENCES = _('dlgPreferences')
58 DLG_OPENLOCATION = _('dlgOpenLocation')
59 DLG_OPENLOCATION_1 = _('dlgOpenLocation1')
60 DLG_SUBSCRIBE = _('dlgSubscribe')
61 DLG_IMPORTPLAYLIST = _('dlgImportPlaylist')
62 DLG_SMARTPLAYLIST = _('dlgNewSmartPlaylist')
63 MNU_ABOUT = _('mnuAbout')
64 MNU_ADDREMOTEDAAPSERVER = _('mnuAddRemoteDAAPServer')
65 MNU_ADVANCEDCOLLECTIONSEARCHING = _('mnuAdvancedCollectionSearching')
66 MNU_BANSHEEHOMEPAGE = _('mnuBansheeHomePage')
67 MNU_BANSHEEUSERGUIDE_WIKI_ = _('mnuBansheeUserGuide(Wiki)')
68 MNU_CLOSE = _('mnuClose')
69 MNU_CONTENTS = _('mnuContents')
70 MNU_DELETEFROMDRIVE = _('mnuDeleteFromDrive')
71 MNU_EDITTRACKINFORMATION = _('mnuEditTrackInformation')
72 MNU_EMPTY = _('mnuEmpty')
73 MNU_EMPTY1 = _('mnuEmpty1')
74 MNU_EMPTY2 = _('mnuEmpty2')
75 MNU_EMPTY3 = _('mnuEmpty3')
76 MNU_EMPTY4 = _('mnuEmpty4')
77 MNU_EMPTY5 = _('mnuEmpty5')
78 MNU_EMPTY6 = _('mnuEmpty6')
79 MNU_EMPTY7 = _('mnuEmpty7')
80 MNU_EMPTY8 = _('mnuEmpty8')
81 MNU_EQUALIZER = _('mnuEqualizer')
82 MNU_EXPORTPLAYLIST = _('mnuExportPlaylist')
83 MNU_FIXMUSICMETADATA = _('mnuFixMusicMetadata')
84 MNU_GETINVOLVED = _('mnuGetInvolved')
85 MNU_IMPORTMEDIA = _('mnuImportMedia')
86 MNU_IMPORTPLAYLIST = _('mnuImportPlaylist')
87 MNU_JUMPTOPLAYINGSONG = _('mnuJumptoPlayingSong')
88 MNU_MANAGEEXTENSIONS = _('mnuManageExtensions')
89 MNU_NEWPLAYLIST = _('mnuNewPlaylist')
90 MNU_NEWSMARTPLAYLIST = _('mnuNewSmartPlaylist')
91 MNU_NEXT = _('mnuNext')
92 MNU_OPENCONTAININGFOLDER = _('mnuOpenContainingFolder')
93 MNU_OPENLOCATION = _('mnuOpenLocation')
94 MNU_PLAY = _('mnuPlay')
95 MNU_PREFERENCES = _('mnuPreferences')
96 MNU_PREVIOUS = _('mnuPrevious')
97 MNU_PROPERTIES = _('mnuProperties')
98 MNU_QUIT = _('mnuQuit')
99 MNU_REFRESH = _('mnuRefresh')
100 MNU_REMOVEFROMLIBRARY = _('mnuRemoveFromLibrary')
101 MNU_REMOVEFROMLIBRARY1 = _('mnuRemoveFromLibrary1')
102 MNU_RENAME = _('mnuRename')
103 MNU_RESCANMUSICLIBRARY = _('mnuRescanMusicLibrary')
104 MNU_RESTARTSONG = _('mnuRestartSong')
105 MNU_SEEKTO = _('mnuSeekTo')
106 MNU_SELECTALL = _('mnuSelectAll')
107 MNU_SELECTNONE = _('mnuSelectNone')
108 MNU_SOURCEPROPERTIES = _('mnuSourceProperties')
109 MNU_SWITCHSOURCE = _('mnuSwitchSource')
110 MNU_UNMAP = _('mnuUnmap')
111 MNU_VERSIONINFORMATION = _('mnuVersionInformation')
112 MNU_VISITUSERPROFILEPAGE = _('mnuVisitUserProfilePage')
113 MNU_WRITECD = _('mnuWriteCD')
114 LBL_MIROGUIDE = _('lblPodcastDirectory-MiroGuide')
115 TXT_0 = _('txt0')
116 TXT_1 = _('txt1')
117 TXT_LOCATION = _('txtLocation')
118 PTABLE = _('ptl0')
119 PTAB_EXTENSIONS = _('ptabExtensions')
120 TBL = _('ttbl0')
121 TBL_LISTVIEW = _('tblListView')
122 TBL_LISTVIEW1 = _('tblListView1')
123 TBL_LISTVIEW2 = _('tblListView2')
124 TBL_LISTVIEW3 = _('tblListView3')
125
126 header_values = ['Community Extensions',
127 'Context Pane',
128 'Core',
129 'Device Support',
130 'Online Sources',
131 'Utilities']
132
133 def banshee_enable_disable_plugins(self, enable):
134 banshee = ooldtp.context(self.WINDOW)
135 banshee.getchild(self.MNU_PREFERENCES).selectmenuitem()
136 ldtp.waittillguiexist(self.DLG_PREFERENCES)
137 bansheePreferences = ooldtp.context(self.DLG_PREFERENCES)
138 bansheePreferences.getchild(self.PTABLE).selecttab(self.PTAB_EXTENSIONS)
139 row_count = bansheePreferences.getrowcount(self.TBL)
140 row = 0
141 while row < row_count:
142 first_column = bansheePreferences.getcellvalue(self.TBL, row, 0)
143 if first_column not in self.header_values:
144 if enable:
145 bansheePreferences.checkrow(self.TBL, row, 1)
146 else:
147 bansheePreferences.uncheckrow(self.TBL, row, 1)
148 row+=1
149
150 bansheePreferences.getchild(self.BTN_CLOSE).click()
151 ldtp.wait(2)
152 ldtp.waittillguiexist(self.WINDOW)
153
154 def banshee_add_podcast(self, podcast_url):
155 banshee = ooldtp.context(self.WINDOW)
156
157 if not banshee.doesrowexist(self.TBL, 'Podcasts'):
158 raise AssertionError, "The Podcast plugin was either not activated or crashed during the activation"
159
160 #select the podcast entry on the left side listview.
161 banshee.selectrow(self.TBL, 'Podcasts')
162 ldtp.wait()
163 #remap the window since new buttons appear on it.
164 ldtp.remap(self.WINDOW)
165 banshee.getchild(self.BTN_ADDPODCAST).click()
166 ldtp.waittillguiexist(self.DLG_SUBSCRIBE)
167 subscribe = ooldtp.context(self.DLG_SUBSCRIBE)
168 subscribe.settextvalue(self.TXT_0, podcast_url)
169 ldtp.wait(2)
170 subscribe.getchild(self.BTN_SUBSCRIBE).click()
171 ldtp.waittillguiexist(self.WINDOW, self.BTN_STOP)
172 #the btnStop and it dialog appear just when adding the podcast
173 #so the ui needs to be remaped in order to track the progress.
174 ldtp.remap(self.WINDOW)
175 buttonStop = banshee.getchild(self.BTN_STOP)
176
177 while buttonStop.stateenabled():
178 ldtp.wait()
179
180 if not banshee.getrowcount(self.TBL_LISTVIEW) > 1:
181 raise AssertionError, "The Podcast: %s was not added" % podcast_url
182
183 def banshee_import_playlist(self, playlist_path):
184 banshee = ooldtp.context(self.WINDOW)
185 banshee.getchild(self.MNU_IMPORTPLAYLIST).selectmenuitem()
186
187 ldtp.wait(2)
188
189 if (ldtp.guiexist(self.DLG_IMPORTPLAYLIST)):
190 selectPlaylist = ooldtp.context(self.DLG_IMPORTPLAYLIST)
191 if not (selectPlaylist.getchild(self.TXT_LOCATION)):
192 ldtp.generatekeyevent('<ctrl>l')
193
194 selectPlaylist.settextvalue(self.TXT_LOCATION, playlist_path)
195 ldtp.wait(2)
196 selectPlaylist.getchild(self.BTN_IMPORT).click()
197 ldtp.wait(2)
198
199 ldtp.waittillguiexist(self.WINDOW)
200 playlistName = os.path.splitext(os.path.basename(playlist_path))[0]
201
202 if not banshee.doesrowexist(self.TBL, playlistName):
203 raise AssertionError, "The playlist %s was not imported into Banshee." % playlist_path
204
205 def banshee_play_file(self, file_path, tmp_path):
206 banshee = ooldtp.context(self.WINDOW)
207 banshee.getchild(self.MNU_OPENLOCATION).selectmenuitem()
208 ldtp.wait()
209
210 bansheeLocation = ooldtp.context(self.DLG_OPENLOCATION)
211
212 bansheeLocation.getchild(self.BTN_BROWSE).click()
213
214 ldtp.waittillguiexist(self.DLG_OPENLOCATION_1)
215 location = ooldtp.context(self.DLG_OPENLOCATION_1)
216
217 if not (location.guiexist(self.TXT_LOCATION)):
218 ldtp.generatekeyevent('<ctrl>l')
219 location.settextvalue(self.TXT_LOCATION, file_path)
220 ldtp.wait(2)
221 location.getchild(self.BTN_OPEN).click()
222 ldtp.wait(2)
223
224 bansheeLocation.getchild(self.BTN_OPEN).click()
225 ldtp.waittillguiexist(self.WINDOW_PLAY)
226 totem = Totem()
227 (freq, flat) = totem.capture_do_fft(tmp_path)
228
229 if freq != 440:
230 raise AssertionError, "Sine WAV playback error, frq expected: 440; got %s" % freq
231 os.unlink(tmp_path)
232 os.unlink(file_path)
233
234 def create_wav_file(self, freq, wavfile):
235 pipeline = 'audiotestsrc freq=%d num-buffers=512 ! queue ! \
236 audioconvert ! \
237 audio/x-raw-int,width=16,depth=16,channels=1 ! \
238 wavenc ! \
239 filesink location=%s' % (freq, wavfile)
240 element = gst.parse_launch(pipeline)
241 element.set_state(gst.STATE_PLAYING)
242
243 def banshee_miro_guide(self):
244 banshee = ooldtp.context(self.WINDOW)
245
246 if not banshee.doesrowexist(self.TBL, 'Miro Guide'):
247 raise AssertionError, "The Miro Guide plugin was either not activated or crashed during the activation"
248
249 #select the podcast entry on the left side listview.
250 banshee.selectrow(self.TBL, 'Miro Guide')
251 ldtp.wait()
252 #remap the window since new buttons appear on it.
253 ldtp.remap(self.WINDOW)
254 buttonHome = banshee.getchild(self.BTN_HOME)
255 while not buttonHome.stateenabled():
256 ldtp.wait()
257
258 banshee.selectrow(self.TBL, 'Music')
259
260 def banshee_create_smart_playlist(self, playlist_name, artist):
261 banshee = ooldtp.context(self.WINDOW)
262 banshee.getchild(self.MNU_NEWSMARTPLAYLIST).selectmenuitem()
263
264 ldtp.waittillguiexist(self.DLG_SMARTPLAYLIST)
265 smartPlaylist = ooldtp.context(self.DLG_SMARTPLAYLIST)
266 smartPlaylist.settextvalue(self.TXT_0, playlist_name)
267 smartPlaylist.settextvalue(self.TXT_1, artist)
268 comboAlbum = smartPlaylist.getchild(self.CBO_ALBUM)
269 comboAlbum.comboselect('Artist')
270
271 smartPlaylist.getchild(self.BTN_SAVE).click()
272
273 if not banshee.doesrowexist(self.TBL, playlist_name):
274 raise AssertionError, "The playlist %s was not created." % playlist_name
275
276 def __init__(self):
277 Application.__init__(self)
278 self.main_window = ooldtp.context(self.WINDOW)
0279
=== added file 'mago/test_suite/banshee.py'
--- mago/test_suite/banshee.py 1970-01-01 00:00:00 +0000
+++ mago/test_suite/banshee.py 2010-11-26 11:36:12 +0000
@@ -0,0 +1,30 @@
1"""
2This module contains the definition of the test suite for Banshee testing.
3"""
4import ldtp, ooldtp
5import os
6import shutil
7from .main import SingleApplicationTestSuite
8from ..application.banshee import Application, Banshee
9
10class Banshee_TestSuite(SingleApplicationTestSuite):
11 """
12 Default test suite for Banshee
13 """
14 APPLICATION_FACTORY = Banshee
15 def setup(self):
16 self.application.open()
17
18 def teardown(self):
19 if not ldtp.guiexist('frmBansheeMediaPlayer'):
20 self.application.set_name('frmbanshee*')
21
22 #remove banshee config since we imported playlists, etc.
23 banshee_config = os.getenv('HOME') + '/.config/banshee-1'
24 if os.path.exists(banshee_config):
25 shutil.rmtree(banshee_config)
26
27 self.application.close()
28
29 def cleanup(self):
30 pass

Subscribers

People subscribed via source and target branches

to status/vote changes: