immsview
author fabien
Sun, 08 Feb 2004 16:55:24 -0500
branchimmsview
changeset 31 13f56bb29b96
parent 28 7f61cb2ddb7b
child 33 ad808d18c693
permissions -rwxr-xr-x
[svn] New bestofimms, cleanimms, imms.py and utils.py.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
     1
#!/usr/bin/python
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
     2
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
     3
# Copyright (C) 2004 by Fabien Ninoles
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
     4
3
d488fff3852f [svn] Add current and correct plot function.
fabien
parents: 2
diff changeset
     5
# IMMSView is aim to be a replacement to XMMS playlist editor
d488fff3852f [svn] Add current and correct plot function.
fabien
parents: 2
diff changeset
     6
# with better support for IMMS plugin.
d488fff3852f [svn] Add current and correct plot function.
fabien
parents: 2
diff changeset
     7
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
     8
# IMMSView is free software; you can redistribute it and/or modify
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
     9
# it under the terms of the GNU General Public License as published by
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    10
# the Free Software Foundation; either version 2, or (at your option)
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    11
# any later version.
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    12
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    13
# IMMSView is distributed in the hope that it will be useful,
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    14
# but WITHOUT ANY WARRANTY; without even the implied warranty of
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    15
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    16
# GNU General Public License for more details.
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    17
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    18
# You should have received a copy of the GNU General Public License
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    19
# along with GNU Emacs; see the file COPYING.  If not, write to the
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    20
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    21
# Boston, MA 02111-1307, USA.
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
    22
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents: 28
diff changeset
    23
_version_ = "$Id: immsview 1713 2004-02-08 21:55:24Z fabien $"
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
    24
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
    25
# $Log$
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents: 28
diff changeset
    26
# Revision 1.29  2004/02/08 21:55:24  fabien
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents: 28
diff changeset
    27
# New bestofimms, cleanimms, imms.py and utils.py.
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents: 28
diff changeset
    28
#
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
    29
# Revision 1.28  2004/02/07 15:58:54  fabien
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
    30
# Use Python-Gnuplot instead of immsplot.
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
    31
#
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
    32
# Revision 1.27  2004/02/07 05:30:40  fabien
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
    33
# Now three updating function. (see IMMSStore.__init__).
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
    34
# Currently, I'm better to replace everything.  But eh, YMMV.
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
    35
#
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
    36
# Revision 1.26  2004/02/07 04:14:40  fabien
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
    37
# Display only distinct UID.  The path selected is arbitrary, but
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
    38
# it's always the current one if Current is pressed.
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
    39
#
25
d59f0f20fa8a [svn] Some typos... (better take a break now...)
fabien
parents: 24
diff changeset
    40
# Revision 1.25  2004/02/07 01:21:32  fabien
d59f0f20fa8a [svn] Some typos... (better take a break now...)
fabien
parents: 24
diff changeset
    41
# Some typos... (better take a break now...)
d59f0f20fa8a [svn] Some typos... (better take a break now...)
fabien
parents: 24
diff changeset
    42
#
24
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
    43
# Revision 1.24  2004/02/07 01:18:41  fabien
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
    44
# Better like a four colors gradient.
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
    45
#
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
    46
# Revision 1.23  2004/02/07 00:53:02  fabien
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
    47
# Make a gradient of color instead...
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
    48
# I'm not sure which one I prefer however.
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
    49
#
21
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
    50
# Revision 1.22  2004/02/06 06:10:49  fabien
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
    51
# Add presentation page.
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
    52
#
20
7af7e8196170 [svn] Fix curtime until refresh.
fabien
parents: 19
diff changeset
    53
# Revision 1.21  2004/02/05 17:14:33  fabien
7af7e8196170 [svn] Fix curtime until refresh.
fabien
parents: 19
diff changeset
    54
# Fix curtime until refresh.
7af7e8196170 [svn] Fix curtime until refresh.
fabien
parents: 19
diff changeset
    55
#
19
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
    56
# Revision 1.20  2004/02/05 15:46:17  fabien
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
    57
# Remove the useless ORDER BY from the query for
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
    58
# speed improvemennt (Doh!)
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
    59
#
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
    60
