immsview
author fabien
Sat, 07 Feb 2004 00:30:40 -0500
branchimmsview
changeset 27 9ac26f2f83e1
parent 26 76768c12aa04
child 28 7f61cb2ddb7b
permissions -rwxr-xr-x
[svn] Now three updating function. (see IMMSStore.__init__). Currently, I'm better to replace everything. But eh, YMMV.
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
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
    23
_version_ = "$Id: immsview 1709 2004-02-07 05:30:40Z 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$
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
    26
# Revision 1.27  2004/02/07 05:30:40  fabien
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
    27
# Now three updating function. (see IMMSStore.__init__).
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
    28
# Currently, I'm better to replace everything.  But eh, YMMV.
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
    29
#
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
    30
# 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
    31
# 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
    32
# 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
    33
#
25
d59f0f20fa8a [svn] Some typos... (better take a break now...)
fabien
parents: 24
diff changeset
    34
# Revision 1.25  2004/02/07 01:21:32  fabien
d59f0f20fa8a [svn] Some typos... (better take a break now...)
fabien
parents: 24
diff changeset
    35
# Some typos... (better take a break now...)
d59f0f20fa8a [svn] Some typos... (better take a break now...)
fabien
parents: 24
diff changeset
    36
#
24
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
    37
# Revision 1.24  2004/02/07 01:18:41  fabien
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
    38
# Better like a four colors gradient.
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
    39
#
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
    40
# Revision 1.23  2004/02/07 00:53:02  fabien
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
    41
# Make a gradient of color instead...
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
    42
# I'm not sure which one I prefer however.
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
    43
#
21
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
    44
# Revision 1.22  2004/02/06 06:10:49  fabien
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
    45
# Add presentation page.
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
    46
#
20
7af7e8196170 [svn] Fix curtime until refresh.
fabien
parents: 19
diff changeset
    47
# Revision 1.21  2004/02/05 17:14:33  fabien
7af7e8196170 [svn] Fix curtime until refresh.
fabien
parents: 19
diff changeset
    48
# Fix curtime until refresh.
7af7e8196170 [svn] Fix curtime until refresh.
fabien
parents: 19
diff changeset
    49
#
19
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
    50
# 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
    51
# 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
    52
# speed improvemennt (Doh!)
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
    53
#
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
    54
# Revision 1.19  2004/02/05 07:07:38  fabien
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
    55
# Add some colors related to the rating.
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
    56
#
17
bef598558a5b [svn] Try to update the Last string dynamically... doesn't seem to work.
fabien
parents: 16
diff changeset
    57
# 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
    58
# 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
    59
#
16
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
    60
# 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
    61
# 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
    62
# 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
    63
# this song is correct.
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
    64
#
15
a967b46eec0b [svn] Used the default sort function (return 0).
fabien
parents: 14
diff changeset
    65
# Revision 1.16  2004/02/04 20:20:40  fabien
a967b46eec0b [svn] Used the default sort function (return 0).
fabien
parents: 14
diff changeset
    66
# Used the default sort function (return 0).
a967b46eec0b [svn] Used the default sort function (return 0).
fabien
parents: 14
diff changeset
    67
#
14
a678f3ef86e0 [svn] Add SQL quoting for path name.
fabien
parents: 13
diff changeset
    68
# Revision 1.15  2004/02/04 05:46:57  fabien
a678f3ef86e0 [svn] Add SQL quoting for path name.
fabien
parents: 13
diff changeset
    69
# Add SQL quoting for path name.
a678f3ef86e0 [svn] Add SQL quoting for path name.
fabien
parents: 13
diff changeset
    70
#
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
    71
# Revision 1.14  2004/02/03 21:50:28  fabien
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
    72
# Update also on double click.
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
    73
#
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
    74
# 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
    75
# 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
    76
# update it through the Db.
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
    77
#
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
    78
# 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
    79
# 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
    80
#
10
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
    81
# 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
    82
# 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
    83
#
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
    84
# 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
    85
# 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
    86
# 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
    87
#
8
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
    88
# 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
    89
# 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
    90
#
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
    91
# 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
    92
# 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
    93
#
8
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
    94
# 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
    95
# Switch to GTK2.
10
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
    96
#
8
9aa8b1c884e7 [svn] Add cvs log since I don't maintain a changelog currently.
fabien
parents: 7
diff changeset
    97
# 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
    98
# Add play selected song.
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.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
   101
# Add title.
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.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
   104
# Add current and correct plot function.
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.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
   107
# Adding xmms selection and last display.
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.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
   110
# add versioning.
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.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
   113
# Premiere version de immsview.
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   114
3
d488fff3852f [svn] Add current and correct plot function.
fabien
parents: 2
diff changeset
   115
# 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
   116
# normal
d488fff3852f [svn] Add current and correct plot function.
fabien
parents: 2
diff changeset
   117
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   118
# TODO:
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   119
# * IMMS:
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   120
#   - Add composed rating
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   121
#   - Rating edition
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   122
#   - SID grouping
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   123
#   - UID grouping!!! (yes, you can have different path with the same UID)
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   124
# * XMMS:
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   125
#   - getting current playlist
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   126
#   - editing playlist
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   127
# * File support:
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   128
#   - adding, deleting, suppressing a file (including updating other
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   129
#     interface).
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   130
#   - artist, title, genre informations (ID3)
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   131
# * Interface:
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   132
#   - Real application interface (with menu, icons, accelerators, etc.)
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   133
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   134
import pygtk
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   135
pygtk.require('2.0')
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   136
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   137
import sys
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   138
import os
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   139
import sqlite
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   140
import gobject
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   141
import gtk
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   142
import gtk.glade
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   143
import gettext
2
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   144
import xmms.control
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   145
import time
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   146
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   147
gtk.glade.bindtextdomain('immsview', '/usr/share/immsview/LANG')
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   148
gtk.glade.textdomain('immsview')
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   149
_ = gettext.gettext
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   150
2
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   151
def strtime(seconds):
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   152
    secs = abs(round(seconds))
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   153
    minutes = secs / 60;
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   154
    hours = minutes / 60;
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   155
    days = hours / 24;
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   156
    secs = secs % 60;
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   157
    minutes %= 60;
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   158
    hours %= 24;
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   159
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   160
    if seconds < 0:
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   161
            s = "-"
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   162
    else:
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   163
            s = ""
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   164
    if days >= 1:
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   165
            s += "%dd %dh" % (days, hours)
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   166
    elif hours >= 1:
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   167
            s += "%dh%02d" % (hours, minutes)
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   168
    elif minutes >= 1:
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   169
            s += "%d'%02d\"" % (minutes, secs)
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   170
    else:
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   171
            s += "%d\"" % (secs)
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   172
    return s
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   173
5
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   174
class XMMSControl:
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   175
    def __getattr__(self, name):
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   176
        return xmms.control.__dict__[name]
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   177
    def get_current_file(self):
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   178
        return self.get_playlist_file(
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   179
            self.get_playlist_pos())
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   180
    def find_in_playlist(self, filename):
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   181
        for idx in range(self.get_playlist_length()):
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   182
            if filename == self.get_playlist_file(idx):
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   183
                return idx
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   184
        return -1
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   185
    def play_file(self, filename):
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   186
        idx = self.find_in_playlist(filename)
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   187
        if idx == -1:
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   188
            self.enqueue_and_play((filename,))
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   189
        else:
c51b96c1690e [svn] Add play selected song.
fabien
parents: 4
diff changeset
   190
            self.set_playlist_pos(idx)
2
fc119540f904 [svn] Adding xmms selection and last display.
fabien
parents: 1
diff changeset
   191
14
a678f3ef86e0 [svn] Add SQL quoting for path name.
fabien
parents: 13
diff changeset
   192
def quote_sql(str):
a678f3ef86e0 [svn] Add SQL quoting for path name.
fabien
parents: 13
diff changeset
   193
    return str.replace("'", "''")
a678f3ef86e0 [svn] Add SQL quoting for path name.
fabien
parents: 13
diff changeset
   194
    
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   195
class IMMSDb:
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   196
    _dbname = os.environ['HOME'] + '/.imms/imms.db'
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   197
    # _dbname = os.environ['HOME'] + '/.imms/imms.backup.db'
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   198
    def __init__(self):