# Revision 1.19  2004/02/05 07:07:38  fabien
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
    61
# Add some colors related to the rating.
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
    62
#
17
bef598558a5b [svn] Try to update the Last string dynamically... doesn't seem to work.
fabien
parents: 16
diff changeset
    63
# Revision 1.18  2004/02/04 22:21:47  fabien
bef598558a5b [svn] Try to update the Last string dynamically... doesn't seem to work.
fabien
parents: 16
diff changeset
    64
# Try to update the Last string dynamically... doesn't seem to work.
bef598558a5b [svn] Try to update the Last string dynamically... doesn't seem to work.
fabien
parents: 16
diff changeset
    65
#
16
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
    66
# Revision 1.17  2004/02/04 21:31:45  fabien
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
    67
# Update the current song.  This slow down thing a bit (any querying
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
    68
# take one to 2 seconds... That's pity!) but it make sure that at least
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
    69
# this song is correct.
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
    70
#
15
a967b46eec0b [svn] Used the default sort function (return 0).
fabien
parents: 14
diff changeset
    71
# Revision 1.16  2004/02/04 20:20:40  fabien
a967b46eec0b [svn] Used the default sort function (return 0).
fabien
parents: 14
diff changeset
    72
# Used the default sort function (return 0).
a967b46eec0b [svn] Used the default sort function (return 0).
fabien
parents: 14
diff changeset
    73
#
14
a678f3ef86e0 [svn] Add SQL quoting for path name.
fabien
parents: 13
diff changeset
    74
# Revision 1.15  2004/02/04 05:46:57  fabien
a678f3ef86e0 [svn] Add SQL quoting for path name.
fabien
parents: 13
diff changeset
    75
# Add SQL quoting for path name.
a678f3ef86e0 [svn] Add SQL quoting for path name.
fabien
parents: 13
diff changeset
    76
#
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
    77
# Revision 1.14  2004/02/03 21:50:28  fabien
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
    78
# Update also on double click.
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
    79
#
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
    80
# Revision 1.13  2004/02/03 20:55:27  fabien
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
    81
# Play selected: check if the file exist, elsewhere try to
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
    82
# update it through the Db.
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
    83
#
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
    84
# Revision 1.12  2004/02/03 18:50:03  fabien
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
    85
# Add double click and remove sorting when refreshing data.
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
    86
#
10
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
    87
# Revision 1.11  2004/02/02 15:45:25  fabien
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
    88
# Add a comment about the autocommit value in db.connect()
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
    89
#
9
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
    90
# Revision 1.10  2004/02/02 15:42:43  fabien
10
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
    91
# OK, reset current after changing song manually... however, I most
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
    92
# sleep for almost a second to be sure to catch it.
9
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
    93
#
8
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
    94
# Revision 1.9  2004/02/02 06:54:09  fabien
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
    95
# Add cvs log since I don't maintain a changelog currently.
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
    96
#
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
    97
# Revision 1.8  2004/02/02 06:44:10  fabien
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
    98
# All functions are now implemented (with a somewhat "cleaner" interface.
10
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
    99
#
8
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   100
# Revision 1.7  2004/02/02 04:51:35  fabien
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   101
# Switch to GTK2.
10
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
   102
#
8
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   103
# Revision 1.6  2004/02/01 17:21:02  fabien
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   104
# Add play selected song.
10
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
   105
#
8
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   106
# Revision 1.5  2004/02/01 16:22:40  fabien
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   107
# Add title.
10
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
   108
#
8
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   109
# Revision 1.4  2004/02/01 16:12:45  fabien
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   110
# Add current and correct plot function.
10
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
   111
#
8
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   112
# Revision 1.3  2004/02/01 15:59:04  fabien
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   113
# Adding xmms selection and last display.
10
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
   114
#
8
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   115
# Revision 1.2  2004/02/01 04:40:41  fabien
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   116
# add versioning.
10
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
   117
#
8
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
   118
# Revision 1.1  2004/02/01 03:05:25  fabien
9
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   119
# Premiere version de immsview.
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   120
3
d488fff3852f [svn] Add current and correct plot function.
fabien
parents: 2
diff changeset
   121