10
bc1c7546502a [svn] Add a comment about the autocommit value in db.connect()
fabien
parents: 9
diff changeset
   199
        # autocommit = 1 disable autocommit!
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
   200
        self.cx = sqlite.connect(IMMSDb._dbname, autocommit = 1,
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
   201
                                 timeout = 2, encoding = ('utf-8', 'replace'))
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   202
    def commit(self):
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
   203
        # self.cx.commit()
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
   204
        pass
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   205
    def _get_ratings(self, min = 0, max = 250):
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   206
        cu = self.cx.cursor()
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   207
        cu.execute('''SELECT Rating.uid, Rating.rating 
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   208
                   FROM Rating
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   209
                   WHERE Rating.rating >= %d
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   210
                   AND Rating.rating <= %d
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   211
                   ORDER BY Rating.rating;''' % (min, max))
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   212
        return cu.fetchall()
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   213
    def _get_library_uid(self, uid):
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   214
        cu = self.cx.cursor()
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   215
        cu.execute('''SELECT Library.path
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   216
                   FROM Library
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   217
                   WHERE Library.uid = %d;''' % (uid,))
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   218
        return cu.fetchone()
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   219
    def get_uid_by_path(self, path):
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   220
        cu = self.cx.cursor()
14
a678f3ef86e0 [svn] Add SQL quoting for path name.
fabien
parents: 13
diff changeset
   221
        cu.execute("""SELECT Library.uid FROM Library
a678f3ef86e0 [svn] Add SQL quoting for path name.
fabien
parents: 13
diff changeset
   222
                   WHERE Library.path = '%s';""" % quote_sql(path))
16
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
   223
        return map(lambda x: x[0], cu.fetchall())
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   224
    def get_ratings_and_info(self, uids = None):
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   225
    	print time.ctime(time.time()) + ": querying"
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   226
        cu = self.cx.cursor()
19
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
   227
        qry = '''SELECT l.uid, r.rating, l.path, ls.last
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
   228
                   FROM Library l, Rating r, Last ls
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
   229
                   WHERE l.uid = r.uid AND l.sid = ls.sid'''
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   230
        if uids:
19
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
   231
            qry += ' AND (l.uid = %d' % (uids.pop())
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   232
            for uid in uids:
19
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
   233
                qry += ' OR l.uid = %d' % uid
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
   234
            qry += ')'
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
   235
        qry += ';'
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   236
        cu.execute(qry)
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   237
        # Better to fetch everything since locking can really mess
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   238
        # things in imms plugin.
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   239
    	print time.ctime(time.time()) + ": mapping"
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   240
	results = {}
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   241
	tune = cu.fetchone()
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   242
        while tune:
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   243
            try:
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   244
                uid = int(tune[0])
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   245
                if results.has_key(uid):
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   246
                    results[uid]['path'].append(
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   247
                        tune[2].decode('utf-8', 'replace'))
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   248
                else:
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   249
                    results[uid] = {
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   250
                        'rating' : int(tune[1]),
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   251
                        'path' : [ tune[2].decode('utf-8', 'replace') ],
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   252
                        'last' : int(tune[3])}
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   253
            except UnicodeDecodeError:
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   254
                print tune[2]
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   255
	    tune = cu.fetchone()
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   256
        return results
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   257
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   258
_gdk_colors = []
24
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   259
for i in range(76):
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   260
    if i <= 25:
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   261
        red = 255
25
d59f0f20fa8a [svn] Some typos... (better take a break now...)
fabien
parents: 24
diff changeset
   262
        green = i * 255 / 25
24
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   263
        blue = 0
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   264
    elif i <= 50:
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   265
        red = (50-i) * 255 / 25
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   266
        green = 255
24
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   267
        blue = 0
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   268
    else:
25
d59f0f20fa8a [svn] Some typos... (better take a break now...)
fabien
parents: 24
diff changeset
   269
        red = 0
24
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   270
        green = 255
afde1bb91a7f [svn] Better like a four colors gradient.
fabien
parents: 22
diff changeset
   271
        blue = (i-50) * 255 / 25    
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   272
    _gdk_colors.append("#%02X%02X%02X" % (red, green, blue))
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   273
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   274
def rating_to_color(rate):
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   275
    rate = min(max(rate,75),150)
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   276
    return _gdk_colors[rate-75]
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   277
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   278
# This class must be derived from a GtkTreeModel
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   279
# with persistent GtkTreeIter !!!
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   280
class IMMSStore(gtk.ListStore):
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   281
    COL_RATING = 0
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   282
    COL_PATH = 1
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   283
    COL_LAST_STR = 2
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   284
    COL_LAST = 3
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   285
    COL_SELECT = 4
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   286
    COL_UID = 5
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   287
    COL_RATING_COLOR = 6
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   288
    def __init__(self, db):
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   289
        gtk.ListStore.__init__(self,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   290
                               gobject.TYPE_INT,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   291
                               gobject.TYPE_STRING,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   292
                               gobject.TYPE_STRING,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   293
                               gobject.TYPE_INT,
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   294
                               gobject.TYPE_BOOLEAN,
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   295
                               gobject.TYPE_INT,
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   296
                               gobject.TYPE_STRING,
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   297
                               )
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   298
        self.db = db