# The aim of immsview is to become a better playlist editor than the
d488fff3852f [svn] Add current and correct plot function.
fabien
parents: 2
diff changeset
   122
# normal
d488fff3852f [svn] Add current and correct plot function.
fabien
parents: 2
diff changeset
   123
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   124
# TODO:
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   125
# * IMMS:
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   126
#   - Add composed rating
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   127
#   - Rating edition
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   128
#   - SID grouping
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   129
#   - UID grouping!!! (yes, you can have different path with the same UID)
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   130
# * XMMS:
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   131
#   - getting current playlist
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   132
#   - editing playlist
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   133
# * File support:
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   134
#   - adding, deleting, suppressing a file (including updating other
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   135
#     interface).
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   136
#   - artist, title, genre informations (ID3)
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   137
# * Interface:
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   138
#   - Real application interface (with menu, icons, accelerators, etc.)
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   139
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   140
import pygtk
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   141
pygtk.require('2.0')
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   142
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   143
import sys
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   144
import os
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   145
import gobject
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   146
import gtk
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   147
import gtk.glade
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   148
import gettext
2
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   149
import xmms.control
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   150
import time
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   151
import Gnuplot
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents: 28
diff changeset
   152
from imms import IMMSDb
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   153
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   154
gtk.glade.bindtextdomain('immsview', '/usr/share/immsview/LANG')
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   155
gtk.glade.textdomain('immsview')
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   156
_ = gettext.gettext
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   157
2
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   158
def strtime(seconds):
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   159
    secs = abs(round(seconds))
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   160
    minutes = secs / 60;
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   161
    hours = minutes / 60;
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   162
    days = hours / 24;
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   163
    secs = secs % 60;
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   164
    minutes %= 60;
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   165
    hours %= 24;
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   166
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   167
    if seconds < 0:
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   168
            s = "-"
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   169
    else:
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   170
            s = ""
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   171
    if days >= 1:
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   172
            s += "%dd %dh" % (days, hours)
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   173
    elif hours >= 1:
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   174
            s += "%dh%02d" % (hours, minutes)
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   175
    elif minutes >= 1:
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   176
            s += "%d'%02d\"" % (minutes, secs)
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   177
    else:
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   178
            s += "%d\"" % (secs)
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   179
    return s
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   180
5
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   181
class XMMSControl:
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   182
    def __getattr__(self, name):
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   183
        return xmms.control.__dict__[name]
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   184
    def get_current_file(self):
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   185
        return self.get_playlist_file(
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   186
            self.get_playlist_pos())
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   187
    def find_in_playlist(self, filename):
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   188
        for idx in range(self.get_playlist_length()):
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   189
            if filename == self.get_playlist_file(idx):
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   190
                return idx
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   191
        return -1
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   192
    def play_file(self, filename):
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   193
        idx = self.find_in_playlist(filename)
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   194
        if idx == -1:
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   195
            self.enqueue_and_play((filename,))
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   196
        else:
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   197
            self.set_playlist_pos(idx)
2
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   198
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   199
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   200
_gdk_colors = []
24
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   201
for i in range(76):
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   202
    if i <= 25:
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   203
        red = 255
25
d59f0f20fa8a [svn] Some typos... (better take a break now...)
fabien
parents: 24
diff changeset
   204
        green = i * 255 / 25
24
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   205
        blue = 0
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   206
    elif i <= 50:
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   207
        red = (50-i) * 255 / 25
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   208
        green = 255
24
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   209
        blue = 0
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   210
    else:
25
d59f0f20fa8a [svn] Some typos... (better take a break now...)
fabien
parents: 24
diff changeset
   211
        red = 0