15
a967b46eec0b [svn] Used the default sort function (return 0).
fabien
parents: 14
diff changeset
   299
        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
   300
        self.set_sort_column_id(IMMSStore.COL_RATING, gtk.SORT_DESCENDING)
20
7af7e8196170 [svn] Fix curtime until refresh.
fabien
parents: 19
diff changeset
   301
        self.curtime = time.time()
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   302
        # Only refresh last and rating. 6 / 17
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   303
        # self._update_me = self.refresh
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   304
        # Try to recycle old giter. 6 / 11
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   305
        # self._update_me = self.recycle
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   306
        # Replace everything. 6 / 7
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   307
        self._update_me = self.replace 
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   308
    def default_sort(self, a, b, dummy):
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   309
        return 0
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   310
    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
   311
        if path:
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   312
            for fn in tune['path']:
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   313
                if fn == path:
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   314
                    break
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   315
            else:
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   316
                fn = tune['path'][0]
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   317
        else:
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   318
            fn = tune['path'][0]
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   319
        if not giter:
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   320
            giter = self.append(None)
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   321
        self.set(giter,
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   322
                 IMMSStore.COL_UID, uid,
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   323
                 IMMSStore.COL_RATING, tune['rating'],
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   324
                 IMMSStore.COL_PATH, fn,
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   325
                 IMMSStore.COL_LAST, tune['last'],
20
7af7e8196170 [svn] Fix curtime until refresh.
fabien
parents: 19
diff changeset
   326
                 IMMSStore.COL_LAST_STR, strtime(self.curtime-tune['last']),
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   327
                 IMMSStore.COL_RATING_COLOR, rating_to_color(tune['rating']),
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   328
                 IMMSStore.COL_SELECT, gtk.FALSE)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   329
        return giter
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   330
    def update(self):
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   331
        self.curtime = time
20
7af7e8196170 [svn] Fix curtime until refresh.
fabien
parents: 19
diff changeset
   332
        self.curtime = time.time()
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   333
        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
   334
	if col:
19
c01d2690b458 [svn] Remove the useless ORDER BY from the query for
fabien
parents: 18
diff changeset
   335
        	self.set_sort_column_id(-1, gtk.SORT_ASCENDING)
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   336
        tunes = self.db.get_ratings_and_info()
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   337
	print time.ctime(time.time()) + ": inserting"
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   338
        self._update_me(tunes)
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   339
	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
   340
	if col:
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
   341
        	self.set_sort_column_id(col, order)
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   342
    def replace(self, tunes):
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   343
        "replace simply replace all giter with new one"
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   344
        self.clear()
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   345
        for uid, tune in tunes.iteritems():
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   346
            self.tune_to_giter(uid, tune)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   347
    def recycle(self, tunes):
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   348
        "Recycle old giter, replacing old data."
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   349
        giter = self.get_iter_first()
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   350
        for uid, tune in tunes.iteritems():
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   351
            self.tune_to_giter(uid, tune, giter = giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   352
            if giter:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   353
                giter = self.iter_next(giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   354
        while giter:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   355
            next = self.iter_next(giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   356
            self.remove(giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   357
            giter = next
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   358
    def refresh(self, tunes):
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   359
        "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
   360
        freed_giters = []
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   361
        # first, try to recycle current giter.
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   362
        giter = self.get_iter_first()
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   363
        while giter:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   364
            # check if giter exist in DB.
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   365
            guid = self.get_value(giter, IMMSStore.COL_UID)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   366
            if tunes.has_key(guid):
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   367
                tune = tunes[guid]
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   368
                self.set(giter,
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   369
                         IMMSStore.COL_RATING, tune['rating'],
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   370
                         IMMSStore.COL_LAST, tune['last'],
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   371
                         IMMSStore.COL_LAST_STR,
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   372
                         strtime(self.curtime-tune['last']),
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   373
                         IMMSStore.COL_RATING_COLOR,
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   374
                         rating_to_color(tune['rating']))
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   375
            else:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   376
                # Elsewhere, collect them for further use...
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   377
                # Hopefully, ListStore have persistent giter!
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   378
                freed_giters.append(giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   379
            giter = self.iter_next(giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   380
        # populate the remeaning tunes into the collected giters
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   381
        for uid, tune in tunes.iteritems():
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   382
            if len(freed_giters) > 0:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   383
                giter = freed_giters.pop()
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   384
            else:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   385
                giter = None
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   386
            self.tune_to_giter(uid, tune, None, giter)
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   387
        # then erase the remeaning giter.
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   388
        for giter in freed_giters:
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   389
            self.remove(giter)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   390
    def find_selected_giter(self):
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   391
        giter = self.get_iter_first()
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   392
        while giter:
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   393
            if self.get_value(giter, IMMSStore.COL_SELECT):
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   394
                break
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   395
            giter = self.iter_next(giter)
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   396
        return giter
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   397
    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
   398
        giter = self.get_iter_first()
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   399
        while giter:
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   400
            if self.get_value(giter, IMMSStore.COL_UID) == uid:
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   401
                break
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   402
            giter = self.iter_next(giter)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   403
        return giter
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   404
    def find_giter_from_path(self, song):
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   405
        uids = self.db.get_uid_by_path(song)
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   406
        if len(uids) == 0:
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   407
            return None
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   408
        uid = uids[0]
16
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
   409
        giter = self.find_giter_from_uid(uid)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   410
        if not giter:
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   411
            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
   412
            if tunes > 0:
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   413
                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
   414
	else:
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   415
            giter = self.update_giter(giter, song)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   416
        return giter
26
76768c12aa04 [svn] Display only distinct UID. The path selected is arbitrary, but
fabien
parents: 25
diff changeset
   417
    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
   418
        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
   419
        tunes = self.db.get_ratings_and_info([uid,])
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   420
        if len(tunes) > 0:
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   421
            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
   422
        return giter
17
bef598558a5b [svn] Try to update the Last string dynamically... doesn't seem to work.
fabien
parents: 16
diff changeset
   423
##     def get_value(self, giter, col):
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   424
##         # 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
   425
##         if col == IMMSStore.COL_LAST_STR:
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   426
##             return strtime(time.time() -
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   427
##                            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
   428
##         else:
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   429
##             return gtk.ListStore.get_value(self, giter, col)
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   430
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   431
class IMMSView(gtk.TreeView):
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   432
	def __init__(self, model, xmms):
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   433
            gtk.TreeView.__init__(self, model)
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   434
            self.xmms = xmms
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   435
            self.create_widgets()
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   436
	def create_widgets(self):
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   437
            renderer = gtk.CellRendererText()
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   438
            renderer.set_property('weight', 700)
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   439
            renderer.set_property('background-set', gtk.TRUE)
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   440
            column = gtk.TreeViewColumn(_("Rating"), renderer,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   441
                                        weight_set = IMMSStore.COL_SELECT,
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   442
                                        background = IMMSStore.COL_RATING_COLOR,
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   443
                                        text = IMMSStore.COL_RATING)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   444
            column.set_sort_column_id(IMMSStore.COL_RATING)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   445
            self.append_column(column)
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   446
            
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   447
            renderer = gtk.CellRendererText()
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   448
            renderer.set_property('weight', 700)            
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   449
            # 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
   450
            column = gtk.TreeViewColumn(_("Last"), renderer,
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   451
                                        weight_set = IMMSStore.COL_SELECT,
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   452
                                        text = IMMSStore.COL_LAST_STR)
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   453
            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
   454
            self.append_column(column)
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   455
            column = gtk.TreeViewColumn(_("File"), renderer,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   456
                                        weight_set = IMMSStore.COL_SELECT,
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   457
                                        text = IMMSStore.COL_PATH)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   458
            column.set_resizable(gtk.TRUE)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   459
            column.set_sort_column_id(IMMSStore.COL_PATH)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   460
            self.append_column(column)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   461
            self.set_search_column(IMMSStore.COL_PATH)
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   462
            self.set_headers_clickable(gtk.TRUE)
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   463
            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
   464
        def set_current_song(self, song):
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   465
            model = self.get_model()
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   466
            giter = model.find_selected_giter()
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   467
            if giter:
16
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
   468
	    	model.update_giter(giter)
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   469
                model.set_value(giter, IMMSStore.COL_SELECT, gtk.FALSE)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   470
            giter = model.find_giter_from_path(song)
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   471
            if giter:
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   472
                model.set_value(giter, IMMSStore.COL_SELECT, gtk.TRUE)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   473
                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
   474
        def get_filename(self, giter):
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   475
            model = self.get_model()
16
894cac760e29 [svn] Update the current song. This slow down thing a bit (any querying
fabien
parents: 15
diff changeset
   476
            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
   477
            try:
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   478
                os.stat(fn)
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   479
            except OSError:
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   480
                return None
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   481
            return fn
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   482
        def get_file_selected(self):
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   483
            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
   484
            if giter:
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   485
                return self.get_filename(giter)
7
c5c0a84bb15b [svn] All functions are now implemented (with a somewhat "cleaner" interface.
fabien
parents: 6
diff changeset
   486
            return None
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   487
        def on_row_activated(self, tview, path, col):
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   488
            model = self.get_model()
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   489
            giter = model.get_iter(path)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   490
            fn = self.get_filename(giter)
12
d275de5d2be2 [svn] Play selected: check if the file exist, elsewhere try to
fabien
parents: 11
diff changeset
   491
            self.set_current_song(fn)
13
02c10487e5a0 [svn] Update also on double click.
fabien
parents: 12
diff changeset
   492
            self.xmms.play_file(fn)
11
2913cf0e73e2 [svn] Add double click and remove sorting when refreshing data.
fabien
parents: 10
diff changeset
   493
6
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   494
ad5b932e411d [svn] Switch to GTK2.
fabien
parents: 5
diff changeset
   495
class IMMSToolbar(gtk.Toolbar):
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
   496
    # _IMMSPLOT_COMMAND = 'immsplot &'
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
   497
    _IMMSPLOT_COMMAND = '/home/fabien/bin/immsplot &'
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   498
    _SLEEP_TIME = 5
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 __init__(self, iview, xmms):
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
        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
   501
        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
   502
        self.xmms = xmms
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
   503
        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
   504
    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
   505
        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
   506
                         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
   507
        self.append_item(_('Plot'), _('Show graph of rates'),
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
                         None, None, self.plot)
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
        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
   510
                         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
   511
        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
   512
                         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
   513
        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
   514
                         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
   515
        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
   516
                         None, None, self.do_play_next)
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
   517
    def plot(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
   518
        os.system(self._IMMSPLOT_COMMAND)
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
   519
    def do_refresh(self, dummy):
27
9ac26f2f83e1 [svn] Now three updating function. (see IMMSStore.__init__).
fabien
parents: 26
diff changeset
   520
            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
   521
    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
   522
        song = self.xmms.get_current_file()
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
   523
        self.iview.set_current_song(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
   524
    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
   525
        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
   526
        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
   527
            self.xmms.play_file(fn)
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   528
        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
   529
        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
   530
    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
   531
        self.xmms.playlist_prev()
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   532
        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
   533
        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
   534
    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
   535
        self.xmms.playlist_next()
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   536
        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
   537
        self.do_get_current(dummy)
18
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   538
    def sleep(self, secs):
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   539
	start = time.time()
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   540
	while (time.time() - start) < secs:
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   541
		time.sleep(0.2)
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   542
		if gtk.main_iteration_do(gtk.FALSE):
cce22ab553d1 [svn] Add some colors related to the rating.
fabien
parents: 17
diff changeset
   543
			break;
0
fab56cacf4bc [svn] Premi��re version de immsview.
fabien
parents:
diff changeset
   544
21
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   545
class Application:
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   546
    def __init__(self):
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   547
        self.xmms = XMMSControl()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   548
        self.db = IMMSDb()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   549
        self.model = IMMSStore(self.db)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   550
    def main(self):
22
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   551
        self.create_widgets()
7441fc82f74d [svn] Make a gradient of color instead...
fabien
parents: 21
diff changeset
   552
        gtk.mainloop()
21
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   553
    def create_widgets(self):
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   554
        root = gtk.Window()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   555
        root.set_title(_("IMMSView"))
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   556
        root.connect('destroy', gtk.mainquit)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   557
        vbox = gtk.VBox(spacing = 3)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   558
        root.add(vbox)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   559
        vbox.show()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   560
        iview = IMMSView(self.model,self.xmms)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   561
        scroll = gtk.ScrolledWindow()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   562
        scroll.add(iview)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   563
        vbox.pack_end(scroll)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   564
        iview.show()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   565
        scroll.show()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   566
        toolbar = IMMSToolbar(iview, self.xmms)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   567
        vbox.pack_start(toolbar, expand = gtk.FALSE)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   568
        toolbar.show()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   569
        root.show()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   570
        toolbar.do_refresh(None)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   571
        toolbar.do_get_current(None)
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   572
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   573
if __name__ == '__main__':
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   574
    app = Application()
8ccee783880a [svn] Add presentation page.
fabien
parents: 20
diff changeset
   575
    app.main()