24
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   212
        green = 255
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   213
        blue = (i-50) * 255 / 25    
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   214
    _gdk_colors.append("#%02X%02X%02X" % (red, green, blue))
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   215
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   216
def rating_to_color(rate):
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   217
    rate = min(max(rate,75),150)
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   218
    return _gdk_colors[rate-75]
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   219
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   220
# This class must be derived from a GtkTreeModel
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   221
# with persistent GtkTreeIter !!!
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   222
class IMMSStore(gtk.ListStore):
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   223
    COL_RATING = 0
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   224
    COL_PATH = 1
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   225
    COL_LAST_STR = 2
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   226
    COL_LAST = 3
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   227
    COL_SELECT = 4
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   228
    COL_UID = 5
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   229
    COL_RATING_COLOR = 6
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   230
    COL_PATHS_NUMBER = 7
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   231
    def __init__(self, db):
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   232
        gtk.ListStore.__init__(self,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   233
                               gobject.TYPE_INT,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   234
                               gobject.TYPE_STRING,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   235
                               gobject.TYPE_STRING,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   236
                               gobject.TYPE_INT,
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   237
                               gobject.TYPE_BOOLEAN,
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   238
                               gobject.TYPE_INT,
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   239
                               gobject.TYPE_STRING,
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   240
                               gobject.TYPE_INT,
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   241
                               )
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   242
        self.db = db
15
a967b46eec0b [svn] Used the default sort function (return 0).
fabien
parents: 14
diff changeset
   243
        self.set_default_sort_func(self.default_sort)
19
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
   244
        self.set_sort_column_id(IMMSStore.COL_RATING, gtk.SORT_DESCENDING)
20
7af7e8196170 [svn] Fix curtime until refresh.
fabien
parents: 19
diff changeset
   245
        self.curtime = time.time()
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   246
        # Only refresh last and rating. 6 / 17
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   247
        # self._update_me = self.refresh
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   248
        # Try to recycle old giter. 6 / 11
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   249
        # self._update_me = self.recycle
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   250
        # Replace everything. 6 / 7
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   251
        self._update_me = self.replace 
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   252
    def default_sort(self, a, b, dummy):
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   253
        return 0
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   254
    def tune_to_giter(self, uid, tune, path =  None, giter = None):
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   255
        if path:
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   256
            for fn in tune['path']:
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   257
                if fn == path:
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   258
                    break
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   259
            else:
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   260
                fn = tune['path'][0]
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   261
        else:
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   262
            fn = tune['path'][0]
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   263
        if not giter:
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   264
            giter = self.append(None)
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   265
        self.set(giter,
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   266
                 IMMSStore.COL_UID, uid,
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   267
                 IMMSStore.COL_RATING, tune['rating'],
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   268
                 IMMSStore.COL_PATH, fn,
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   269
                 IMMSStore.COL_LAST, tune['last'],
20
7af7e8196170 [svn] Fix curtime until refresh.
fabien
parents: 19
diff changeset
   270
                 IMMSStore.COL_LAST_STR, strtime(self.curtime-tune['last']),
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   271
                 IMMSStore.COL_RATING_COLOR, rating_to_color(tune['rating']),
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   272
                 IMMSStore.COL_PATHS_NUMBER, len(tune['path']),
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   273
                 IMMSStore.COL_SELECT, gtk.FALSE)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   274
        return giter
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   275
    def update(self):
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   276
        self.curtime = time
20
7af7e8196170 [svn] Fix curtime until refresh.
fabien
parents: 19
diff changeset
   277
        self.curtime = time.time()
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   278
        col, order = self.get_sort_column_id()
16
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
   279
	if col:
19
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
   280
        	self.set_sort_column_id(-1, gtk.SORT_ASCENDING)
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   281
        tunes = self.db.get_ratings_and_info()
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   282
	print time.ctime(time.time()) + ": inserting"
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   283
        self._update_me(tunes)
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   284
	print time.ctime(time.time()) + ": end insert"
16
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
   285
	if col:
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
   286
        	self.set_sort_column_id(col, order)
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   287
    def replace(self, tunes):
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   288
        "replace simply replace all giter with new one"
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   289
        self.clear()
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   290
        for uid, tune in tunes.iteritems():
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   291
            self.tune_to_giter(uid, tune)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   292
    def recycle(self, tunes):
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   293
        "Recycle old giter, replacing old data."
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   294
        giter = self.get_iter_first()
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   295
        for uid, tune in tunes.iteritems():
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   296
            self.tune_to_giter(uid, tune, giter = giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   297
            if giter:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   298
                giter = self.iter_next(giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   299
        while giter:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   300
            next = self.iter_next(giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   301
            self.remove(giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   302
            giter = next
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   303
    def refresh(self, tunes):
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   304
        "refresh only get new data and update last time and rating."
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   305
        freed_giters = []
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   306
        # first, try to recycle current giter.
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   307
        giter = self.get_iter_first()
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   308
        while giter:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   309
            # check if giter exist in DB.
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   310
            guid = self.get_value(giter, IMMSStore.COL_UID)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   311
            if tunes.has_key(guid):
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   312
                tune = tunes[guid]
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   313
                self.set(giter,
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   314
                         IMMSStore.COL_RATING, tune['rating'],
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   315
                         IMMSStore.COL_LAST, tune['last'],
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   316
                         IMMSStore.COL_LAST_STR,
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   317
                         strtime(self.curtime-tune['last']),
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   318
                         IMMSStore.COL_RATING_COLOR,
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   319
                         rating_to_color(tune['rating']))
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   320
            else:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   321
                # Elsewhere, collect them for further use...
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   322
                # Hopefully, ListStore have persistent giter!
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   323
                freed_giters.append(giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   324
            giter = self.iter_next(giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   325
        # populate the remeaning tunes into the collected giters
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   326
        for uid, tune in tunes.iteritems():
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   327
            if len(freed_giters) > 0:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   328
                giter = freed_giters.pop()
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   329
            else:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   330
                giter = None
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   331
            self.tune_to_giter(uid, tune, None, giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   332
        # then erase the remeaning giter.
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   333
        for giter in freed_giters:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   334
            self.remove(giter)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   335
    def find_selected_giter(self):
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   336
        giter = self.get_iter_first()
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   337
        while giter:
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   338
            if self.get_value(giter, IMMSStore.COL_SELECT):
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   339
                break
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   340
            giter = self.iter_next(giter)
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   341
        return giter
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   342
    def find_giter_from_uid(self, uid):
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   343
        giter = self.get_iter_first()
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   344
        while giter:
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   345
            if self.get_value(giter, IMMSStore.COL_UID) == uid:
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   346
                break
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   347
            giter = self.iter_next(giter)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   348
        return giter
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   349
    def find_giter_from_path(self, song):
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   350
        uids = self.db.get_uid_by_path(song)
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   351
        if len(uids) == 0:
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   352
            return None
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   353
        uid = uids[0]
16
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
   354
        giter = self.find_giter_from_uid(uid)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   355
        if not giter:
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   356
            tunes = self.db.get_ratings_and_info([uid])
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   357
            if tunes > 0:
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   358
                giter = self.tune_to_giter(uid, tunes[uid], song)
16
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
   359
	else:
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   360
            giter = self.update_giter(giter, song)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   361
        return giter
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   362
    def get_ratings(self):
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   363
        res = []
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   364
        giter = self.get_iter_first()
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   365
        while giter:
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   366
            uid = self.get_value(giter, IMMSStore.COL_UID)
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   367
            rating = self.get_value(giter, IMMSStore.COL_RATING)
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   368
            res.append((uid, rating))
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   369
            giter = self.iter_next(giter)
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   370
        return res
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   371
    def update_giter(self, giter, path = None):
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   372
        uid = self.get_value(giter, IMMSStore.COL_UID)
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   373
        tunes = self.db.get_ratings_and_info([uid,])
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   374
        if len(tunes) > 0:
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   375
            return self.tune_to_giter(uid, tunes[uid], path, giter)
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   376
        return giter
17
bef598558a5b [svn] Try to update the Last string dynamically... doesn't seem to work.
fabien
parents: 16
diff changeset
   377
##     def get_value(self, giter, col):
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   378
##         # sniff!  Can't override built-ins
17
bef598558a5b [svn] Try to update the Last string dynamically... doesn't seem to work.
fabien
parents: 16
diff changeset
   379
##         if col == IMMSStore.COL_LAST_STR:
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   380
##             return strtime(time.time() -
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   381
##                            self.get_value(giter, IMMSStore.COL_LAST))
17
bef598558a5b [svn] Try to update the Last string dynamically... doesn't seem to work.
fabien
parents: 16
diff changeset
   382
##         else:
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   383
##             return gtk.ListStore.get_value(self, giter, col)
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   384
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   385
class IMMSPlot(Gnuplot.Gnuplot):
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   386
    def __init__(self, db):
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   387
        self.db = db;
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   388
        Gnuplot.Gnuplot.__init__(self)
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   389
    def plot_rate(self):
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   390
        array = [0] * (150-75+1)
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   391
        for uid, rating in self.db.get_ratings():
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   392
            array[rating-75] += 1
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   393
        d1 = Gnuplot.Data(range(75,150+1), array,
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   394
                         with='impulses')
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   395
        d2 = Gnuplot.Data(range(75,150+1), array,
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   396
                          smooth = 'bezier')
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   397
        self.plot(d1, d2, title='rate frequency')
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   398
        self.gnuplot.flush()
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   399
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   400
class IMMSView(gtk.TreeView):
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   401
	def __init__(self, model, xmms):
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   402
            gtk.TreeView.__init__(self, model)
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   403
            self.xmms = xmms
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   404
            self.create_widgets()
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   405
	def create_widgets(self):
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   406
            renderer = gtk.CellRendererText()
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   407
            renderer.set_property('weight', 700)
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   408
            renderer.set_property('background-set', gtk.TRUE)
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   409
            column = gtk.TreeViewColumn(_("Rating"), renderer,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   410
                                        weight_set = IMMSStore.COL_SELECT,
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   411
                                        background = IMMSStore.COL_RATING_COLOR,
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   412
                                        text = IMMSStore.COL_RATING)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   413
            column.set_sort_column_id(IMMSStore.COL_RATING)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   414
            self.append_column(column)
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   415
            
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   416
            renderer = gtk.CellRendererText()
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   417
            renderer.set_property('weight', 700)            
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   418
            # renderer.set_property('background-set', gtk.FALSE)
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   419
            column = gtk.TreeViewColumn(_("Last"), renderer,
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   420
                                        weight_set = IMMSStore.COL_SELECT,
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   421
                                        text = IMMSStore.COL_LAST_STR)
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   422
            column.set_sort_column_id(IMMSStore.COL_LAST)
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   423
            self.append_column(column)
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   424
            column = gtk.TreeViewColumn(_("#"), renderer,
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   425
                                        weight_set = IMMSStore.COL_SELECT,
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   426
                                        text = IMMSStore.COL_PATHS_NUMBER)
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   427
            self.append_column(column)
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   428
            column = gtk.TreeViewColumn(_("File"), renderer,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   429
                                        weight_set = IMMSStore.COL_SELECT,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   430
                                        text = IMMSStore.COL_PATH)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   431
            column.set_resizable(gtk.TRUE)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   432
            column.set_sort_column_id(IMMSStore.COL_PATH)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   433
            self.append_column(column)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   434
            self.set_search_column(IMMSStore.COL_PATH)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   435
            self.set_headers_clickable(gtk.TRUE)
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   436
            self.connect('row-activated', self.on_row_activated)
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   437
        def set_current_song(self, song):
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   438
            model = self.get_model()
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   439
            giter = model.find_selected_giter()
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   440
            if giter:
16
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
   441
	    	model.update_giter(giter)
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   442
                model.set_value(giter, IMMSStore.COL_SELECT, gtk.FALSE)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   443
            giter = model.find_giter_from_path(song)
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   444
            if giter:
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   445
                model.set_value(giter, IMMSStore.COL_SELECT, gtk.TRUE)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   446
                self.set_cursor(model.get_path(giter))
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   447
        def get_filename(self, giter):
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   448
            model = self.get_model()
16
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
   449
            fn = model.get_value(model.update_giter(giter), IMMSStore.COL_PATH)
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   450
            try:
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   451
                os.stat(fn)
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   452
            except OSError:
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   453
                return None
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   454
            return fn
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   455
        def get_file_selected(self):
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   456
            model, giter = self.get_selection().get_selected()
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   457
            if giter:
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   458
                return self.get_filename(giter)
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   459
            return None
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   460
        def on_row_activated(self, tview, path, col):
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   461
            model = self.get_model()
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   462
            giter = model.get_iter(path)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   463
            fn = self.get_filename(giter)
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   464
            self.set_current_song(fn)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   465
            self.xmms.play_file(fn)
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   466
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   467
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   468
class IMMSToolbar(gtk.Toolbar):
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   469
    _SLEEP_TIME = 5
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   470
    def __init__(self, iview, xmms, plotter):
9
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   471
        gtk.Toolbar.__init__(self)
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   472
        self.iview = iview
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   473
        self.xmms = xmms
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   474
        self.plot = plotter
9
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   475
        self.create_widgets()
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   476
    def create_widgets(self):
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   477
        self.append_item(_('Refresh'), _('Refresh list'),
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   478
                         None, None, self.do_refresh)
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   479
        self.append_item(_('Plot'), _('Show graph of rates'),
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   480
                         None, None, self.do_plot)
9
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   481
        self.append_item(_('Current'), _('Get current song'),
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   482
                         None, None, self.do_get_current)
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   483
        self.append_item(_('Previous'), _('Play previous song'),
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   484
                         None, None, self.do_play_prev)
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   485
        self.append_item(_('Play'), _('Play selection'),
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   486
                         None, None, self.do_play)
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   487
        self.append_item(_('Next'), _('Play next song'),
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   488
                         None, None, self.do_play_next)
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   489
    def do_plot(self, dummy):
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   490
        self.plot.plot_rate()
9
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   491
    def do_refresh(self, dummy):
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   492
            self.iview.get_model().update()
9
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   493
    def do_get_current(self, dummy):
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   494
        song = self.xmms.get_current_file()
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents: 28
diff changeset
   495
        try:
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents: 28
diff changeset
   496
            self.iview.set_current_song(song)
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents: 28
diff changeset
   497
        except:
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents: 28
diff changeset
   498
            pass
9
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   499
    def do_play(self, dummy):
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   500
        fn = self.iview.get_file_selected()
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   501
        if fn:
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   502
            self.xmms.play_file(fn)
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   503
        self.sleep(self._SLEEP_TIME)
9
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   504
        self.do_get_current(dummy)
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   505
    def do_play_prev(self, dummy):
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   506
        self.xmms.playlist_prev()
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   507
        self.sleep(self._SLEEP_TIME)
9
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   508
        self.do_get_current(dummy)
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   509
    def do_play_next(self, dummy):
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   510
        self.xmms.playlist_next()
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   511
        self.sleep(self._SLEEP_TIME)
9
412e93decb7c [svn] OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
fabien
parents: 8
diff changeset
   512
        self.do_get_current(dummy)
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   513
    def sleep(self, secs):
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   514
	start = time.time()
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   515
	while (time.time() - start) < secs:
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   516
		time.sleep(0.2)
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   517
		if gtk.main_iteration_do(gtk.FALSE):
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   518
			break;
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   519
21
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   520
class Application:
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   521
    def __init__(self):
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   522
        self.xmms = XMMSControl()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   523
        self.db = IMMSDb()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   524
        self.model = IMMSStore(self.db)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   525
    def main(self):
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   526
        self.create_widgets()
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   527
        gtk.mainloop()
21
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   528
    def create_widgets(self):
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   529
        root = gtk.Window()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   530
        root.set_title(_("IMMSView"))
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   531
        root.connect('destroy', gtk.mainquit)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   532
        vbox = gtk.VBox(spacing = 3)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   533
        root.add(vbox)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   534
        vbox.show()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   535
        iview = IMMSView(self.model,self.xmms)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   536
        scroll = gtk.ScrolledWindow()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   537
        scroll.add(iview)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   538
        vbox.pack_end(scroll)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   539
        iview.show()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   540
        scroll.show()
28
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   541
        plotter = IMMSPlot(self.model)
7f61cb2ddb7b [svn] Use Python-Gnuplot instead of immsplot.
fabien
parents: 27
diff changeset
   542
        toolbar = IMMSToolbar(iview, self.xmms, plotter)
21
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   543
        vbox.pack_start(toolbar, expand = gtk.FALSE)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   544
        toolbar.show()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   545
        root.show()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   546
        toolbar.do_refresh(None)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   547
        toolbar.do_get_current(None)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   548
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   549
if __name__ == '__main__':
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   550
    app = Application()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   551
    app.main()