File: ChangeLog

package info (click to toggle)
gpodder 0.12.1-1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 1,808 kB
  • ctags: 792
  • sloc: python: 6,749; makefile: 158; sh: 28; sed: 4
file content (3004 lines) | stat: -rw-r--r-- 139,347 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
Thu, 24 Jul 2008 10:50:08 +0200 <thp@perli.net>
gPodder 0.12.1 "The Little People" released

	* bin/gpodder: gPodder 0.12.1 released
	* data/messages.pot: Updated from source
	* data/po/de.po: Updated German translation
	* data/po/*.po: Updated from messages.pot
	* doc/man/gpodder.1: gPodder 0.12.1 released
	* README: gPodder 0.12.1 released

Mon, 21 Jul 2008 23:34:47 +0200 <thp@perli.net>
Updated French translation

	* data/po/fr.po: Updated French translation (by Jerome Chabod)

Mon, 21 Jul 2008 23:33:26 +0200 <thp@perli.net>
Fix problems with command-line mode not working correctly

	* src/gpodder/console.py: Fix problems with new code when using
	"gpodder --run"; thanks to Mykola Nikishov <mn@mn.com.ua> for
	reporting this bug on the Debian Bug Tracker (#491696)

Tue, 15 Jul 2008 15:15:42 -0400 <me@nikosapi.org>
Fix Device traceback when syncing (reported by: FriedBunny)

	* src/gpodder/sync.py: forgot to rename _track_on_device() in 
	Device.episode_on_device()

Tue, 15 Jul 2008 10:21:39 +0200 <thp@perli.net>
gPodder 0.12.0 "Metropolis" released

	* bin/gpodder: gPodder 0.12.0 released
	* data/messages.pot: Updated for the 0.12.0 release
	* data/po/de.po: Updated for the 0.12.0 release
	* data/po/*.po: Updated from messages.pot
	* doc/man/gpodder.1: gPodder 0.12.0 released
	* README: gPodder 0.12.0 released, mention pysqlite2 for Py2.4

Tue, 15 Jul 2008 10:08:16 +0200 <thp@perli.net>
Fix bugs and annoyances when no channels.opml file exists

	* src/gpodder/opml.py: Make sure can save a new channels.opml file
	when no other file exists, and make sure we don't try to parse a file
	that does not exist when opening OPML files

Tue, 15 Jul 2008 10:06:19 +0200 <thp@perli.net>
Do not hide podcast cover and pill pixbuf in podcast list by default

	* src/gpodder/config.py: Change default settings

Tue, 15 Jul 2008 09:54:57 +0200 <thp@perli.net>
Support saving multiple episodes to disk (reported by: O. Emmerson)

	* src/gpodder/gui.py: Make sure that we support saving multiple
	selections for the "Save to disk" context menu item

Mon, 14 Jul 2008 15:18:04 -0400 <me@nikosapi.org>
Always show downloaded episodes (Patch from Justin Forest)

	* src/gpodder/dbsqlite.py: Include downloaded episodes even when they 
	go beyond the episode limit.  e.g., when you have 
	gl.max_episodes_per_feed set to 10, but there are 20 downloaded ones
	already.  With this patch, all 20 episodes are displayed.

Mon, 14 Jul 2008 12:31:15 -0400 <me@nikosapi.org>
Merge patch to fix bug #122 (Day of week Released date not computed correctly)

	* src/gpodder/libpodcasts.py: use rfc822.mktime_tz() to convert
	timestamps from feedparser's _parse_date() function to seconds from
	the epoch (in UTC instead of the local timezone)
	* src/gpodder/util.py: fix util.format_date() so that when it reports
	'Today', it means the timestamp is from after 00:00 local time

Mon, 14 Jul 2008 12:21:37 -0400 <me@nikosapi.org>
Merge patch to fix bug #125 (Deleting a podcast while checking for new
episodes allows a second concurrent sync.)

	* src/gpodder/gui.py: make update_feed_cache() check if the feed cache
	is being updated before allowing an update to take place

Sun, 13 Jul 2008 15:32:22 -0400 <me@nikosapi.org>
Fix python 2.4 crash (reported by: Wilfred van Rooijen)

	* src/gpodder/draw.py: change ".5 if close else 0" to valid python
	2.4 syntax

Sun, 13 Jul 2008 15:19:39 -0400 <me@nikosapi.org>
Fix MP3PlayerDevice traceback when syncing (reported by: Wilfred van Rooijen)

	* src/gpodder/sync.py: make Device.__track_on_device() non-private

Sat, 12 Jul 2008 14:12:11 +0200 <jerome.chabod@ifrance.com>
Merge patch to fix bug #149 (Remove Old Podcasts does not always have enabled 
delete button)

	* src/gpodder/gui.py: Use count of selected episodes instead of total
	size to activate action button in episode selector (episodes with
	unknow size have a total size of zero) 

Fri, 11 Jul 2008 14:11:08 -0400 <me@nikosapi.org>
Merge patch to fix bug #147 (Sync doesn't work)

	* src/gpodder/gui.py: Use Device.episode_on_device(episode) to retrive
	device_episode and simplify logic to determine whether an episode is on
	the device and eligible for removal
	* src/gpodder/sync.py: Add Device.episode_on_device(episode)

Fri, 11 Jul 2008 13:09:55 -0400 <me@nikosapi.org>
Update podcast tab title when adding or removing channels

	* src/gpodder/gui.py: Add update_podcasts_tab() and call it when a
	channel is added or removed

Thu, 10 Jul 2008 23:54:57 +0200 <thp@perli.net>
Update list of donators

	* src/gpodder/gui.py: Update list of donators

Thu, 10 Jul 2008 23:49:12 +0200 <thp@perli.net>
Don't warn the user when timestamp is None

	* src/gpodder/util.py: Don't warn the user when timestamp is None in
	gpodder.util.format_date; Thanks to Bernd Schlapsi for reporting this
	bug (Closes: http://bugs.gpodder.org/show_bug.cgi?id=148)

Wed, 09 Jul 2008 12:19:26 +0200 <thp@perli.net>
Simply advanced configuration editor, implement usability suggestions

	* data/gpodder.glade: Implement usability suggestions from
	http://gpodder.org/files/user_test_2008-05.pdf: Rename "Player" tab in
	preferences to "Device"; change "Filter:" to "Search for:" in advanced
	configuration editor
	* src/gpodder/config.py: Support code for changes in the advanced
	configuration editor dialog (model)
	* src/gpodder/gui.py: Modify the advanced configuration editor to have
	check boxes for boolean values, remove the "Type" column and rename
	the columns as suggested by the May 2008 user test; use italic font
	instead of bold for values set to something other than the default

Tue, 08 Jul 2008 21:25:24 -0400 <me@nikosapi.org>
Merge check free space before syncing patch

	* src/gpodder/gui.py: Display a dialog box informing the user in the
	event that there is insufficient free space on their device before
	syncing begins.
	* src/gpodder/sync.py: Added Device.tracks_list which is populated by
	Device.get_all_tracks() when Device.open() is called. 
	Added Device.episode_on_device(episode)
	Added Device.get_free_space()

Tue, 08 Jul 2008 21:10:48 -0400 <me@nikosapi.org>
Small bugfixes

	* src/gpodder/gui.py: for bluetooth file transfer make sure
	episode.sync_filename()	doesn't contain any troublesome characters
	eg. some episodes include / in the title
	* src/gpodder/libpodcasts.py: comment out mimetype logging, it gets
	annoying after a while...
	* src/gpodder/util.py: remove "path = os.path.dirname(path)" from
	get_free_disk_space(path), this prevented the real free disk space
	from being reported

Sun, 06 Jul 2008 23:11:33 +0200 <thp@perli.net>
Update book donators list

	* src/gpodder/gui.py: Add PhilF to list of book donators

Sat, 05 Jul 2008 15:23:55 -0400 <me@nikosapi.org>
Support episodes without a guid during migration (patch from Justin Forest)

	* src/gpodder/dbsqlite.py: Don't raise an exception if an episode is
	missing a guid
	* src/gpodder/libpodcasts.py: Make sure that episodes from LocalDBReader
	always contain some kind of guid

Fri, 04 Jul 2008 13:25:12 -0400 <me@nikosapi.org>
	* src/gpodder/gui.py: fix traceback when deleting episodes from device

Fri, 04 Jul 2008 18:47:19 +0200 <thp@perli.net>
New look for the "pill" pixbuf

	* src/gpodder/draw.py: Refresh the look of the "pill" pixbuf code, so
	we have a more visually pleasing status display in the podcast list

Thu, 03 Jul 2008 20:09:18 -0400 <me@nikosapi.org>
Display message if user tries to sync to iPod without gpod installed

	* src/gpodder/gui.py: Add an informative self.notification() if the user
	attempts to sync an iPod without the libgpod python bindings installed
	* src/gpodder/sync.py: Add sync.gpod_available, Add Device.errors to
	prevent a crash in the event of an error

Thu, 03 Jul 2008 20:26:50 +0200 <thp@perli.net>
Update list of book donators

	* src/gpodder/gui.py: Add Franz Seidl to list of book donators

Tue, 01 Jul 2008 22:46:52 -0400 <me@nikosapi.org>
Better file extension detection using feed items' mimetypes

	* src/gpodder/gui.py: Use episode.file_type() instead of 
	util.file_type_by_extension(util.file_extension_from_url(url))
	* src/gpodder/libgpodder.py: Use episode.file_type() instead of          
	util.file_type_by_extension(util.file_extension_from_url(url))
	* src/gpodder/libpodcasts.py: Add new column to the channel list
	gtk.ListStore for holding the file extension. Add extension()
	function to podcastItem which makes use mimetype in the event that
	filename_from_url()[1] returns None
	* src/gpodder/util.py: file_extension_from_url is renamed to 
	filename_from_url and returns (filename, extension)
	Added extension_from_mimetype(mimetype)

Mon, 30 Jun 2008 17:39:36 +0200 <thp@perli.net>
Do not update podcast list when closing channel window (patch by Justin Forest)

	* src/gpodder/gui.py: Do not update podcast list when closing the
	channel window, saves some CPU cycles. Patch by Justin Forest
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=135)

Sun, 29 Jun 2008 16:59:30 -0400 <me@nikosapi.org>
Merge patch from Justin Forest and Thomas Perl:
- Use SQLite instead of cPickle to store all data, including feed summary
and entries, download and play history. 
- Migration assistant to import the old cPickle files in to the SQLite DB
	* src/gpodder/cache.py: SQLite-related accomodations 
	* src/gpodder/console.py: SQLite-related accomodations
	* src/gpodder/dbsqlite.py: New file, SQLite interface for gPodder
	* src/gpodder/gui.py: Lots of changes to accomodate the new SQLite
	DB + new migration assistant code
	* src/gpodder/libgpodder.py: Added gPodderLib.migrate_to_sqlite().
	HistoryStore and ChannelSettings are marked as DEPRECATED
	* src/gpodder/libpodcasts.py: SQLite-related accomodations and new 
	code for setting/determining episode state
	* src/gpodder/sync.py: SQLite-related accomodations
	* src/gpodder/trayicon.py: Use episode.was_downloaded() instead
	of episode.is_downloaded()
	* src/gpodder/util.py: SQLite-related accomodations

Sun, 29 Jun 2008 16:15:54 +0200 <jerome.chabod@ifrance.com>
Fix a bug in shutil when moving the download directory bug (#8)

	* src/gpodder/libgpodder.py: When the shutil.move() bug is detected 
	(an NameError is thrown when moving from an ext file sytem to a 
	fat or ntfs filesystem, see http://bugs.python.org/issue2549), 
	the error is ignored, then the previous directory is removed 
	by a system call to "rm"

Thu, 19 Jun 2008 10:50:11 +0200 <thp@perli.net>
Fix OPML dialog button sensitivity; sensitivity+totals for Episode Selector

	* src/gpodder/gui.py: Fix the sensitivity setting of the OPML lister
	when using the "Select All"/"Select None" buttons; add button
	sensitivity setting code to Episode Selector and add episode count

Thu, 19 Jun 2008 09:46:38 +0200 <thp@perli.net>
Fix alignment of "pill" pixbuf

	* src/gpodder/gui.py: Align the "pill" pixbuf all to the right

Thu, 19 Jun 2008 09:30:53 +0200 <thp@perli.net>
Use as much space as possible for podcast title and description

	* src/gpodder/gui.py: Hide the "pill" pixbuf cell when we don't have a
	value to display, so we can show more of the channel title +
	description
	* src/gpodder/libpodcasts.py: Add a new boolean value to tell the
	treeview column if we need to show the "pill" cell or not

Tue, 17 Jun 2008 19:41:33 -0400 <me@nikosapi.org>
Add 'Select All' and 'Select None' buttons to gPodderOpmlLister

	* data/gpodder.glade: add 'Select All' and 'Select None' buttons to 
	the the bottom-left of the gPodderOpmlLister window
	* src/gpodder/gui.py: add button signal handlers and a function
	( select_all(bool) ) to facilitate selecting all or no channels

Tue, 17 Jun 2008 14:49:12 +0200 <thp@perli.net>
Make handling pubDates a bit safer when reading it externally

	* src/gpodder/libpodcasts.py: Make handling of pubDates a bit more
	secure and easier
	* src/gpodder/gui.py: Add Daniel Ramos to list of donators and bug
	reporters

Sun, 15 Jun 2008 14:44:29 +0200 <thp@perli.net>
Merge "Allows user command execution after certain events" from Paul Rudkin

	* src/gpodder/config.py: Add two new configuration options:
	cmd_all_downloads_complete and cmd_download_complete
	* src/gpodder/download.py: Call the user-specific command when a
	download finishes (if configured)
	* src/gpodder/gui.py: If all downloads have been completed, execute
	the user-specific command (if configured)
	* src/gpodder/libgpodder.py: Add ext_command_thread function that
	handles calling an external command
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=4)

Sun, 15 Jun 2008 14:23:40 +0200 <thp@perli.net>
Support tooltips for the episode list; improve tooltip appearance

	* src/gpodder/gui.py: Add tooltips to treeAvailable (episode list);
	avoid showing tooltips while the context menu of the treeChannels and
	treeAvailable is open, so the tooltip doesn't appear over the context
	menu; add Sebastian Krause to list of bug reporters
	* src/gpodder/util.py: Try to convert some HTML tags to text-only
	characters (<br> to newline, <li> to a "*", etc..) so the description
	of an episode is easier to read and looks more structured; also,
	convert more than two subsequent newlines to maximum two newlines
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=126)

Sat, 14 Jun 2008 12:29:11 -0400 <me@nikosapi.org>
	* src/gpodder/libpodcasts.py: make LocalDBReader and LocalDBWriter
	read/save the episode mimetype attribute in the LocalDB. This 
	prevents the mimetype attribute from being set to 
	'application/octet-stream' after a file is downloaded.

Sat, 14 Jun 2008 18:50:29 +0200 <thp@perli.net>
Improve performance related to pubDate parsing; Download button; update feeds

	* src/gpodder/gui.py: Notify user when we are building the list of
	channels instead of staying at "updating [last feed]".; Make the "OK"
	button of the gPodderEpisodeSelector a "Downlaod" button, because
	that's what the button does when clicking it - downloading episodes
	* src/gpodder/libpodcasts.py: pubDate is now an Unix timestamp
	everywhere and not a string, which has to be parsed quite often; Fix
	up and improve the creation of the channel list model
	* src/gpodder/sync.py: Customizations for the new pubDate code
	* src/gpodder/util.py: Remove updated_parsed_to_rfc2822, because we
	don't need it anymore with the new pubDate code

Sat, 14 Jun 2008 15:56:53 +0200 <thp@perli.net>
Make things less verbose and fix a problem with cover art handling

	* src/gpodder/gui.py: Fix problem when trying to remove a non-existent
	podcast cover art from the cache; make things less verbose
	* src/gpodder/*.py: Make things less verbose

Sat, 14 Jun 2008 15:16:09 +0200 <thp@perli.net>
Detect HTML and OPML content when adding a podcast subscription

	* src/gpodder/gui.py: Detect HTML and OPML content when adding a
	podcast feed that is not parseable by feedparser; when the content
	suggests the file is an OPML file, open the OPML dialog, when it looks
	like an HTML file, ask the user if she wants to browse the content
	with the web browser and look for a suitable XML/feed URL
	(This fixes the first suggestion in the May 2008 Usability Evaluation)

Fri, 13 Jun 2008 21:32:57 +0200 <thp@perli.net>
Automatically download channel cover file; improve channel cover handling

	* data/gpodder.glade: Simplify and clean-up the podcast editor dialog,
	especially with respect to the cover art stuff
	* src/gpodder/config.py: Add configuration option
	"podcast_list_icon_size" that determines the pixel size of the cover
	art displayed in the podcast list
	* src/gpodder/gui.py: Add cover cache, register with the cover
	downloader service in the main window, handle messages from the cover
	downloader (removed and download finished); request covers for
	channels when refreshing the channel list; make sure drag'n'drop of
	image files to the channel list works directly and sets the
	corresponding channel cover; Rework cover download handling and add an
	open dialog as suggested by the May 2008 Usability Evaluation
	* src/gpodder/libgpodder.py: Remove old, attic image downloading code
	from gPodderLib, because it now has its own service class
	* src/gpodder/libpodcasts.py: Remove unneeded get_cover_pixbuf helper
	function for podcastChannel; improve channels_to_model to take
	advantage of the new cover downloader service
	* src/gpodder/services.py: Add CoverDownloader service that acts as a
	central hub for all downloading and modifying of channel cover art,
	including notification of observers (through ObservableService)
	* src/gpodder/util.py: Add resize_pixbuf_keep_ratio helper function to
	resize a gtk pixbuf while keeping the aspect radio (with optional
	caching support through a dictionary parameter)
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=88)

Fri, 13 Jun 2008 20:10:13 +0200 <thp@perli.net>
Fix a bug in the experimental file naming support

	* src/gpodder/util.py: Fix bug that stopped the experimental file
	naming patch from working; thanks to Shane Donohoe for reporting

Fri, 13 Jun 2008 16:08:16 +0200 <thp@perli.net>
Merge patch to add experimental support for "normal" file naming

	* src/gpodder/config.py: New option "experimental_file_naming" that
	defaults to False and enables the new (but experimental!) normal file
	naming mode in which the downloaded podcast episodes get their name
	not from the md5sum of the download URL, but from the basename of the
	download URL, which makes filenames more human-readable
	* src/gpodder/libpodcasts.py: Change local_filename() in podcastItem
	to decide if we use md5sums or the "new" file naming mode for creating
	the local file name of an episode
	* src/gpodder/sync.py: Change usage of the "encoding" detection in
	gpodder.util (from detect_os_encoding() to simply encoding)
	* src/gpodder/util.py: Only detect the filename encoding once (at
	program start) and then make it accessible via a global "encoding"
	variable in the gpodder.util module; add improvements to
	file_extension_from_url() to be able to return the complete filename
	and to support more creative URL schemes as implemented by podcast
	feed authors (this hopefully makes more feeds work in a proper way)
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=57)

Fri, 13 Jun 2008 14:27:30 +0200 <thp@perli.net>
Merge patch from Justin Forest to speed up pubDate detection

	* src/gpodder/gui.py: Add Justin Forest to the list of contributors
	and make sure we clear the pubDate cache in the channel when changing
	episode downloaded status manually
	* src/gpodder/libpodcasts.py: Merge patch from Justin Forest to speed
	up the newest_pubdate_downloaded() function by caching its value
	instead of re-calculating it on every call
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=124)

Fri, 13 Jun 2008 09:37:45 +0200 <thp@perli.net>
Merge patch from Nick to add support for deleting played files on sync

	* data/gpodder.glade: Add check button for "Delete episodes on device
	that have been marked played in gPodder"
	* src/gpodder/config.py: Add two new config options:
	"mp3_player_delete_played" and "mp3_player_max_filename_length"
	* src/gpodder/gui.py: 
	* src/gpodder/libpodcasts.py: Add "is_deleted()" convenience function
	for a podcast episode
	* src/gpodder/sync.py: Clean-up and simplify parts of the code to make
	it better-structured and avoid code duplication; use the configuration
	variable for the MAX_FILENAME_LENGTH instead of hard-coding it to 100
	* src/gpodder/util.py: Split sanitize_filename() into two functions,
	detect_os_encoding() and sanitize_filename() for better code re-use
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=56; code written by
	Nick (nikosapi) and initial idea by Shane Donohoe, see the bug page)

Sun, 08 Jun 2008 20:08:58 +0200 <thp@perli.net>
Patch from Jérôme Chabod to fix "minimize on start" bug (#123)

	* src/gpodder/gui.py: Patch from Jérôme Chabod to fix "minimize on
	start" bug by moving the minimizing code after the "show window" code
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=123)

Sun, 08 Jun 2008 20:06:51 +0200 <thp@perli.net>
Updated Portuguese translation by João Paulo Pinto Trindade

	* data/po/pt.po: Updated PT translation by João Paulo Pinto Trindade

Thu, 05 Jun 2008 18:16:05 +0200 <thp@perli.net>
Improve/fix podcast list tooltips as suggested by the Usability Test

	* src/gpodder/gui.py: Restructure and redesign the podcast list
	according to the suggestions in the Usability Test
	* src/gpodder/libpodcasts.py: Add helping code for the new tooltips

Thu, 05 Jun 2008 18:12:20 +0200 <thp@perli.net>
New (optional) dependency: PIL (for Rockbox Cover Art)

	* README: Mention PIL as dependency for Rockbox Cover Art

Thu, 05 Jun 2008 18:10:11 +0200 <thp@perli.net>
Merge Support for Rockbox Cover Art patch (by David Spreen and Nick)
	* src/gpodder/config.py: Add configuration options for rockbox cover
	art, thanks to Nick for providing the patch and integration
	* src/gpodder/gui.py: Add David Spreen to the list of contributors
	* src/gpodder/sync.py: Merge patch from David Spreen and Nick to
	support Rockbox cover art synchronization

Sun, 01 Jun 2008 10:17:32 +0200 <thp@perli.net>
Merge back changes from the 0.11.3 release branch into trunk

	* bin/gpodder: Updated for 0.11.3+svn
	* data/messages.pot: Merged from 0.11.3 release branch
	* data/po/*.po: Merged from 0.11.3 release branch
	* doc/man/gpodder.1: Merged from 0.11.3 release branch
	* README: Merged from 0.11.3 release branch

Sun, 25 May 2008 17:17:10 +0200 <thp@perli.net>
Fix problem with BitTorrent preferences

	* src/gpodder/gui.py: Merge bugfix patch by Nick (nikosapi) to make
	the BitTorrent preferences work correctly

Sun, 25 May 2008 17:10:36 +0200 <thp@perli.net>
Updated Spanish and Swedish translations

	* data/po/es.po: Updated Spanish translation by Marcos Hernández
	* data/po/sv.po: Updated Swedish translation by Anders Kvist
	* src/gpodder/gui.py: Add Marcos Hernández to list of contributors,
	because he did the updated Spanish translation

Fri, 23 May 2008 21:39:32 +0200 <thp@perli.net>
Updated French translation by Jérôme Chabod

	* data/po/fr.po: Updated French translation by Jérôme Chabod

Mon, 19 May 2008 15:12:41 +0200 <thp@perli.net>
Updated translations before the release stabilization phase

	* data/messages.pot: Updated from source
	* data/po/*.po: Updated from messages.pot

Fri, 16 May 2008 10:02:23 +0200 <thp@perli.net>
Add option to not hide channel cover and pill when the sidebar gets smaller

	* src/gpodder/config.py: Add "podcast_sidebar_save_space" option
	* src/gpodder/gui.py: Don't hide the channel cover and pill in the
	podcast list when the sidebar gets smaller; idea by Shane Donohoe

Wed, 14 May 2008 15:34:25 +0200 <thp@perli.net>
Download start performance improvements; fix podcast list handling

	* data/gpodder.glade: Convert the gPodderAddPodcastDialog from a
	GtkWindow to a real GtkDialog to make Escape key work and set the URL
	entry box to activate the "Add" button when Enter is pressed in it
	* src/gpodder/gui.py: Fix podcast selection in updateComboBox, so the
	currect podcast is selected when removing/adding podcasts; allow to
	pass a URL which should be selected after the update; use
	DownloadStatusManager's new batch mode to speed up starting many
	downloads at once (very visible speed improvement); adding podcasts
	has also been improved a bit with the new code
	* src/gpodder/services.py: Support batch mode (i.e. only notify after
	all episodes have been added to th download list); this speeds up the
	UI when multiple episodes are downloaded at once

Wed, 14 May 2008 11:59:20 +0200 <thp@perli.net>
Updated Russian translation by Vladimir Zemlyakov

	* data/po/ru.po: Updated Russian translation by Vladimir Zemlyakov

Mon, 12 May 2008 11:38:55 +0200 <thp@perli.net>
Fix a crasher with ExpatError when trying to parse an invalid itms:// URL

	* src/gpodder/gui.py: Give an error message when adding a channel that
	doesn't result in a valid URL being returned
	* src/gpodder/util.py: Improve handling of itms:// URLs that are not
	valid iTunes Podcast links, so they don't crash; thanks to Ralph on
	Launchpad for reporting this bug
	(Closes: https://bugs.launchpad.net/ubuntu/+source/gpodder/+bug/214113)

Mon, 12 May 2008 11:26:43 +0200 <thp@perli.net>
Fix race condition in is_download_in_progress()

	* src/gpodder/services.py: Make sure we behave correctly when items in
	the download list disappear while we are iterating over the list of
	downloads when trying to find out if a download is already in progress
	* src/gpodder/gui.py: Add SPGoetze to list of bug reporters
	(Closes: https://bugs.launchpad.net/ubuntu/+source/gpodder/+bug/208964)

Mon, 12 May 2008 11:04:53 +0200 <thp@perli.net>
Fix bugs in the calculate_size utility function

	* src/gpodder/util.py: Fix problem when accessing files or folders is
	not possible in calculate_size(); thanks to Scott Wegner for reporting
	this bug on Launchpad
	* src/gpodder/gui.py: Add Scott Wegner to list of bug reporters
	(Closes: https://bugs.launchpad.net/ubuntu/+source/gpodder/+bug/201276)

Sun, 11 May 2008 15:00:07 +0200 <thp@perli.net>
Update German translation, refresh translations

	* data/messages.pot: Refreshed from source code
	* data/po/*.po: Refreshed from messages.pot
	* data/po/de.po: Refreshed and updated

Sat, 10 May 2008 16:45:36 +0200 <thp@perli.net>
Make gPodder respect the user's GNOME toolbar style settings

	* src/gpodder/gui.py: Add Stefan Lohmaier to list of bug reporters
	* data/gpodder.glade: Remove the preset toolbar style (use user's
	configured toolbar style) and set the episode-related toolbar buttons
	to be "important" (so the text is displayed in the mixed mode); thanks
	to Stefan Lohmaier on gPodder Bugzilla for reporting this bug
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=105)

Sat, 10 May 2008 13:38:34 +0200 <thp@perli.net>
Improve feed cache update speed, thanks to the users at ITT

	* src/gpodder/cache.py: fetch() now returns an (updated, feed) tuple,
	where "updated" is a boolean value telling if the feed has been
	updated since the last run and "feed" is the feedparser feed data; fix
	a bug where the etag and the last-modified time were never used in a
	conditional download of not-changed feeds (my fault ;)
	* src/gpodder/console.py: Sync the feed cache to disk after adding a
	new podcast to the subscription list
	* src/gpodder/gui.py: Pass the list of old channels to the
	load_channels() function call, so we can save some CPU cycles when the
	feed has not changed and we are allowed to re-use the old, parsed one
	* src/gpodder/libpodcasts.py: Don't auto-sync the feed cache when
	getting the podcastChannel for a feed; add podcastChannel.sync_cache()
	function that saves the feed cache to disk; make it possible to pass a
	list of old channels to load_channels() and use the old channel
	objects in case the new one hasn't changed since the last run
	(see http://www.internettablettalk.com/forums/showpost.php?p=179261&postcount=62)

Sat, 10 May 2008 13:33:49 +0200 <thp@perli.net>
Fix problem on Maemo when window open sound occurs twice on start

	* data/gpodder.glade: Don't show gPodder main window initially
	* src/gpodder/gui.py: Show gPodder main window only after the UI
	elements have been set up (on Desktop) and don't destroy old main
	window after re-parenting the vbox to the hildonized window (on Maemo)

Sat, 10 May 2008 13:24:19 +0200 <thp@perli.net>
Don't change the menu item text for subscription remove and edit

	* src/gpodder/gui.py: Don't change the text of the subscription menu
	items when changing the active channel

Sat, 10 May 2008 12:37:06 +0200 <thp@perli.net>
Show correct icon on Maemo for gPodder

	* data/maemo/gpodder.desktop: Add Portuguese translation to Maemo's
	.desktop file; add StartupWMClass=gpodder to the .desktop file for
	Maemo, so the window manager on Maemo shows the correct icon when
	gPodder is running instead of the "generic" application icon

Mon, 05 May 2008 15:55:02 +0200 <thp@perli.net>
Add bug reporter for previous bug to list of contributors

	* src/gpodder/gui.py: Add Jerry Moss to list of bug reporters

Mon, 05 May 2008 15:52:49 +0200 <thp@perli.net>
Make sure we have a valid channel on which to call get_new_episodes()

	* src/gpodder/gui.py: Refactor on_btnDownloadNewer_clicked into the
	single calling code and remove the callback; this should really fix
	the problem described in LP bug 217113
	(Closes: https://bugs.launchpad.net/ubuntu/+source/gpodder/+bug/217113)

Fri, 02 May 2008 17:42:54 +0200 <thp@perli.net>
Maemo-related changes; allow custom player on Maemo (optional)

	* data/gpodder.glade: gPodder maemo preferences window should be
	modal; Add "Ask before closing gPodder" checkbox to Maemo preferences
	* src/gpodder/config.py: Add option "maemo_allow_custom_player" that
	allows setting the "player" and "videoplayer" variables to a command
	that will be called, like on the Desktop version (instead of always
	opening Nokia's Media Player with all files)
	* src/gpodder/gui.py: Maemo-specific UI tweaks
	* src/gpodder/libgpodder.py: Only call Nokia's Mediaplayer when we are
	on Maemo and when "maemo_allow_custom_player" is set to False

Fri, 02 May 2008 17:28:22 +0200 <thp@perli.net>
Change "Channel" to "Podcast"; new main menu; URL entry updated; +niceties

	* data/gpodder.glade: Change "Channel" to "Podcast"; re-structure main
	menu in gPodder window
	* src/gpodder/config.py: Add "show_podcast_url_entry" configuration
	option that controls whether the podcast url entry box is shown in the
	main window or not; add observer functionality to the configuration
	manager, so UI elements can "watch" the configuration manager for
	changes of UI-related configuration options
	* src/gpodder/console.py: Change "Channel" to "Podcast"
	* src/gpodder/gui.py: Hildon-specific file open/save dialogs; default
	"Enter podcast URL..." test for the URL entry box; size-dependent
	showing and hiding of podcast icon and downloaded count pixmap also
	for the Desktop version; change "Channel" to "Podcast"; offer
	first-time users to see a list of example podcasts to subscribe to;
	dynamic main menu; code supporting the main menu changes; add code for
	sending the subscription list via e-mail; import from OPML file in
	addition to import from OPML URL; remove unneeded callbacks (wishlist,
	select all, ...); optionally set title and hide url entry in the
	gPodderOpmlLister (OPML import GUI); Add Frank Harper to list of
	contributors (initial reporter of bug #82)
	* src/gpodder/libgpodder.py: Add "send_subscriptions" function that
	sends the user's channels.opml file via E-Mail (using xdg-email);
	rename "Channel" to "Podcast"
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=82)
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=103)

Fri, 02 May 2008 15:52:31 +0200 <thp@perli.net>
Updated Portuguese translation by João Trindade

	* data/gpodder.desktop: Updated Portuguese translation
	* data/po/pt.po: Updated Portuguese translation
	* src/gpodder/gui.py: Add João Trindade to list of contributors

Thu, 01 May 2008 11:20:28 +0200 <thp@perli.net>
Fix a spelling mistake in the French translation

	* data/po/fr.po: Fixed French translation from Jérôme Chabod; thanks
	to drust for pointing out the spelling mistake
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=101)

Tue, 29 Apr 2008 20:21:45 +0200 <thp@perli.net>
Fix problems with resizing the treeview on Maemo

	* src/gpodder/gui.py: Fix problems with treeview resizing and remove
	printing the percentage
	* bin/gpodder: We're in development again, so "+svn"

Sat, 26 Apr 2008 08:34:37 +0200 <thp@perli.net>
Merge gPodder 0.11.2 release stuff and German translation update

	* bin/gpodder: Updated version and release date
	* data/po/de.po: Updated German translation
	* data/messages.pot: Updated from source code
	* data/po/*.po: Updated from messages.pot
	* doc/man/gpodder.1: Updated manpage for release
	* README: Updated README for release

Thu, 24 Apr 2008 19:40:55 +0200 <thp@perli.net>
Maemo-specific dialogs and UI improvements

	* data/gpodder.glade: Maemo-specific "Add Podcast" dialog and
	Maemo-specific, stripped-down "Preferences" dialog added
	* src/gpodder/gui.py: Hide channel add UI from main window; make label
	for update button even shorter; hide cover and pill cells in the
	channel list if it gets too small; Maemo-specific dialogs for both
	adding channels and editing preferences

Thu, 24 Apr 2008 18:19:02 +0200 <thp@perli.net>
Maemo finger-friendly updates; minor UI changes

	* data/gpodder.glade: Ellipsize the feed update progressbar in the
	middle instead of the end (to show progress)
	* src/gpodder/gui.py: Add support for finger-friendly widget (buttons,
	scroll areas, popup menus, etc..); text is "Loading [...]" when
	loading feed cache and "Updating [...]" when updating feeds; on Maemo,
	don't set the tab title to the current episode title; hide the heading
	in gPodderEpisodeSelector on Maemo (to save screen space); add
	finger_friendly_widgets class attribute to several gPodder windows;
	make the tabs in the main window a bit taller, but remove the border
	around the main window to gain some space on the screen

Thu, 24 Apr 2008 15:48:58 +0200 <thp@perli.net>
Updated Swedish translation by Anders Kvist

	* data/po/sv.po: Updated Swedish translation by Anders Kvist

Wed, 23 Apr 2008 22:31:42 +0200 <thp@perli.net>
Merge patch from Junio C Hamano to fix problems with zero-length in feeds

	* src/gpodder/gui.py: Update list of contributors/patch writers
	* src/gpodder/services.py: Patch from Junio C Hamano to fix a problem
	when a feed has zero length, which would otherwise result in a
	divide-by-zero error

Tue, 22 Apr 2008 21:57:31 +0200 <thp@perli.net>
Typo from previous commit

	* src/gpodder/libpodcasts.py: Fix typo

Tue, 22 Apr 2008 21:54:01 +0200 <thp@perli.net>
Diverse changes, code clean-ups and other small annoyances

	* src/gpodder/config.py: Make sure we can load a default set of
	configuration options, even if we are in CLI mode
	* src/gpodder/download.py: Don't display a traceback when logging a
	cancelled download
	* src/gpodder/gui.py: Add Doug Hellmann to contributors/coders list in
	the about dialog (Doug Hellmann has done the feed cache code); do not
	center the gPodderEpisode dialog on the treeAvailable widget (this
	looks ugly ;)
	* src/gpodder/libpodcasts.py: Clean up import statements; Make sure we
	always have icon names, even in CLI mode; Remove "is_music_channel"
	property of podcastChannel (not needed anymore); 

Tue, 22 Apr 2008 21:15:40 +0200 <thp@perli.net>
Python code fixup: Compare "None" with "is not" instead of "!="

	* src/gpodder/config.py: "!= None" => "is not None"
	* src/gpodder/download.py: "!= None" => "is not None"
	* src/gpodder/gui.py: "!= None" => "is not None"
	* src/gpodder/libconverter.py: "!= None" => "is not None"
	* src/gpodder/libgpodder.py: "!= None" => "is not None"
	* src/gpodder/libpodcasts.py: "!= None" => "is not None"
	* src/gpodder/services.py: "!= None" => "is not None"
	* src/gpodder/util.py: "!= None" => "is not None"

Tue, 22 Apr 2008 20:30:28 +0200 <thp@perli.net>
Non-modal feed cache updates

	* data/gpodder.glade: Feed cache update UI changes
	* src/gpodder/gui.py: Fix problem with maemo window showing all
	widgets on start; feed cache update changes; update list of
	contributor (bug reporter for the cancel/skip button feature request
	* src/gpodder/libpodcasts.py: Support cancelling a running feed cache
	update by switching to offline mode when the cancel button is pressed
	in load_channels(); idea by Paul Elliot, Pieter De Decker, Jürgen
	Schinker and others, see the bug report page for more information
	(Partly fixes: http://bugs.gpodder.org/show_bug.cgi?id=16)

Sat, 19 Apr 2008 20:16:11 +0200 <thp@perli.net>
Better tray icon menu item on Maemo-based platforms

	* src/gpodder/trayicon.py: Better tray icon integration (show/hide
	gPodder via tray icon) on Maemo

Sat, 19 Apr 2008 18:46:30 +0200 <thp@perli.net>
Additional fields for the device remove episodes dialog; refactoring

	* src/gpodder/gui.py: Add "Podcast" and "Released" columns to the
	episode selector; hide all columns in our "delete from device" episode
	selector that have all rows set to "None"; make the first text column
	of the gPodderEpisodeSelector bigger, so the episode selector is
	easier to read when there are many columns
	* src/gpodder/libpodcasts.py: Use util.format_date() for
	cute_pubdate() in podcastItem
	* src/gpodder/sync.py: Document SyncTrack a bit better, add
	needed/possible keyword arguments that are used in the UI; default
	some values to None in case they are not provided; get "released" date
	from iPod's iTunesDB and get podcast name from MP3 player's sync
	folder (if this feature has been activated)
	* src/gpodder/util.py: Add format_date() function that converts a Unix
	timestamp to a good representation for a date (either Today,
	Yesterday, a weekday or the locale's appropriate representation); the
	code has been re-factored from podcastItem's cute_pubdate() function
	in gpodder.libpodcasts and is now used from there

Thu, 17 Apr 2008 17:54:48 +0200 <thp@perli.net>
Calculate total percentage based on byte size instead of percentage

	* src/gpodder/download.py: Make sure we save the right size of a
	currently in-progress download of an episode
	* src/gpodder/services.py: Calculate the total percentage for all
	episodes based on their file size instead of their percentage done;
	this is especially important when downloading small files mixed with
	large files; this makes the estimated download time more reliable;
	thanks to Jérôme Chabod, who has done this patch
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=46)

Thu, 17 Apr 2008 17:42:31 +0200 <thp@perli.net>
Clean up preferences dialog + Move download settings to downloads tab

	* data/gpodder.glade: UI-related changes to the preferences dialog
	clean-up and the moving of the download settings to the downloads tab;
	thanks to Paul Rudking for the download settings to downloads tab
	patch
	* src/gpodder/download.py: Better rate limiting, implemented by Paul
	Rudkin
	* src/gpodder/gui.py: UI-related changes to the preferences dialog
	clean-up; the download settings changes are by Paul Rudkin
	* src/gpodder/services.py: Improve the waiting/locking for the maximum
	number of simultaneous downloads using a threading.Event
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=69)
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=83)

Tue, 15 Apr 2008 21:01:19 +0200 <thp@perli.net>
Updated French translation by Jérôme Chabod

	* data/po/fr.po: Updated French translation by Jérôme Chabod

Tue, 15 Apr 2008 20:57:51 +0200 <thp@perli.net>
Merge patch from Jérôme Chabod to really pimp the tray icon tooltip :)

	* src/gpodder/gui.py: Add some error reporting and change the code a
	bit to support the new tooltips; thanks to Jérôme Chabod
	* src/gpodder/trayicon.py: Add support for more elaborate tray icon
	tooltips; patch by Jérôme Chabod
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=97)

Mon, 14 Apr 2008 13:51:23 +0200 <thp@perli.net>
Add bug reporter to list of contributors

	* src/gpodder/gui.py: Bug #95 was reported by Tomas Matheson, so add
	him to the list of contributors

Mon, 14 Apr 2008 13:45:34 +0200 <thp@perli.net>
Set Close and cancel buttons to the default on most dialogs

	* data/gpodder.glade: Apply patch from Jerome Chabod that sets the
	close and cancel buttons on most dialogs of gPodder to the default and
	give them focus; this makes keyboard navigation possible and should
	make it easier for keyboard fans to use gPodder UI :) This partially
	fixes bug #95, but there are still some things to do for this bug.

Mon, 14 Apr 2008 13:40:32 +0200 <thp@perli.net>
Merge patch from Jerome Chabod to fix Remove podcasts for MP3 players

	* src/gpodder/gui.py: Add warning message when we can't find a needed
	attribute; add "Philippe Gouaillier" to list of contributors (bug
	reporter for this bug)
	* src/gpodder/sync.py: Add playcount attribute to MP3 player sync code
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=96)

Mon, 14 Apr 2008 13:37:03 +0200 <thp@perli.net>
Updated Russian translation by Leonid Ponomarev

	* data/po/ru.po: Updated Russian translation by Leonid Ponomarev

Mon, 14 Apr 2008 13:33:44 +0200 <thp@perli.net>
Merge patch from Jerome Chabod to fix tray icon freeze (bug #55)

	* src/gpodder/trayicon.py: Merge patch from Jerome Chabod to fix the
	problem with the tray icon actions reported in bug #55; this is
	basically attachment #33 with some cosmetic fixes
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=55)

Sun, 13 Apr 2008 22:27:28 +0200 <thp@perli.net>
Updating message files from source code for 0.11.2 freeze

	* data/messages.pot: Updated from source code
	* data/po/*.po: Updated from messages.pot

Fri, 11 Apr 2008 10:26:50 +0200 <thp@perli.net>
Correct "Close" and "Quit" behaviour

	* data/gpodder.glade: Add a "Close" menu item to the podcasts menu and
	rename the quit item to "Quit" (from "Close) to make the interface
	more consistent and to support both Ctrl+W and Ctrl+Q
	* src/gpodder/gui.py: Correct "Close" and "Quit" behaviour and make
	Close be the "minimize to tray" function when the tray icon is
	enabled; when not enabled, "Close" acts the same way as "Quit" (but is
	left visible, so the Ctrl+W shortcut also works to close gPodder);
	thanks to Harley Laue for the suggestion and initial patch
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=89)

Fri, 11 Apr 2008 10:11:33 +0200 <thp@perli.net>
Make RSS .torrent feeds from different Torrent sites work

	* src/gpodder/libpodcasts.py: If an episode doesn't have an enclosure,
	but its link looks like it's a media/torrent file, we are going do
	interpret that as the enclosure URL; this makes feeds from different
	torrent sites work with gPodder; thanks to Josh Gardner
	<mellowcellofellow@gmail.com> for reporting this bug on Bugzilla
	(http://bugs.gpodder.org/show_bug.cgi?id=74)

Tue, 08 Apr 2008 10:54:01 +0200 <thp@perli.net>
Updated Spanish translation

	* data/po/es.po: Updated Spanish translation from Julio Acuña

Mon, 07 Apr 2008 23:06:53 +0200 <thp@perli.net>
Makre sure we can re-set the locale after changing it

	* src/gpodder/util.py: Make sure we can re-set the locale after
	changing it, and if we cannot, only print a warning, but don't throw
	the exception outside of the function

Mon, 07 Apr 2008 23:05:05 +0200 <thp@perli.net>
Add 64x64 icon for Maemo's main menu and install it

	* data/icons/64/gpodder.png: Added
	* setup.py: Install the 64x64 icon in share/icons/hicolor

Mon, 07 Apr 2008 11:47:12 +0200 <thp@perli.net>
Install "pixmaps" icon on Maemo, too

	* setup.py: Make sure we also install the "/usr/share/pixmaps/"
	version of the gPodder icon on Maemo (for the task navigator)

Mon, 07 Apr 2008 11:24:54 +0200 <thp@perli.net>
Fix problems with the tray icon emblems

	* src/gpodder/trayicon.py: Fix emblem drawing code for non-square
	icons; use the "refresh" icon for feed updates and "multimedia-player"
	icon for the iPod/MP3 player sync status emblem

Sun, 06 Apr 2008 17:22:11 +0200 <thp@perli.net>
Fix install Makefile bug; add donator; fix treeview header height

	* Makefile: Add "generators" dependency for the "install" target
	* src/gpodder/gui.py: Add Mark Alford (donator) to contributors list;
	remove the hard-coded header height offset for the treeview, because
	we don't need it anymore, because we hide the header (this is a good
	thing, because we don't need to rely on a theme-specific header
	height compared to what we did previously - one FIXME less :)

Sun, 06 Apr 2008 02:05:34 +0200 <thp@perli.net>
Initial upstream support for the Maemo platform (Nokia Internet Tablets)

	* bin/gpodder: Add "--maemo/-m" option to enable running as a Maemo
	application (this is only useful on Nokia Internet Tablets or in the
	Maemo SDK environment); determine interface type and set the correct
	variables on startup (gpodder.interface)
	* data/gpodder.glade: Increase the default size of some widgets to
	better fit the screens on Maemo (it won't do any harm on the "big"
	Desktop screen
	* data/icons/26/gpodder.png: Added
	* data/icons/40/gpodder.png: Added
	* data/maemo/gpodder.desktop: Added
	* Makefile: Help2man variable; new "make mtest" target that runs
	gPodder in Maemo scratchbox (probably useless for all other things);
	update the command descriptions; don't run the "generators" target
	from the "install" target; don't run "gen_graphics" from the
	"generators" target, but make it depend on the 24-pixel logo, which
	itself depends on the 22-pixel logo; this way, all should work out
	well when trying to install on systems without ImageMagick installed;
	remove *.pyo files on "make clean"
	* setup.py: Support for build targets; use "TARGET=maemo" to enable
	Maemo-specific installation options and files
	* src/gpodder/config.py: Increase the WRITE_TO_DISK_TIMEOUT to 60
	seconds, so we don't unnecessarily stress memory cards (on ITs);
	modify default path variables on Maemo (/media/mmc2)
	* src/gpodder/gui.py: Maemo-specific changes; clean-up the main window
	a bit and make message and confirmation dialogs Hildon-compatible
	* src/gpodder/__init__.py: Add enums for interface types: CLI, GUI and
	MAEMO; remove the "interface_is_gui" variable and replace with
	"interface", which is now used to determine where we are running
	* src/gpodder/libgpodder.py: Use /media/mmc2/gpodder/ as configuration
	folder on Maemo; use Nokia's Media player to playback files on Maemo
	* src/gpodder/libpodcasts.py: Icon name changes (Maemo-specific)
	* src/gpodder/trayicon.py: Maemo support; swap popup menu on Maemo;
	Add support for hildon banners instead of pynotify on Maemo
	* src/gpodder/util.py: Icon name changes (Maemo-specific); use new
	gpodder.interface variable in idle_add

Sat, 05 Apr 2008 21:06:14 +0200 <thp@perli.net>
Make i18n help text work in the console help (gpodder --help)

	* bin/gpodder: Fix a bug that would make the localized help string of
	the CLI break; thanks to Pavel Mlcoch <pavkamlc@centrum.cz> for
	reporting this bug on the gPodder bug tracker
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=53)

Fri, 04 Apr 2008 09:50:35 +0200 <thp@perli.net>
Use the correct multimedia-player icon for the transfer main menu item

	* data/gpodder.glade: Use the multimedia-player icon for the transfer
	to device menu item (was still gtk-network, forgot to change)

Fri, 04 Apr 2008 09:48:25 +0200 <thp@perli.net>
Fix gPodder freeze with open notifications on quit

	* src/gpodder/trayicon.py: Fix a bug when gPodder would freeze when
	a notification bubble was still open while closing the main
	application; thanks to Jérôme Chabod for reporting this issue
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=55)

Fri, 04 Apr 2008 09:46:23 +0200 <thp@perli.net>
Increase filename size limitation from 50 to 100 chars in MP3 player sync

	* src/gpodder/sync.py: Increase the number at which file names are cut
	down in length to 100 characters and also cut folder names to that
	length; thanks to Bernd Schlapsi for reporting this bug on the list

Sun, 30 Mar 2008 10:48:41 +0200 <thp@perli.net>
Make the Quit buttons actually quit when using the tray icon

	* src/gpodder/gui.py: Patch from Nick L. to make the function of all
	"Quit" buttons really quit gPodder and only make the window's "X"
	button act as "minimize to tray" button; Also, update the credits name

Sat, 29 Mar 2008 17:13:26 +0100 <thp@perli.net>
Project management updates (authors, contributors and copyright)

	* AUTHORS: Removed (was outdated); content now in gui.py (AboutDialog)
	* bin/gpodder, data/po/Makefile, doc/dev/copyright_notice, 
	  doc/dev/win32/setup-win32.py, INSTALL, Makefile, README,
	  setup.py: Updated Copyright and old website URL to include 2008, the
	  gPodder team and www.gpodder.org
	* src/gpodder/*.py: Updated Copyright years
	* src/gpodder/gui.py: Add list of contributors from AUTHORS file and
	from the content on the website's news page (please mail me if I
	forgot to mention you as a contributor, I surely have missed a few);
	make the AboutDialog's application name "gPodder" (from gpodder) and
	add an URL hook function to the AboutDialog, so the website is opened
	in the user's default web browser

Sat, 29 Mar 2008 16:30:02 +0100 <thp@perli.net>
Report errors in parsing/loading an already-added channel in the navigator

	* src/gpodder/gui.py: Show the error from feedparser in the channel's
	tooltip if there has been an error loading the channel
	* src/gpodder/libpodcasts.py: Make sure we can load a default title
	when using get_by_url(); save the parse_error variable for each
	channel (it defaults to None if there is no error); mark the
	description text for the channel navigator in red color if there has
	been a parser error and add the parse_error variable to the liststore
	model
	* src/gpodder/util.py: Strip whitespace before and after the string in
	remove_html_tags()

Sat, 29 Mar 2008 16:18:59 +0100 <thp@perli.net>
Add support for Rockbox' AudioScrobbler logfile to update played status

	* src/gpodder/config.py: Add "mp3_player_use_scrobbler_log"
	configuration option (defaulting to False) which controls if we are
	going to try and find a ".scrobbler.log" file that contains
	information on which tracks have been played; for this to work, you
	also have to enable the "Updated tags after download" option
	* src/gpodder/sync.py: Support for finding the .scrobbler.log file and
	updating the played status of episodes in the MP3 player sync code
	* src/gpodder/util.py: Add "find_mount_point()" function that tries to
	determine the mount point on which the given directory (or file) lies
	and returns the mount point or "/" if the directory/file resides on
	the root filesystem.

	This whole patch has been contributed by Nick <nikosapi.org> - thanks!

Sat, 29 Mar 2008 16:16:06 +0100 <thp@perli.net>
Merge sv.po translation from 0.11.1 release tarball

	* data/po/sv.po: It seems like I somehow messed up the translations
	merge, so here's the correct sv.po translation file, merged from the
	0.11.1 tarball; thanks to Anders Kvist <kvistkvist@telia.com> for
	pointing that out :)

Sat, 29 Mar 2008 01:20:46 +0100 <thp@perli.net>
Make sure we ignore the updated_parsed of a channel if it's None

	* src/gpodder/libpodcasts.py: Only try to convert the "updated_parsed"
	field if it's not "None"
	* src/gpodder/util.py: Make sure we receive a valid 9-tuple when
	converting dates from updated_parsed; if we receive a None value or
	some value that isn't "9" in length, return None
	Thanks to Chris Arnold <carnold@electrichendrix.com> for reporting
	this bug on the gpodder-devel mailing list

Thu, 27 Mar 2008 13:10:58 +0100 <thp@perli.net>
This is trunk, so set version to 0.11.1+svn

	* bin/gpodder: Set version to 0.11.1+svn

Thu, 27 Mar 2008 12:57:56 +0100 <thp@perli.net>
gPodder 0.11.1 "Attacked by Killer Tomatoes" released

	* bin/gpodder: gPodder 0.11.1 released :)
	* README: gPodder 0.11.1 released :)
	* doc/man/gpodder.1: gPodder 0.11.1 released :)
	* data/icons/24/gpodder.png: Updated from the dataset
	* data/messages.pot: Updated from source
	* data/po/*.po: Updated from messages.pot
	* data/po/de.po: Updated German translation

Thu, 27 Mar 2008 11:52:35 +0100 <thp@perli.net>
Use cPickle for dumbshelve - it's compatible and faster

	* src/gpodder/dumbshelve.py: Improve saving of channel cache and
	metadata (and basically all that currently depends on dumbshelve) by
	using cPickle as a drop-in replacement for pickle

Thu, 27 Mar 2008 11:28:31 +0100 <thp@perli.net>
Fix problem with pickle when there is a feed parsing exception

	* src/gpodder/cache.py: When the feedparser returns an exception, this
	will be stored as object in bozo_exception. Convert this to a string,
	so the pickle module doesn't complain; thanks to VladDrac in #python
	on FreeNode for pointing me to the right direction to fix this bug

Mon, 24 Mar 2008 10:42:19 +0100 <thp@perli.net>
Add "3gp" to the list of video file extensions, so we detect these files

	* src/gpodder/util.py: Add the .3gp video file extension to the list
	of known video file extensions, so we can detect that these are video
	files and act accordingly (in the UI and on sync); thanks to Atte
	André Jensen for reporting this bug on the gpodder-devel mailing list

Sun, 23 Mar 2008 10:39:24 +0100 <thp@perli.net>
Fix a bug when loading invalid image data (delete cover file then)

	* src/gpodder/libgpodder.py: Fix a bug when gPodder is unable to load
	an invalid cover image (i.e. when dragging a linked image from the
	browser to the gPodder window, the link is sent, not the image)

Sat, 22 Mar 2008 21:08:06 +0100 <thp@perli.net>
Make bluetooth device discover a bit nicer

	* src/gpodder/gui.py: Improve bluetooth device discovery button by not
	destroying its design when it has been clicked and the label is
	modified

Sat, 22 Mar 2008 20:45:27 +0100 <thp@perli.net>
Revert previous insanity (where I selected an awful "Transfer" toolbar icon)

	* data/gpodder.glade: I wonder why I selected "gtk-network" as the
	icon for the "Transfer" button on gPodder's toolbar. It surely is
	irritating and illogical as hell.. Hmm. Anyway - now, there is a nice
	"multimedia-player" icon which probably depicts an iPod-like device
	if you use a good icon set. This makes much more sense. Go usability!

Sat, 22 Mar 2008 20:41:54 +0100 <thp@perli.net>
Add "Visit website" menu items to channel and episode list; simple chan menu

	* src/gpodder/gui.py: Add "Visit website" menu items to the context
	menu of both the episode list and the channel navigator; also, make
	the channel context menu easier to use by replacing the old
	"Edit [Channelname]" and "Remove [Channelname]" items with stock items

Sat, 22 Mar 2008 18:41:30 +0100 <thp@perli.net>
Fix "Podcasts not being marked as new when synced to iPod" (#70)

	* src/gpodder/sync.py: Fix bug when podcasts were not marked as new
	when synced to iPod and "on_sync_mark_played" was enabled;
	Bug URL: http://bugs.gpodder.org/show_bug.cgi?id=70
	Thanks to defrex (defrex0 gmail com) for report this bug in Bugzilla

Thu, 20 Mar 2008 11:21:06 +0100 <thp@perli.net>
Delay loading of UserAppsReader and improve libplayers

	* src/gpodder/gui.py: Only load UserAppsReader's database three
	seconds after gPodder start (because we only need it when the user
	opens the preferences dialog, and if she opens it before these three
	seconds, the UserAppsReader data is loaded on demand); because we load
	the database (and generate the model) before we display the
	preferences dialog, the preferences dialog usually comes up faster
	than before (except for the situation where it is opened right after
	gPodder startup); have only one UserAppsReader for audio/video and not
	both (would duplicate the amount of work needed to read desktop
	files); cleanup some UserAppsReader-related code in the prefs dialog
	* src/gpodder/libplayers.py: Improve the reading code and make it
	possible to support multiple mime types per-UserAppsReader (i.e. both
	audio and video types are read by a single UAR instance); clean up the
	imports for this module and do other related changes to make the code
	nicer to read and understand

Thu, 20 Mar 2008 11:18:51 +0100 <thp@perli.net>
Add option to limit the maximum number of episodes per feed

	* src/gpodder/config.py: Add "max_episodes_per_feed" configuration
	option (int, defaults to 200) that determines the maximum number of
	episodes that are parsed per channel/feed; if there are more episodes,
	they are ignored. This value can be adjusted via the extended
	configuration editor if you need more episodes
	* src/gpodder/libpodcasts.py: Add support for the
	max_episodes_per_feed configuration option above

Thu, 20 Mar 2008 11:13:16 +0100 <thp@perli.net>
Fix bug with unneeded download directory being created

	* src/gpodder/libpodcasts.py: Fix bug when an unneeded download
	directory would be created on every gPodder startup

Thu, 20 Mar 2008 11:11:18 +0100 <thp@perli.net>
Only serialize DumbShelve to disk when we have changed/deleted items in it

	* src/gpodder/dumbshelve.py: Add a "__dirty" flag to DumbShelve to
	know if we have to write the DumbShelve to the disk or if nothing has
	changed since the last write (and therefore no need to run the
	time-consuming serialization code again); this speeds up initial
	loading time and probably also speeds up other parts of the code

Thu, 20 Mar 2008 11:09:27 +0100 <thp@perli.net>
Timestamp and benchmark functions for logger

	* src/gpodder/liblogger.py: Add support for timestamping and benchmark
	functions to liblogger, so we see the microtime since gPodder startup
	and can also use the logging module to benchmark the speed of certain
	code parts; this is helpful for our performance patches :)

Thu, 20 Mar 2008 11:07:48 +0100 <thp@perli.net>
Performance-improving patch from Nick (nikosapi) to html entity replacement

	* src/gpodder/util.py: Merge patch from Nick (nikosapi.org) to really
	improve performance of the HTML tag stripper/entity replacement code
	by using regular expressions and some more intelligent code for
	converting numeric entities to Unicode characters

Thu, 20 Mar 2008 11:06:32 +0100 <thp@perli.net>
Add demo code for displaying a splash screen

	* doc/dev/splash-logo.py: Added testing code that would display a
	splash screen (transparent if compositing is enabled); we currently
	don't plan to use this code for reasons described on gpodder-devel

Thu, 20 Mar 2008 10:04:14 +0100 <thp@perli.net>
Filter "None" filenames from GtkFileChooser widgets

	* src/gpodder/config.py: Make sure we don't receive a "None" filename
	from GtkFileChooser widgets when connecting to the config manager

Wed, 19 Mar 2008 18:06:58 +0100 <thp@perli.net>
Change the context menu of the episode list popup menu

	* src/gpodder/gui.py: Simplify, re-structure and improve the context
	menu of the episode list popup menu (right-click menu); thanks to hex
	(justin.forest gmail.com) for suggesting this change and giving
	valuable input on gpodder-devel

Wed, 19 Mar 2008 15:45:15 +0100 <thp@perli.net>
Patch from Nikosapi to fix MP3 player sync progress

	* src/gpodder/sync.py: Patch from Nick (nikosapi.org) to fix MP3
	player sync problems: "Instead of displaying the proper percentage of
	the copied file in the FS-based sync dialog, gPodder would initially
	report 100% and near the end of the copy it would report percentages
	>100%."

Wed, 19 Mar 2008 15:02:10 +0100 <thp@perli.net>
Various Bluetooth-related fixes

	* data/gpodder.glade: Use the "bluetooth" icon instead of the (old?)
	"stock_bluetooth" icon; in Gnome 2.22, the "bluetooth" icon is nicer,
	i.e. more Tango-ish than the "stock_bluetooth" icon
	* src/gpodder/gui.py: Fix a logging error; Only show "Send to [...]
	via bluetooth"/"Send to bluetooth device" when we have already
	downloaded the episodes (won't obviously work otherwise..)
	* src/gpodder/util.py: Fix bluetooth_send_file to work with both
	bluetooth-sendto and gnome-obex-send (different command line argument
	format for both)

Sun, 16 Mar 2008 12:55:49 +0100 <thp@perli.net>
Python-feedparser is a dependency, so mention it in the README

	* README: Mention python-feedparser as a dependency in the README
	file; thanks to Alain Tauch for pointing this out on the mailing list

Wed, 12 Mar 2008 12:38:19 +0100 <thp@perli.net>
Updated translations for 0.11.1 stabilization period

	* data/messages.pot: Updated from source
	* data/po/*.po: Updated from messages.pot

Tue, 11 Mar 2008 18:53:25 +0100 <thp@perli.net>
Add option to write gtkpod extended database on sync

	* data/gpodder.glade: Add a check box for the new config option
	* src/gpodder/config.py: Add ipod_write_gtkpod_extended boolean
	configuration variable that controls if we want to write iTunesDB.ext
	after synchronization (defaults to False)
	* src/gpodder/gui.py: Glue code for UI<->Config manager
	* src/gpodder/sync.py: Use libgpod's "gtkpod" module to write the
	extended gtkpod database (iTunesDB.ext) to the iPod after sync - this
	has to be enabled via an option

Tue, 11 Mar 2008 18:44:19 +0100 <thp@perli.net>
Fix problem with old PyGTK versions when importing gpodder.trayicon

	* src/gpodder/gui.py: Apply patch from Bill Barnard
	<bill@barnard-engineering.com>, based on a patch from Jérôme Chabod
	<jerome.chabod@ifrance.com> that makes sure we can import the tray
	icon module. If not, we disable the tray icon functionality

Mon, 10 Mar 2008 16:37:38 +0100 <thp@perli.net>
Add support for creating M3U playlist files in download folders

	* src/gpodder/config.py: Add "create_m3u_playlists" boolean
	configuration option (default False) that controls if we want to
	generate per-channel M3U playlists in our download folders
	* src/gpodder/gui.py: Add context menu entry for manually updating an
	M3U playlist for the channel navigator (only visible when updating m3u
	playlists is enabled
	* src/gpodder/libpodcasts.py: Add update_m3u_playlist() function to
	podcastChannel and call it when removing and adding downloaded
	episodes
	* src/gpodder/util.py: Add sanitize_filename() function that tries to
	encode a file name in the system's encoding, stripping all chars that
	are invalid on FAT32 and other systems (e.g. slash, etc..)

Thu, 06 Mar 2008 17:46:21 +0100 <thp@perli.net>
Be less verbose, consider episodes with length<=100 to have invalid length

	* src/gpodder/libpodcasts.py: Remove verbose logging for episode
	metadata (seems to work now); consider episodes with a small length
	value to have invalid length, i.e. try to find the length of the
	episode by looking at the HTTP header; thanks to Bernd
	<schlaber@gmail.com> for sending in the feed URL with which this bug
	happens (length was 1) during the gPodder workflow survey :)

Tue, 04 Mar 2008 12:15:53 +0100 <thp@perli.net>
Fix KeyError bug in custom_selection_button_clicked (from LP)

	* src/gpodder/gui.py: Fix problem with localized strings on the custom
	selection buttons, i.e. pass the label to the function directly
	instead of relying on the gtk.Button to have the label in the correct
	encoding (LP: #192918); thanks to Pavel Mlčoch for reporting this bug
	on Launchpad

Tue, 04 Mar 2008 12:05:23 +0100 <thp@perli.net>
Fix AttributeError bug in updateTreeView (from LP)

	* src/gpodder/gui.py: Make sure that we have a valid "active_channel"
	when updating the tree view (LP: #183667); thanks to red26wings for
	reporting this bug on Launchpad

Mon, 03 Mar 2008 23:06:30 +0100 <thp@perli.net>
Add support for changing the URL of a subscribed channel (bug #42)

	* data/gpodder.glade: Make the URL entry in the channel dialog
	editable
	* src/gpodder/gui.py: Add support for changing the URL of a subscribed
	channel (i.e. move from the "latest" RSS feed to the "complete" RSS
	feed, as is the case with Chaosradio podcasts, for example); ask user
	if she really wants to move; handle case where the new URL is wrong
	by reverting to old URL; Improve code for moving the download
	directory; thanks to Steve Garcia <sgarcia@bak.rr.com> for the bug
	report

Mon, 03 Mar 2008 21:14:55 +0100 <thp@perli.net>
Small fix for moving downloads progress bar

	* src/gpodder/gui.py: Make sure the value for set_fraction of the
	progress bar is in 0.0..1.0

Mon, 03 Mar 2008 20:53:15 +0100 <thp@perli.net>
Add "Go to website" buttons to episode and channel (bug #43)

	* data/gpodder.glade: Add "Go to website" buttons to episode and
	channel info dialogs
	* src/gpodder/gui.py: Add code to open website URL or hide the "Go to
	website" button when there is no valid website link for an episode or
	channel

Mon, 03 Mar 2008 20:37:02 +0100 <thp@perli.net>
Move webbrowser code to util.open_website; fix URLs to gpodder.org

	* src/gpodder/gui.py: Use new gpodder.org URLs; use
	util.open_website() instead of directly interfacing with threads and
	the "webbrowser" module
	* src/gpodder/util.py: New function open_website() that takes care of
	opening the system's default web browser and opening the specified URL

Sun, 02 Mar 2008 14:20:56 +0100 <thp@perli.net>
Make "gl" a global-accessible object in libgpodder

	* doc/dev/gdfs/gdfs-check.py: Adapt to new structure of gPodderLib
	* src/gpodder/*.py: Use "gl" instead of all incarnations of
	"gPodderLib()" or "libgpodder.gPodderLib()", and weed out all "gl =
	gPodderLib() lines, because it makes the code look unnecessarily
	bloated ;)
	* src/gpodder/libgpodder.py: Make "gl" a global instance of the
	gPodderLib() object, and rename gPodderLibClass to gPodderLib and do
	some more cleaning-up

Sun, 02 Mar 2008 14:03:40 +0100 <thp@perli.net>
Move gPodderLib().open_folder to util.gui_open

	* src/gpodder/gui.py: Use util.gui_open instead of gl.open_folder
	* src/gpodder/libgpodder.py: Remove open_folder (move to gpodder.util)
	* src/gpodder/util.py: Add gui_open function that uses xdg_open to
	open files and folders with their default application in the GUI

Sun, 02 Mar 2008 13:52:42 +0100 <thp@perli.net>
Pickle-based storage method (dumbshelve); HTTP HEAD requests; buggy feed fixes

	* src/gpodder/dumbshelve.py: Added (replacement for "shelve" using
	pickle)
	* src/gpodder/libgpodder.py: Rename *.db files to *.pickle.db, so we
	don't clash with old-style shelve .db files
	* src/gpodder/libpodcasts.py: Use dumbshelve as a replacement for
	shelve; add EpisodeURLMetainfo that keeps track of metainfo downloaded
	via HTTP HEAD requests; make getting episode length and pubDate a bit
	more intelligent by trying to find correct values via HTTP HEAD;
	improve episode sorting by falling back to episode titles when no
	pubDate has been found (or pubDate is equal); 
	* src/gpodder/util.py: Add get_episode_info_from_url() function that
	tries to find out the length and pubDate of an episode by looking at
	the data from the HTTP HEAD; also support HTTP proxys via an optional
	"proxy" keyword argument

Wed, 27 Feb 2008 10:44:48 +0100 <thp@perli.net>
Notify user about no new episodes when updating from tray icon

	* src/gpodder/gui.py: Patch from Jérôme Chabod
	<jerome.chabod@ifrance.com> to notify the user about "no new episodes"
	when updating the feed cache manually via the tray icon
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=3)
	* src/gpodder/trayicon.py: See above

Wed, 27 Feb 2008 09:52:14 +0100 <thp@perli.net>
Use xdg-open for files that we don't know the file type of

	* src/gpodder/libgpodder.py: If the file we want to open/play is not
	an audio or video file, we use "xdg-open" to open the file (this is
	used for things like PDF files and the like, e.g. in Chaos TV)

Wed, 27 Feb 2008 09:46:55 +0100 <thp@perli.net>
Add Flash Video (flv) and Windows Media Video (wmv) to file detection

	* src/gpodder/util.py: Detect *.flv and *.wmv files as video files

Wed, 27 Feb 2008 09:39:42 +0100 <thp@perli.net>
When sending via Bluetooth, always rename/copy the file

	* src/gpodder/gui.py: When sending files via Bluetooth, and the file
	converter script is not enabled, we are simply copying the file to the
	sync_filename of the episode, therefore creating a nice name. We have
	to copy the file, because neither gnome-obex-send nor bluetooth-sendto
	let us specify the destination filename when sending the file, these
	utilities always take the input filename (thanks to Chris
	<gpodder@noreply.org.uk> for the bug report)
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=49)

Tue, 26 Feb 2008 16:49:06 +0100 <thp@perli.net>
Python code fixup: Compare "None" with "is" instead of "=="

	* doc/dev/daap2rss.py: "== None" => "is None"
	* src/gpodder/config.py: "== None" => "is None"
	* src/gpodder/gui.py: "== None" => "is None"
	* src/gpodder/libgpodder.py: "== None" => "is None"
	* src/gpodder/libpodcasts.py: "== None" => "is None"

Tue, 26 Feb 2008 16:30:56 +0100 <thp@perli.net>
Add support for new "bluetooth-sendto" utility

	* README: Ask for either "gnome-obex-send" or "bluetooth-sendto",
	which are needed for the Bluetooth file transfer
	* src/gpodder/util.py: Add support for "bluetooth-sendto" as an
	alternative to "gnome-obex-send"; initial bug report and patch by
	Leonid Ponomarev (this probably adds bluez-gnome as an optional
	dependency if you want bluetooth send support)

Mon, 25 Feb 2008 15:51:16 +0100 <thp@perli.net>
Show more description text in episode list

	* src/gpodder/libpodcasts.py: Join all lines and strip unnecessary
	data for the episode description that is displayed in the episode list
	when descriptions are enabled (suggested by Jérôme Chabod)

Mon, 25 Feb 2008 14:39:15 +0100 <thp@perli.net>
Merge changes from 0.11.0 release after release

	* bin/gpodder: Merge changes from 0.11.0
	* README: Merge changes from 0.11.0

Sun, 24 Feb 2008 14:52:04 +0100 <thp@perli.net>
Cosmetic changes to the makefile

	* Makefile: Cosmetic changes

Sun, 24 Feb 2008 13:55:42 +0100 <thp@perli.net>
Cairo-based progress bar on system tray icon

	* src/gpodder/draw.py: Add Cairo-based drawing code for generating a
	nice, transparent progress bar icon
	* src/gpodder/services.py: Fix a problem with the wrong download done
	percentage (i.e. when cancelling downloads instead of finishing them)
	* src/gpodder/trayicon.py: Add code to draw the progress bar on the
	tray icon; initial idea and most parts of this patch by Jérôme Chabod

Sat, 23 Feb 2008 14:18:53 +0100 <thp@perli.net>
Set the xterm title when running "make test"

	* Makefile: Set the xterm title when running "make test"

Wed, 20 Feb 2008 13:38:58 +0100 <thp@perli.net>
Estimated time left and synchronization support for tray icon by Jérôme Chabod

	* src/gpodder/gui.py: Send update status information to the tray icon
	on update; add glue code for synchronization device and tray icon
	* src/gpodder/trayicon.py: Add status and tooltip during device
	synchronization; add estimated download time to tooltip during
	download; set the correct caption for the synchronization menu item in
	the tray icon (and don't add a synchronize menu item when not needed);
	some small code-cleanups and fixes
	* src/gpodder/util.py: Add format_seconds_to_hour_min_sec() function
	that converts a numeric amount of seconds into a human-readable string

Tue, 19 Feb 2008 07:46:28 +0100 <thp@perli.net>
Fix bug with MP3 player synchronization file name encodings

	* src/gpodder/sync.py: Apply patch to fix problems with native
	language encodings on MP3 player synchronization; thanks to Bernd
	Schlapsi for reporting the problem in Bugzilla
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=34)

Mon, 18 Feb 2008 21:17:48 +0100 <thp@perli.net>
Updated French translation for 0.11.0

	* data/po/fr.po: Updated French translation by Jérôme Chabod

Sun, 17 Feb 2008 13:50:09 +0100 <thp@perli.net>
Fix calculation of average percentage done

	* src/gpodder/services.py: Fix calculation of average percentage done
	for downloads, thanks to Jérôme Chabod <jerome.chabod@ifrance.com> for
	the patch

Sun, 17 Feb 2008 13:33:38 +0100 <thp@perli.net>
Updated translations for 0.11.0

	* data/messages.pot: Refreshed messages.pot from source code
	* data/po/de.po: Updated German translation
	* data/po/nl.po: Updated Dutch translation by Pieter De Decker
	* data/po/ru.po: Updated Russian translation by Leonid Ponomarev
	* data/po/cs.po: Updated Czech translation by Ondrej Vesely
	* data/po/sv.po: Updated Swedish translation by Anders Kvist

Thu, 07 Feb 2008 22:15:40 +0100 <thp@perli.net>
Hello, new "expert" configuration editor (about:config-like)

	* data/gpodder.glade: Add gPodderConfigEditor window and add an
	"Advanced..." button to the preferences dialog
	* src/gpodder/config.py: Add a gtk.ListStore tree model to the
	configuration manager and update it when configuration variables
	change; add toggle_flag() and update_field() methods for easy updating
	of fields from the new config editor
	* src/gpodder/gui.py: Add glue code for opening the advanced
	configuration editor from the preferences dialog; add code for the
	gPodder configuration editor (including filtering and field updating);
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=10)

Thu, 07 Feb 2008 20:22:08 +0100 <thp@perli.net>
Support buggy OPML feeds, notify user on OPML import

	* src/gpodder/gui.py: Notify user when no items were found when trying
	to import OPML feeds
	* src/gpodder/opml.py: Make the OPML importer a bit more relaxed, and
	make it accept "url" instead of "xmlUrl", too (for buggy OPML feeds)

Wed, 06 Feb 2008 17:34:56 +0100 <thp@perli.net>
Fix the track length detection

	* src/gpodder/sync.py: Fix the iPod sync track length detection code,
	reported by Paul Rudkin <paul@thegithouse.com> and tested by
	FriedBunny <friedbunny@kulturny.com>; make default length 3 hours
	Closes:	http://bugs.gpodder.org/show_bug.cgi?id=29

Wed, 06 Feb 2008 10:59:25 +0100 <thp@perli.net>
NLS encoding support for MP3 player synchronization (from gdfs)

	* src/gpodder/sync.py: Add NLS encoding support from Leonid Ponomarev
	<leonid.phoenix@gmail.com>; patch modified a bit to better fit the
	code and be more verbose, so the user knows how we encode the names

Wed, 06 Feb 2008 10:43:47 +0100 <thp@perli.net>
Hide to systray on exit during download

	* src/gpodder/gui.py: Apply patch from Jérôme Chabod
	<jerome.chabod@ifrance.com> to fix a bug: When closing gPodder during
	a download, and "on_quit_hide" is on, gPodder asks for a confirmation
	It should hide gPodder without asking. This patch fix that.

Wed, 06 Feb 2008 10:18:30 +0100 <thp@perli.net>
Usability GUI update (after Rafael Proença's proposal)

	* data/gpodder.glade: Add "Ctrl+L" hotkey to Add new channel; add
	"View" menu with show/hide Toolbar (Ctrl+T) and show/hide episode
	descriptions (Ctrl+D); remove "Update Feeds" button from toolbar and
	add Check for updates button below channel navigator; move the add
	episodes entry and buttons above the channel navigator; thanks to the
	following people who shared their opinions on the mailing list: Rafael
	Proença, Paul Rudkin, Ondrej Vesely, Leonid Ponomarev, Shane Donohoe,
	Jérôme Chabod, Nick (nikosapi); the GUI mockups and the initial idea
	were posted by Rafael Proença
	* src/gpodder/config.py: Add "episode_list_descriptions" and
	"show_toolbar" configuration options that modify the look of the main
	window (both default to "True")
	* src/gpodder/gui.py: Show feed description in seperate line (this
	feature was suggested by narf@inode.at); make the episode list
	treeview widget use the space more efficient; show/hide toolbar and
	show/hide episode description GUI glue code
	* src/gpodder/libgpodder.py: Add "digits" keyword argument to
	format_filesize() (defaults to 2), this is a pass-thru function for
	gpodder.util.format_filesize() (see below)
	* src/gpodder/libpodcasts.py: Support for small- and large-sized
	icons,modify liststore creation code to add description to the title
	column
	* src/gpodder/util.py: Add "digits" keyword argument to
	format_filesize() (defaults to 2), this is used to define the format
	of the filesize; add "icon_size" keyword argument (defaults to 32) to
	get_tree_icon() and modify the function so that it dynamically
	generates the correct icon with the correct sizes

Mon, 04 Feb 2008 11:26:14 +0100 <thp@perli.net>
Apply patchset from Jérôme Chabod to fix tray icon behaviour

	* data/gpodder.glade: Change behaviour of the "display tray icon"
	checkbox, rename and retitle some configuration options
	* src/gpodder/config.py: Rename "download_after_update" to
	"auto_download_when_minimized" and rename "disable_notifications" to
	"enable_notifications".
	* src/gpodder/gui.py: Add glue code for config and GUI, change
	behaviour as described in http://bugs.gpodder.org/show_bug.cgi?id=3
	* src/gpodder/trayicon.py: Clean-up and fix behaviour as described in
	our Bugzilla Bug #3 (see above); thanks to Jérôme Chabod for
	implementing all these changes and the patch

Mon, 04 Feb 2008 09:32:56 +0100 <thp@perli.net>
Output pretty-printed OPML when saving channels list

	* src/gpodder/opml.py: Patch from Nick (nikosapi.org) to output the
	channels.opml file pretty-printed, so it's easier to read and easier
	to edit when working on the file outside of gPodder

Sun, 03 Feb 2008 23:02:47 +0100 <thp@perli.net>
Don't code late at night, it breaks the sync code ;)

	* src/gpodder/sync.py: Add brackets because I wrote bad code in the
	first place (fix video sync for iPods); thanks to Dave Perdue
	<dave@minusvince.com> for reporting this in our bug tracker
	(Closes: http://bugs.gpodder.org/show_bug.cgi?id=28)

Sat, 02 Feb 2008 11:36:35 +0100 <thp@perli.net>
Make feed update display "Loading" titles, only run auto update when minimized

	* src/gpodder/gui.py: Usability patch from NIkosapi <nikosapi.org>:
	Make the feed update dialog display "Loading feeds" instead of
	"Downloading feeds" when its loading the feeds from the local cache;
	only run the automatic, periodic update when gPodder is minimized,
	because it would pop up a dialog while gPodder is in use otherwise

Sat, 02 Feb 2008 11:33:48 +0100 <thp@perli.net>
Pressing Enter in the add channel entry adds the channel

	* data/gpodder.glade: Usability patch from Nikosapi <nikosapi.org>:
	Add an action handler to the gladefile, so the user can simply press
	Enter in the gtk.Entry instead of having to tab to or click on the
	button for adding a channel

Wed, 30 Jan 2008 09:47:21 +0100 <thp@perli.net>
Fix another bug in file_modification_datetime

	* src/gpodder/util.py: Another problem that happens with special
	iTunesDB settings, thanks to FriedBunny <friedbunny@kulturny.com>

Wed, 30 Jan 2008 09:23:19 +0100 <thp@perli.net>
Fix a bug in the file size calculation

	* src/gpodder/util.py: calculate_filesize should deal with "None"
	passed as filename (now returns zero-size);
	Fixes: Bug #23 (http://gpodder.thegithouse.com/show_bug.cgi?id=23)
	Thanks to FriedBunny <friedbunny@kulturny.com> for reporting this
	issue in our bug tracker

Mon, 28 Jan 2008 12:33:13 +0100 <thp@perli.net>
Merge new sync code from thp's private branch

	* bin/gpodder: Add "--sync"/"-s" command-line option to start the
	device synchronization process from the CLI interface - syncing can
	now be scripted, baby :) (you still have to configure the sync device
	via the GUI first, though)
	* data/gpodder.glade: Simplify gPodderSync dialog and remove some
	obsolete options from the channel dialog
	* src/gpodder/console.py: Add code for command-line sync support
	* src/gpodder/gui.py: Remove obsolete code for libipodsync and import
	the new "sync" module; simplify Sync<->GUI interface; clean-up
	gPodderSync dialog code to interface with new sync code; remove some
	config glue code for the channel properties dialog
	* src/gpodder/libconverter.py: Make libconverter work even if the
	percentage callback would fail in certain conditions (try..except)
	* src/gpodder/libipodsync.py: Removed
	* src/gpodder/libpodcasts.py: Refactor age_in_days() and
	get_age_string() to simple calls to utility functions and move the
	code to gpodder.util
	* src/gpodder/sync.py: Added new sync module :) Very modular, yesaya!
	* src/gpodder/util.py: Add file_age_in_days() and file_age_to_string()
	helper functions that use code from libpodcasts and return the age of
	a file in the filesystem

Thu, 24 Jan 2008 14:51:48 +0100 <thp@perli.net>
Fix a bug for show_message and tray_icon/minimized

	* src/gpodder/gui.py: Fix a bug when messages are shown for
	non-gPodderMainWindow windows (that don't have tray_icon)

Wed, 23 Jan 2008 11:55:35 +0100 <thp@perli.net>
Make gpodder.desktop pass desktop-file-validate tests

	* data/gpodder.desktop: Update "Categories" and remove "Encoding",
	following the freedesktop.org Desktop Entry specification

Wed, 23 Jan 2008 09:06:32 +0100 <thp@perli.net>
Do not show notifications when gPodder is minimized

	* src/gpodder/gui.py: Merge patch from Jérôme Chabod to fix problems
	with the gPodder window re-appearing after having been minimized;
	use the notification icon when possible; initially reported by Shane
	Donohoe

Tue, 22 Jan 2008 10:19:46 +0100 <thp@perli.net>
Add "releasetest" target to Makefile (automated testing)

	* Makefile: Add "releasetest" target that can be used to do some
	automatic testing before releases; thanks to Götz Waschk for giving
	some hint on "desktop-entry-validate" :)

Tue, 22 Jan 2008 10:09:16 +0100 <thp@perli.net>
Use Episode Selector for per-channel new episodes

	* src/gpodder/gui.py: Reorganize code to use the episode selector for
	both all-channels and per-channel new episodes
	(Closes: http://gpodder.thegithouse.com/show_bug.cgi?id=14)

Tue, 22 Jan 2008 09:42:01 +0100 <thp@perli.net>
Fix problem in gpodder.desktop file

	* bin/gpodder: We're in development again (+svn)
	* data/gpodder.desktop: Fix problem in .desktop file (Thanks to Götz
	Waschk for reporting this bug, detected via desktop-entry-validate)

Tue, 22 Jan 2008 08:20:33 +0100 <thp@perli.net>
gPodder 0.10.4 "Faster Pussycats Kill" released

	* bin/gpodder: gpodder 0.10.4 released :)
	* README: gPodder 0.10.4 released :)
	* doc/man/gpodder.1: gPodder 0.10.4 released :)
	* data/po/de.po: Updated German translation
	* data/messages.pot: Updated from source
	* data/po/*.po: Updated from messages.pot

Tue, 22 Jan 2008 08:13:42 +0100 <thp@perli.net>
Create Bittorrent download directory on startup

	* src/gpodder/libgpodder.py: Create Bittorrent download directory on
	startup, so the first time gPodder preferences are shown, the download
	folder will exist and now throw an error

Mon, 21 Jan 2008 21:41:59 +0100 <thp@perli.net>
Updated French translation file with correct encoding

	* data/po/fr.po: Updated French translation with correct encoding by
	Jérôme Chabod - thanks!

Mon, 21 Jan 2008 10:47:49 +0100 <thp@perli.net>
Add support for sending files via Bluetooth

	* data/gpodder.glade: Add "Bluetooth" configuration page to
	preferences dialog
	* src/gpodder/config.py: Add Bluetooth-related configuration options
	* src/gpodder/gui.py: Add support for sending (and converting) files
	for bluetooth file transfer; add glue code for preferences dialog and
	configuration manager
	* src/gpodder/libgpodder.py: Add "tempdir" variable to gPodderLibClass
	that specifies a temporary directory to be used (currently only for
	converting files for bluetooth transfer, might be migrated to a
	configuration option later)
	* src/gpodder/util.py: Add discover_bluetooth_devices() function that
	searches for nearby devices (either via python-bluez or via hcitool,
	so one of them has to be installed as a dependency); add
	bluetooth_send_file() convenience function that starts a file transfer
	via Bluetooth OBEX - uses gnome-obex-send, which has to be installed
	for Bluetooth file transfer to work

Mon, 21 Jan 2008 09:52:09 +0100 <thp@perli.net>
Support for different audio/video player selection

	* data/gpodder.glade: Add video selection to preferences dialog
	* src/gpodder/config.py: Add "videoplayer" configuration option
	* src/gpodder/gui.py: Add glue code for configuration and preferences
	dialog (audio/video player selector)
	* src/gpodder/libgpodder.py: Add code to migrate from older gPodder
	configurations (videoplayer is set to "unspecified") to the same value
	as the currently selected audio player; when "playing" a file,
	determine the file type and start the right player application
	* src/gpodder/libplayers.py: Parameterize the UserAppsReader class to
	accept a mime type (e.g. "video" or "audio") after which to filter

Mon, 21 Jan 2008 07:30:38 +0100 <thp@perli.net>
Czech translation update: gpodder.desktop

	* data/gpodder.desktop: Ondrej Vesely <xorwen@gmai.com> added the
	Czech translation strings to the gpodder.desktop file - thanks

Sun, 20 Jan 2008 22:50:13 +0100 <thp@perli.net>
Added Czech translation by Ondrej Vesely

	* data/po/cs.po: Added (partial) Czech translation by Ondrej Vesely
	<xorwen@gmail.com>; the completed translation will be updated when
	it's done
	* setup.py: Add "cs" (Czech) to list of translations

Sat, 19 Jan 2008 18:39:54 +0100 <thp@perli.net>
Updated Swedish translation from Anders Kvist

	* data/po/sv.po: Thanks to Anders Kvist, the Swedish translation is
	now up-to-date again

Sat, 19 Jan 2008 13:28:12 +0100 <thp@perli.net>
Updated French translation from Jérôme Chabod

	* data/po/fr.po: Thanks to Jérôme Chabod, the French translation is
	now up-to-date again

Thu, 17 Jan 2008 22:46:21 +0100 <thp@perli.net>
Updated Dutch translation from Pieter De Decker

	* data/po/nl.po: Thanks to Pieter De Decker, the Dutch translation is
	now up-to-date again

Thu, 17 Jan 2008 14:21:49 +0100 <thp@perli.net>
Update translation template and translations from source

	* data/messages.pot: Updated potfile from source code
	* data/po/*.po: Updated translation templates from potfile

Wed, 16 Jan 2008 08:36:12 +0100 <thp@perli.net>
Remove the "Ignore" button in tray icon notifications

	* src/gpodder/trayicon.py: Remove the "ignore" action and button when
	a download has finished; the "ignore" button is redundant, as the same
	functionality can be achieved by clicking on the "x" of the bubble

Tue, 15 Jan 2008 14:50:13 +0100 <thp@perli.net>
Modularize calls to gobject.idle_add (for non-GTK support)

	* bin/gpodder: Set interface_is_gui to True when running the GUI
	* src/gpodder/*.py: Use util.idle_add instead of gobject.idle_add
	* src/gpodder/gui.py: Simplify some idle_add calls, code clean-up
	* src/gpodder/__init__.py: Add "interface_is_gui" boolean variable
	that tells us if we are running in GUI or CLI mode (this is needed for
	util.idle_add to determine if it's going to use the gobject module or
	not)
	* src/gpodder/util.py: Add new function idle_add() that acts as a
	wrapper to gobject.idle_add(); this will only use gobject.idle_add if
	we are in GUI mode, and will call the callback directly when we are in
	command-line mode (because we don't have to watch out for threading
	race conditions there, compared to what GTK+ gives us)

Mon, 14 Jan 2008 20:23:02 +0100 <thp@perli.net>
Add menu item that links to gPodder's new bug tracker

	* data/gpodder.glade: Add bug tracker item to help menu
	* src/gpodder/gui.py: Add code to open a webbrowser with the bug
	tracker when the bug tracker icon is clicked

Mon, 14 Jan 2008 20:04:25 +0100 <thp@perli.net>
Add a checkbox to keep episodes when removing channels

	* src/gpodder/gui.py: Add a checkbox to the confirmation dialog when
	removing a podcast channel, so the user has the option to remove the
	podcast feed from gPodder's subscription list, but still keep the
	downloaded files on the harddisk (via a checkbox in the dialog)
	(Closes: http://gpodder.thegithouse.com/show_bug.cgi?id=1)

Thu, 10 Jan 2008 08:44:00 +0100 <thp@perli.net>
Updated Russian translation by Hex

	* data/po/ru.po: Updated Russian translation by
	Hex <justin.forest@gmail.com>

Wed, 09 Jan 2008 23:43:56 +0100 <thp@perli.net>
Merge tray icon and notification patch by Jérôme Chabod

	* data/gpodder.glade: UI support for tray icon settings and
	configuration options for auto update feeds (auto update based on a
	patch by Nick (nikosapi.org)
	* src/gpodder/config.py: Add configuration options that support the
	tray icon, notification bubble and automatic update/close functions
	* src/gpodder/gui.py: Support the tray icon in the GUI; link the
	configuration options with the preferences dialog; re-work the channel
	update dialog to be more slipstreamed
	* src/gpodder/trayicon.py: Added new tray icon module by
	Jérôme Chabod <jerome.chabod@ifrance.com>; initial idea from old
	gPodder TODO list by Holger Bauer

Wed, 09 Jan 2008 23:09:54 +0100 <thp@perli.net>
Updated Swedish translation by Anders Kvist

	* data/po/sv.po: Swedish translation updated by
	Anders Kvist <kvistkvist@telia.com>

Wed, 09 Jan 2008 11:52:23 +0100 <thp@perli.net>
Use os.rename to make channel list saving atomic

	* src/gpodder/opml.py: Make the saving of the channel list atomic by
	first saving it to a temporary file and then using os.rename to really
	move the file in place (this should make the channel list saving very
	stable and protect against certain bad system conditions where the
	channel list is emptied); thanks to Jens Thiele <karme@berlios.de> for
	the suggestion and pointers to improve the channel saving code

Sat, 05 Jan 2008 15:34:23 +0100 <thp@perli.net>
Make logging in libpodcasts less verbose

	* src/gpodder/libpodcasts.py: Remove some verbose logging code

Wed, 02 Jan 2008 15:39:04 +0100 <thp@perli.net>
Migrate from channels.xml (from 0.9.4) to channels.opml if needed

	* src/gpodder/libgpodder.py: Add code to check if channels.xml exists
	but channels.opml doesn't and if so, try to convert from channels.xml
	to channels.opml, so users upgrading from 0.9.4 directly will have
	their channel list automatically converted;
	thanks to Tim Michelsen for the bug report and helpful Ubuntu info

Tue, 01 Jan 2008 23:32:50 +0100 <thp@perli.net>
Add download completion notification support

	* src/gpodder/download.py: Notify the download status manager when a
	download has been completed successfully
	* src/gpodder/services.py: Add download-complete signal to list of
	possible signals and download_completed() method to be used by
	downloads to notify the status manager of a successful download

Sat, 29 Dec 2007 14:21:51 +0100 <thp@perli.net>
Patch the feedparser module to correctly process democracynow.org

	* src/gpodder/cache.py: Add a patch_feedparser() method that checks of
	the feedparser module correctly maps the "plain" content-type to the
	correct "text/plain" content-type and if not, replace the
	mapContentType method with a fixed one; this should make the audio
	podcast on democracynow.org working (thanks to Clark Burbidge for the
	bug report)

Sun, 23 Dec 2007 12:20:25 +0100 <thp@perli.net>
Better username/password extraction from URLs

	* src/gpodder/util.py: Improve username and password extraction for
	authentication URLs; thanks to Nick <me@nikosapi.org> and Shane
	Donohoe <priestoftime@googlemail.com> for reporting this bug and
	sending in a patch; this should allow for e-mail address usernames

Sat, 22 Dec 2007 11:44:41 +0100 <thp@perli.net>
Also delete old episodes that have disappeared from the feed

	* src/gpodder/gui.py: When deleting old episodes automatically, also
	delete episodes that have disappeared from the RSS feed and are only
	available locally; thanks to Pieter De Decker <pdedecker@gmail.com>
	for the very detailed and helpful bug report :)

Thu, 20 Dec 2007 01:33:15 +0100 <thp@perli.net>
Stability updates: Feed cache update, old PyCairo versions

	* src/gpodder/draw.py: Add a workaround for pycairo versions less than
	1.1.6. Thanks to Chris Arnold for reporting this bug on the
	gpodder-devel mailing list and taking the time to test the patch and
	report back and provide useful information for debugging this error
	* src/gpodder/gui.py: Close the feed cache update dialog even when the
	user clicks on "cancel" (would have stayed there otherwise)

Tue, 18 Dec 2007 10:13:44 +0100 <thp@perli.net>
Merge "delete episode after sync" patch from Jérôme Chabod

	* data/gpodder.glade: Add GUI elements in preferences dialog to select
	what to do after episode sync (nothing, delete or mark played)
	* src/gpodder/config.py: Add "on_sync_delete" configuration option
	* src/gpodder/gui.py: Glue "on_sync_delete" config and GUI together
	* src/gpodder/libipodsync.py: If the configuration option
	on_sync_delete is set, remove the episode after successfully copying
	it to the iPod or MP3 player (the whole patch has been initially done
	by Jérôme Chabod <jerome.chabod@france.com> with some modifications)
	* src/gpodder/libpodcasts.py: Make delete_from_disk() a bit more
	robust, so it doesn't disturb libipodsync's functionality

Mon, 17 Dec 2007 16:26:43 +0100 <thp@perli.net>
Remove invalid channel cover images when loading fails

	* src/gpodder/libpodcasts.py: Remove the cover_file of a channel when
	it cannot be loaded (assume something went wrong when downloading the
	cover file); re-downloading the cover manually can solve the problem

Mon, 17 Dec 2007 15:00:17 +0100 <thp@perli.net>
Fix typo in last commit

	* src/gpodder/libipodsync.py: Fix typo in last commit

Mon, 17 Dec 2007 11:21:10 +0100 <thp@perli.net>
Modify played handling in iPod sync when "on sync mark played" is active

	* src/gpodder/libipodsync.py: Don't copy played state from PC to iPod
	if the on_sync_mark_played option is set

Sat, 15 Dec 2007 15:58:23 +0100 <thp@perli.net>
Merge patch from Leonid Ponomarev to gdfs

	* doc/dev/gdfs/gdfs-init.py: Merge patch from Leonid Ponomarev to add
	support for the system's native encoding, based on the $LANG
	environment variable. This should add support for episodes and
	channels with international characters as titles

Sat, 15 Dec 2007 15:11:46 +0100 <thp@perli.net>
Updated Dutch translation by Pieter De Decker

	* bin/gpodder: We're in development again: "+svn"
	* data/po/nl.po: Updated Dutch translation from Pieter De Decker

Thu, 13 Dec 2007 08:32:54 +0100 <thp@perli.net>
gPodder 0.10.3 "A Stop at Willoughby" released

	* bin/gpodder: gPodder 0.10.3 released :)
	* README: gPodder 0.10.3 released :)
	* doc/man/gpodder.1: gPodder 0.10.3 released :)
	* data/messages.pot: Updated from source
	* data/po/de.po: Updated German translation
	* data/po/*.po: Updated from messages.pot

Thu, 13 Dec 2007 08:02:29 +0100 <thp@perli.net>
Link the gPodder Documentation Wiki from the help pages

	* data/gpodder.glade: Help menu: gPodder Homepage (instead of website)
	and Documentation Wiki (instead of Mailing list)
	* src/gpodder/gui.py: Open gPodder Wiki instead of mailing list page

Wed, 12 Dec 2007 21:39:03 +0100 <thp@perli.net>
Remove TODO file from MANIFEST.in

	* MANIFEST.in: Of course we have to remove non-existing files from the
	MANIFEST.in file, too.. so TODO is now finally gone :)

Wed, 12 Dec 2007 21:30:00 +0100 <thp@perli.net>
Manage TODO list on the gPodder Wiki

	* TODO: Removed; new location: http://gpodderwiki.jottit.com/todo

Wed, 12 Dec 2007 20:55:00 +0100 <thp@perli.net>
Configuration for "old" episodes; automatically remove old episodes

	* src/gpodder/config.py: New boolean auto_remove_old_episodes
	configuration option that defaults to False (remove on startup)
	* src/gpodder/gui.py: Add code to automatically remove old, unplayed
	episodes on startup if the specific configuration options have been
	set; connect config manager to GUI items for the preferences dialog
	* data/gpodder.glade: Add checkbox for automatically removing old,
	unplayed episodes from gPodder on startup and a spinbutton to set the
	amount of days after which an episode is considered "old"

Wed, 12 Dec 2007 19:44:15 +0100 <thp@perli.net>
Merged episode locking patch from Paul Rudkin

	* src/gpodder/gui.py: Merged "lock episodes" patch to mark episodes as
	locked, patch by Paul Rudkin <paul@thegithouse.com>
	* data/gpodder.glade: Add menu item for toggle locked status
	* src/gpodder/libgpodder.py: Add "locked" history
	* src/gpodder/libpodcasts.py: When requesting a status icon, also draw
	the "Locked" status; is_locked() in podcastItem
	* src/gpodder/util.py: Added code for drawing a padlock icon on top of
	another (file type) icon; this is used for the "lock episodes" feature

Tue, 11 Dec 2007 22:10:03 +0100 <thp@perli.net>
Updated TODO list

	* TODO: Updated TODO list

Mon, 10 Dec 2007 09:42:06 +0100 <thp@perli.net>
Move observer code out of DownloadStatusManager into ObservableService

	* src/gpodder/services.py: Move out all observer-related code like
	registration, unregistration and notification to a new
	ObservableService class; subclass ObservableService in
	DownloadStatusManager; this makes the observer code in
	DownloadStatusManager re-usable (will be needed for new sync code)

Mon, 10 Dec 2007 09:33:26 +0100 <thp@perli.net>
Selective iPod episode clean-up; "delete older than X days"

	* src/gpodder/config.py: Add episode_old_age configuration variable;
	is an integer, defaults to 7. This is the number of days after which
	an episode will be considered "old"
	* src/gpodder/gui.py: iPod cleanup is now done selectively using the
	episode selector dialog; the code has been split, because we do not
	yet have an episode selector dialog for FS-based sync; add "Downloaded
	x days ago" column to "Delete old episodes" dialog and a corresponding
	button; call the callback even when no episodes are selected in
	gPodderEpisodeSelector
	* src/gpodder/libipodsync.py: Class variables of gPodder_iPodSync
	moved to __init__ to be instance variables (this should fix a bug that
	crops up now that we can selectively delete episodes); remove_tracks()
	and clean_playlist() have been modified/added to support new episode
	selector deletion code
	* src/gpodder/libpodcasts.py: Move is_played() to podcastItem from
	podcastChannel (it really belongs to the item; this makes code more
	readable in other parts of the codebase); add age_in_days(), is_old(),
	get_age_string() and age_prop to podcastItem
	* src/gpodder/util.py: New function: file_modification_datetime();
	returns a datetime.datetime instance of the MTIME (modification
	timestamp) of the filename given as parameter or None if the filename
	cannot be determined; this is used for the "old episodes" feature

Sun, 09 Dec 2007 16:45:11 +0100 <thp@perli.net>
Make has_converter() a bit more intelligent in detecting extensions

	* src/gpodder/libconverter.py: Convert given extension to lowercase
	and strip a leading "." from the extension, so calling code can also
	give the second value of the os.path.splitext() result directly to
	has_converter()

Sun, 09 Dec 2007 13:20:49 +0100 <thp@perli.net>
Fix pre-setting code for filechooser buttons; Patch by Paul Rudkin

	* src/gpodder/config.py: Fix pre-setting code for filechooser-related
	code; use set_current_folder() instead of set_filename()
	* src/gpodder/gui.py: Fix pre-setting code for filechooser-related
	code; thanks to Paul Rudkin <paul@thegithouse.com> for the patch

Thu, 06 Dec 2007 09:37:57 +0100 <thp@perli.net>
Support for itms:// links (direct links to the Apple iTunes Music Store)

	* src/gpodder/util.py: Support direct itms:// links by splitting out
	the iTunes Podcast links parsing routines. This should put us in for
	some nice iTunes podcast link support that will automagically
	translate iTunes podcast links to the correct RSS feed URL

Thu, 06 Dec 2007 09:29:09 +0100 <thp@perli.net>
Support for iTunes Podcast links (http://phobos.apple.com/...)

	* src/gpodder/util.py: Add support for subscribing to iTunes Podcast
	links (those with phobos.apple.com); new functions:
	parse_itunes_xml(), http_get_and_gunzip() and itunes_dicover_rss()

Thu, 06 Dec 2007 09:15:57 +0100 <thp@perli.net>
Added Galician translation from Teo Ramirez

	* data/gpodder.desktop: Added Spanish and Galician translations;
	thanks to Teo Ramirez <teoramirez@gmail.com>
	* data/messages.pot: Updated from source
	* data/po/de.po: Updated
	* data/po/gl.po: Added NEW Galician (gl) translation by Teo Ramirez
	* data/po/*.po: Updated from source
	* setup.py: Added Galician (gl) translation by Teo Ramirez

Thu, 06 Dec 2007 08:35:12 +0100 <thp@perli.net>
Sort channel list (finally ;)

	* src/gpodder/libpodcasts.py: Sort channels by lowercase title before
	returning the channel list in load_channels(); this automagically
	makes gPodder's channel list always sorted :)
	Thanks to FriedBunny <friedbunny@kulturny.com> for suggesting this and
	sending in an intial patch that led to this patch =)
	* TODO: Remove implemented item: Sort channel list

Tue, 04 Dec 2007 23:28:27 +0100 <thp@perli.net>
Do grayscale "pill" instead of theme-based colors (for bad themes)

	* src/gpodder/draw.py: Always draw the "pill" in semi-transparent
	black/grey shades so it will work for all GTK themes (even Ubuntu's)

Mon, 03 Dec 2007 21:35:56 +0100 <thp@perli.net>
Update channel navigator when iPod/MP3 player sync has finished

	* src/gpodder/gui.py: Update channel navigator when iPod sync has
	finished, so we can update the "played" status in the channel
	navigator when this status has changed after we've synced ("on sync
	mark played" option)

Mon, 03 Dec 2007 21:24:17 +0100 <thp@perli.net>
Add option to mark episodes as played after transfer to device

	* data/gpodder.glade: Option added to preferences dialog
	* src/gpodder/config.py: Add option "on_sync_mark_played"; will mark
	an episode as played when it gets transferred to a device
	* src/gpodder/gui.py: Glue code for GUI + gpodder.config
	* src/gpodder/libipodsync.py: On sync, mark episode as played if the
	user has selected the "on_sync_mark_played" option
	* TODO: Remove implemented/integrated items

Sat, 01 Dec 2007 15:19:29 +0100 <thp@perli.net>
Fix a fatal bug with first-run that prevents channel list saving

	* src/gpodder/util.py: Always use a file's parent directory to get the
	free disk space and return zero free disk space when the parent
	directory does not exist

Thu, 29 Nov 2007 08:53:36 +0100 <thp@perli.net>
Support for itpc:// URLs

	* src/gpodder/util.py: Add support for adding "itpc://" URLs (these
	are simply http:// URLs with a different schema, for iTunes)

Tue, 27 Nov 2007 22:59:26 +0100 <thp@perli.net>
Draw channel stats (unplayed, downloaded) on channel navigator

	* bin/gpodder: We're in development again, so add "+svn"
	* src/gpodder/draw.py: Added
	* src/gpodder/gui.py: Fix import of renamed "channels_to_model";
	re-assign new column numbers for treeChannels' data model; add
	cell renderer for pill pixbuf and remove cell renderer for status text
	* src/gpodder/libpodcasts.py: Add episode_is_new() function to
	podcastChannel to check if an episode can be considered "new"; use the
	episode_is_new function in get_new_episodes; add get_episode_stats()
	after an idea from Paul Rudkin <paul@thegithouse.com>; re-factor
	channels_to_model and clean out old, unused code and columns

Mon, 26 Nov 2007 08:57:04 +0100 <thp@perli.net>
gPodder 0.10.2 "Ein schweineschnauzen Sandwich, bitte!" released

	* bin/gpodder: gPodder 0.10.2 released :)
	* doc/man/gpodder.1: gPodder 0.10.2 released :)
	* README: gPodder 0.10.2 released :)

Mon, 26 Nov 2007 08:52:49 +0100 <thp@perli.net>
Translation updates

	* data/messages.pot: Refreshed from source
	* data/po/*.po: Refreshed from messages.pot
	* data/po/de.po: Updated German translation

Sun, 25 Nov 2007 11:50:46 +0100 <thp@perli.net>
Make sure there is enough free disk space when saving OPML channel list

	* src/gpodder/gui.py: Notify user that there's some problem saving the
	current channel list when save_channels() return False
	* src/gpodder/libpodcasts.py: Pass-through the return value of
	gpodder.opml.Exporter.write so calling code knows if saving the
	channel list was successful or not
	* src/gpodder/opml.py: Check free disk space before saving OPML
	channels in Exporter.write; thanks to Jens Thiele <karme@berlios.de>
	for reporting this bug on the Debian BTS (Closes: Debian Bug #452490)

Thu, 22 Nov 2007 21:52:35 +0100 <thp@perli.net>
Don't send Referer header when downloading episodes

	* src/gpodder/download.py: Some podcasts now implement an
	"anti-bandwidth-theft" code that should provide other websites from
	not linking to the episodes; as we have sent a Referer header
	containing the RSS feed URL, this causes problems; Referer header
	sending is therefore disabled now

Sun, 18 Nov 2007 15:33:50 +0100 <thp@perli.net>
TODO items from Katy G. B.

	* TODO: Updated TODO list

Sat, 17 Nov 2007 18:38:36 +0100 <thp@perli.net>
Backwards-compatibility for PyGTK less than 2.12 (for GtkTooltip)

	* src/gpodder/gui.py: Do not hook up tooltip handlers when we are
	using PyGTK less than 2.12 (which introduced the gtk.Tooltip API)

Thu, 15 Nov 2007 11:07:42 +0100 <thp@perli.net>
Check free disk space before copying files to iPod

	* src/gpodder/libipodsync.py: Check if the iPod's filesystem has
	enough free disk space before copying files over to it, as to not
	corrupt the iTunesDB in certain situations and fail when disk is full;
	thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report
	* src/gpodder/util.py: Add get_free_disk_space() function that
	calculates the free (user-available) disk space on a given path

Wed, 14 Nov 2007 21:55:18 +0100 <thp@perli.net>
Add informative tooltips to channel navigator

	* src/gpodder/gui.py: Add tooltips to channel navigator that show a
	bigger cover image, the title, description, url and used disk space
	* src/gpodder/libpodcasts.py: Add save_dir_size property to
	podcastChannel that contains the disk usage of the channel's save_dir;
	this can be manually updated by calling update_save_dir_size() and
	will automatically be updated when the GUI code hooks into the
	channel; also add get_cover_pixbuf() that returns a pixbuf of the
	cover for a given size or None if there is no valid cover file

Wed, 14 Nov 2007 19:19:11 +0100 <thp@perli.net>
Slipstream code (enumerate instead of simple position tracking)
	* src/gpodder/libipodsync.py: Use enumerate() to iterate over a list
	of episodes instead of keeping track of the position "by hand"

Wed, 14 Nov 2007 19:17:51 +0100 <thp@perli.net>
Ignore initial window events from GtkWindow in Config

	* src/gpodder/config.py: Add a flag to config manager to ignore window
	events until the window has been realized; then, start taking position
	and size updates

Mon, 12 Nov 2007 20:25:39 +0100 <thp@perli.net>
Improve caching for HTTP redirects and minor errors; cache clean-up

	* src/gpodder/cache.py: Cache content when it comes from a HTTP
	redirect (301, 302, 307); cache feeds even with parsing errors, so we
	can "fill" our cache and not download on every startup
	* src/gpodder/libpodcasts.py: Add cache clean-up code after loading
	channels; this should keep the feedcache.db file smaller for users
	that like to try out new channels (or have used gPodder for a while)

Sun, 11 Nov 2007 14:24:17 +0100 <thp@perli.net>
Better file extension guessing for URLs

	* src/gpodder/util.py: Improve file_extension_from_url() by adding
	additional checks for known good extensions and recurse into the query
	string if it looks like an URL; this should fix compatibility problems
	for feeds with strange URLs; should provide more reliable guessing;
	thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report

Fri, 09 Nov 2007 10:05:36 +0100 <thp@perli.net>
Fix format_filesize() usage in episodes selector and podcastItem

	* src/gpodder/gui.py: Use the correct (config-using) format_filesize()
	function to generate the total size string in the episode selector
	* src/gpodder/libpodcasts.py: Use the correct (config-usig
	format_filesize() function to generate the total size string in
	podcastItem; thanks to Pieter De Decker <pdedecker@gmail.com> for
	pointing that out
	* data/gpodder.glade: Use "Preferences" instead of "Preferences..."
	which feels a bit better in the GUI

Thu, 08 Nov 2007 21:25:19 +0100 <thp@perli.net>
Add "gPodder download folder synchronizer" scripts to repository

	* doc/dev/gdfs/gdfs-check.py: Added
	* doc/dev/gdfs/gdfs-init.py: Added
	* doc/dev/gdfs/README: Added

Thu, 08 Nov 2007 20:01:13 +0100 <thp@perli.net>
The mighty episode selector dialog and some menu re-arrangements

	* src/gpodder/gui.py: Move the "center_on_widget" keyword-based window
	positioning code to GladeWidget to be universally usable; update
	"Device" menu item on startup; new functions: delete_episode_list()
	and download_episode_list() that both operate on lists of episodes;
	add code for invoking gPodderEpisodeSelector for deleting old
	episodes; re-work on_itemDownloadAllNew_activate to use the episode
	selector instead of hand-crafting a message dialog text; add
	update_item_device() function that will handle the hiding, showing and
	renaming of the "Device" menu in the menubar; clean-up
	gPodderProperties with callback_finished setting (now kwarg-based);
	new, might, fancy, customizable and uber-sexy gPodderEpisodeSelector
	that will prove to be useful in some places in our codebase: it
	basically allows the user to select a subset of episodes from a given
	list in a quite sophisticated way; new "delete old episodes" menu item
	added for cleaning up gPodder's downloads
	* src/gpodder/libpodcasts.py: Add delete_from_disk() convenience
	method to podcastItem; other convenience properties and functions
	needed for the new episode selector dialog: pubdate_prop,
	get_filesize_string(), filesize_prop, get_channel_title(),
	channel_prop, get_played_string(), played_prop
	* data/gpodder.glade: new gPodderEpisode dialog; re-structuring of
	gPodder's main menu to be more usable and more compact; also added the
	Ctrl+K "Remove old episodes" menu item; also use the correct
	"multimedia-player" icon name of a not really representative icon

Thu, 08 Nov 2007 12:07:30 +0100 <thp@perli.net>
Support syncing to FS-based MP3 players without subfolders

	* data/gpodder.glade: Add checkbox "Create a subfolder for each
	channel" to preferences dialog and rename some widgets
	* src/gpodder/config.py: Add boolean "fssync_channel_subfolders"
	option that defaults to True (create subfolder for each channel)
	* src/gpodder/gui.py: Hook up config option fssync_channel_subfolders
	to preferences dialog; do more intelligent widget hiding for the
	"Player" tab in the preferences dialog (only show relevant widgets)
	* src/gpodder/libipodsync.py: Only append channel name as subfolder to
	destination folder name when the "fssync_channel_subfolders" option is
	True; suggested by Paul Elliot <omahns.home@gmail.com>

Thu, 08 Nov 2007 11:28:17 +0100 <thp@perli.net>
Fix offline cache behaviour when time is not set

	* src/gpodder/cache.py: Return cached_content in offline mode when
	cached_content "is not None" (instead of cached_time "is not None")

Tue, 06 Nov 2007 12:37:41 +0100 <thp@perli.net>
Process events before connecting Config to gtk windows

	* data/gpodder.glade: Remove default size for main gPodder window, as
	this is now handled by the config manager
	* src/gpodder/config.py: Process GTK events in the event queue before
	connecting to the "configure-event" signal, so we won't get two
	configure events for the window for the initial size change

Mon, 05 Nov 2007 13:51:26 +0100 <thp@perli.net>
Add error reporting when download fails because of an I/O error

	* src/gpodder/download.py: Catch and handle I/O errors in
	DownloadThread and format and pass on messages to GUI code when
	required; thanks to Florian Richter <Florian_Richter@gmx.de> for
	suggesting this feature after having a full disk
	* src/gpodder/gui.py: Update tree view when adding a new episode;
	add new notification() method and pass this method through to
	DownloadThread, so it can present messages to the user (i.e. errors)

Mon, 05 Nov 2007 12:54:35 +0100 <thp@perli.net>
Use util.find_command in more places (mplayer detection, ...)

	* src/gpodder/libgpodder.py: Use util.find_command to detect the
	existence of the "gnome-btdownload" command and spit out a warning log
	message when the command is not available
	* src/gpodder/libipodsync.py: Use util.find_command to check for an
	installed mplayer binary (instead of relying on os.system("which...")

Mon, 05 Nov 2007 01:12:15 +0100 <thp@perli.net>
Better command detection for the converter library

	* src/gpodder/libconverter.py: Detect existence of commands before
	invoking them for converting files; based on a patch by
	Nick (nikosapi.org); ConverterCollection is now a dict itself :)
	* src/gpodder/util.py: Add new find_command() function that will
	search the system's PATH for a specific executable command

Mon, 05 Nov 2007 00:21:39 +0100 <thp@perli.net>
Remove extracted cover art when deleting episode files

	* src/gpodder/util.py: Apply modified version of a patch from
	Nick (nikosapi.org) that is better suited for deleting cover art that
	has been extracted with the new eyeD3 cover art extraction code

Mon, 05 Nov 2007 00:17:12 +0100 <thp@perli.net>
Patch from Nick (nikosapi) to support eyeD3 cover art extraction

	* src/gpodder/libipodsync.py: Apply modified version of a patch from
	Nick (nikosapi.org) to utilize eyeD3 for cover art extraction in iPod
	sync code; remove dependency on PyID3
	* README: PyID3 is not a dependency anymore, as we can now use eyeD3
	for the same purpose (cover art extraction)

Sat, 03 Nov 2007 14:14:09 +0100 <thp@perli.net>
Fix format_filesize() function to be standards-conformant (unit prefixes)

	* src/gpodder/config.py: Add "use_si_units" configuration option; if
	True, the user will see SI units (MB, kB, ...); if False (the
	default); the user will see binary-prefix units (MiB, KiB, ..)
	* src/gpodder/libgpodder.py: Add pass-through function
	"format_filesize()" to gPodderLib that combines the
	util.format_filesize function with the gPodder-specific config option
	* src/gpodder/util.py: Apply a modified patch from Gerrit Sangel
	<z0idberg@gmx.de> to add support for SI units and binary prefixes to
	format_filesize(); this makes the function standards-compliant
	* src/gpodder/download.py: Updated to use new format_filesize
	* src/gpodder/gui.py: Updated to use new format_filesize
	* src/gpodder/libpodcasts.py: Updated to use new format_filesize

Fri, 02 Nov 2007 17:28:05 +0100 <thp@perli.net>
New Configuration/Settings Manager; massive code clean-ups

	* src/gpodder/config.py: Added new Configuration Manager that
	automatically keeps track of saving changed values and is also able to
	watch GTK widgets for changes; this should simplify our settings
	management and give us a single place for maintaining settings
	* src/gpodder/download.py: Access settings from new config manager
	* src/gpodder/gui.py: Make use of new config manager to connect
	widgets and settings from the GUI directly to the config manager;
	remove manual loading and saving of settings; auto-connect as much as
	possible in the gPodderProperties dialog to get real-time automatic
	configuration saving; fix the other code to use new config manager
	* src/gpodder/libgpodder.py: MASSIVE code clean-up; removed lots of
	old cruft and dead code that has been lying around in libgpodder for
	some time now; remove configuration code; utilize config manager;
	unify DownloadHistory+PlaybackHistory in new HistoryStore class;
	reduce number of import statements
	* src/gpodder/libipodsync.py: Access settings from new config manager
	* src/gpodder/libplayers.py: Removed dotdesktop_command()
	* src/gpodder/libpodcasts.py: Move locking functionality into this
	module, as locking is only used here; access config from new manager
	* src/gpodder/services.py: Use config manager to get settings
	* src/gpodder/util.py: Add format_desktop_command() function, based on
	the dotdesktop_command() function from libplayers

Fri, 02 Nov 2007 07:49:38 +0100 <thp@perli.net>
Add ability to open download folder from channel's context menu

	* src/gpodder/gui.py: Add "Open download folder" menu item to channel
	navigator context menu
	* src/gpodder/libgpodder.py: Add open_folder() method that will open
	the DE's default folder browser via "xdg-open"

Thu, 01 Nov 2007 15:29:00 +0100 <thp@perli.net>
Limit filename on FS-based sync to 50 characters

	* src/gpodder/libipodsync.py: Do not allow extremely long file names
	that could theoretically be generated by using data from RSS feeds;
	this is needed to make FAT-based drives work with files that would
	otherwise have file names that are too long

Wed, 31 Oct 2007 15:22:32 +0100 <thp@perli.net>
Escape RSS-provided strings in Pango markup

	* src/gpodder/gui.py: Escape strings in Pango markup
	* bin/gpodder: we're in development again, so "+svn"

Sun, 28 Oct 2007 16:27:14 +0100 <thp@perli.net>
gPodder 0.10.1 "Nukular, das Wort heißt Nukular" released

	* bin/gpodder: gPodder 0.10.1 released :)
	* doc/man/gpodder.1: gPodder 0.10.1 released :)
	* README: gPodder 0.10.1 released :)
	* data/messages.pot: Refreshed template from source files
	* data/po/de.po: Updated German translation for the 0.10.1 release
	* data/po/*.po: Refreshed translation files from template

Sun, 28 Oct 2007 15:25:56 +0100 <thp@perli.net>
Add "Save episode to file" handling to episode list context menu

	* data/gpodder.glade: Use a stock "Save As" button for the "Copy
	episode to file" button
	* src/gpodder/gui.py: Add new show_copy_dialog() method to GladeWidget
	that shows a copy dialog where a user can copy a file to a selected
	destination (this is used for "Save episode to file"); use
	show_copy_dialog in "Save As" in gPodderEpisode; add "Save episode to
	folder" menu item in episode list context menu and use
	show_copy_dialog to carry out the user interaction

Sun, 28 Oct 2007 13:30:40 +0100 <thp@perli.net>
Allow "https://" URLs for episode URLs, as we can handle these, too

	* src/gpodder/util.py: Allow "https://" as a valid URL scheme, as we
	can handle https URLs, thanks to Aravind Seshadri
	<aravind@aravind.name> who initially reported this bug

Thu, 25 Oct 2007 14:00:01 +0200 <thp@perli.net>
Sync videos to the "Video Podcasts" playlist instead of the "Video" menu

	* src/gpodder/libipodsync.py: Merged patch from Nicolas Quienot
	<niqooo@gmail.com> to sync videos to the "Video Podcasts" menu instead
	of the "Videos" menu, as documented on http://ipodlinux.org/ITunesDB

Tue, 23 Oct 2007 09:24:52 +0200 <thp@perli.net>a
sync_filename in podcastItem; cleanup; hide extra progressbar on transfer

	* src/gpodder/gui.py: Use podcastItem's sync_filename(); hide the
	unnecessary second progressbar when only syncing one channel (i.e.
	when clicking on the "transfer" button in the main window
	* src/gpodder/libgpodder.py: Remove unneeded lexists import and
	warning; clean-up
	* src/gpodder/libipodsync.py: Use podcastItem's sync_filename()
	* src/gpodder/libpodcasts.py: Add sync_filename() to podcastItem,
	returns the custom_sync_name or the title of the episode, based on the
	user's configuration settings for FS-based MP3 player sync

Sun, 07 Oct 2007 14:38:31 +0200 <thp@perli.net>
Add wishlist items to TODO list from Paul and Wilfred

	* TODO: New wishlist items, ideas and suggestions

Sat, 06 Oct 2007 12:39:57 +0200 <thp@perli.net>
Limit download progress status updates to reduce CPU load

	* src/gpodder/download.py: Limit the amount of status updates the
	download threads send to the DownloadStatusManager to one per second;
	this should make gPodder less CPU-intensive with many parallel
	downloads; thanks to Wilfred van Rooijen for reporting and testing

Tue, 02 Oct 2007 17:59:29 +0200 <thp@perli.net>
Update channel models (icons) after iPod synchronization

	* src/gpodder/gui.py: Call update_model() on each channel after an
	iPod sync, so we can update the played state on the available episodes
	lists when played state was changed by the iPod sync

Sat, 29 Sep 2007 14:12:15 +0200 <thp@perli.net>
Fix loading of channel metadata (load auth data and settings)

	* src/gpodder/libpodcasts.py: Load channel metadata when loading a
	podcastChannel object from OPML/LocalDB. This fixes a problem with
	authentication data being not loaded and also fixes a bug when the
	custom-set channel title was not correctly used throughout the GUI.
	Thanks to Nick (nikosapi) for reporting and providing a patch

Tue, 25 Sep 2007 22:02:19 +0200 <thp@perli.net>
Finally remove Desktop symlink code; several compatibility fixes

	* src/gpodder/download.py: Prevent divide-by-zero errors when
	calculating download speed
	* src/gpodder/gui.py: Prevent divide-by-zero errors when calculating
	percentage done in code for moving the downloaded items folder
	* src/gpodder/libgpodder.py: Remove the "Symlink on Desktop" code,
	because it's not GUI-accessible anymore and we didn't use it anyway
	* src/gpodder/opml.py: Better local filename detection by using
	os.path.exists() instead of .startswith('/'); this is also good for
	cross-platform compatibility where parts don't usually start with a
	forward slash (i.e. Win32)

Mon, 24 Sep 2007 00:09:44 +0200 <thp@perli.net>
Channel list selection bug fixes

	* src/gpodder/gui.py: Fix some channel list-related problems and
	annoyances, based on a patch by Nick (nikosapi)
	* bin/gpodder: We're in development again, so "+svn"

Fri, 21 Sep 2007 02:07:43 +0200 <thp@perli.net>
gPodder 0.10.0 "Hier spricht Frank Drebin" released

	* bin/gpodder: gPodder 0.10.0 released :)
	* doc/man/gpodder.1: gPodder 0.10.0 released :)
	* README: gPodder 0.10.0 released :) (and: updated dependencies)
	* TODO: Updated TODO list (some items are done for 0.10.0 :)

Fri, 21 Sep 2007 02:05:10 +0200 <thp@perli.net>
Updated translations from Rosetta (Launchpad.net)

	* data/po/es.po: Spanish translation by Julio Acuña
	* data/po/pt.po: Portuguese translation by Joel Calado (completed :)

Fri, 21 Sep 2007 01:46:38 +0200 <thp@perli.net>
Fix problems with path selection in treeChannels

	* src/gpodder/gui.py: Simple bugfix

Fri, 21 Sep 2007 00:32:51 +0200 <thp@perli.net>
Center gPodderEpisode on treeAvailable for less mouse hopping

	* src/gpodder/gui.py: If possible, center the gPodderEpisode dialog
	window on the treeAvailable, because that makes the position of the
	opened dialog more predictable and easier to use (as if the
	gPodderEpisode dialog was "inside" the treeView from which it opened)

Fri, 21 Sep 2007 00:07:49 +0200 <thp@perli.net>
Don't translate feed format string examples

	* src/gpodder/gui.py: Don't mark format string examples as
	translatable

Wed, 19 Sep 2007 17:21:09 +0200 <thp@perli.net>
Small bugfix for updating treeChannels when its model changes

	* src/gpodder/gui.py: Bugfix

Wed, 19 Sep 2007 16:57:41 +0200 <thp@perli.net>
Removed channel combobox, drag'n'drop improvements + new channel cover editor

	* data/gpodder.glade: Remove comboAvailable in gPodder (main window);
	add download+clear button in gPodderChannel, rename some items that
	are now used in code; make the channel navigator non-shrinkable (so
	it is always visible, because we don't have comboAvailable anymore)
	* src/gpodder/gui.py: Remove support for the channel combo box,
	also known as comboAvailable; clean-up DND code and make treeChannels
	the only DND target in the main window; remove some unnecessary
	updating of the channel list (calls to updateComboBox);
	Changes for the gPodderChannel dialog: Don't automatically download
	channel cover when dialog pops up; add "Download" and "Clear" buttons
	to the cover editor; add DND support for dropping local files or
	images from the web browser to the cover editor (for setting custom
	covers on channels with bad or no cover)
	* src/gpodder/libgpodder.py: Don't abort get_image_from_url() if the
	URL is invalid, but the image has already been downloaded (because we
	read the downloaded image in the code when it exists, without URL)

Wed, 19 Sep 2007 14:23:40 +0200 <thp@perli.net>
Center feed update dialog on main window; scroll reset in chan.navigator
	* src/gpodder/gui.py: Reset the current scroll position of the channel
	navigator when re-loading the channel list; this fixes an annoyance
	that Alistair Sutton <alistair.sutton@gmail.com> reported when dealing
	with a HUGE channel list (more than 50 channels); also removed the
	scroll position reset code from treeAvailable, as we already managed
	to only edit the model instead of re-loading it every time; added code
	to really center the feed update dialog on gPodder's main window

Tue, 18 Sep 2007 20:15:56 +0200 <thp@perli.net>
Replace wget with new gpodder.download module; User-agent support

	* bin/gpodder: Set "gpodder.user_agent" field on startup; remove check
	for wget, as this is not needed anymore
	* src/gpodder/cache.py: Clean-up; remove old logging code; add support
	for gpodder.user_agent; log info when there is an error in parsing the
	feed, so the user knows why this feed is not cached
	* src/gpodder/console.py: Remove DownloadPool, Use new
	gpodder.download module for carrying out downloads, remove
	wget_version() tester, as this is not needed anymore =)
	* src/gpodder/download.py: Added new downloader module that uses
	urllib and some custom classes and functions to provide the equivalent
	functionality of the obsolete "libwget", but without the wget
	dependency and with better accuracy (progress reporting, etc..)
	* src/gpodder/gui.py: Utilize new gpodder.download module instead of
	libwget
	* src/gpodder/__init__.py: Add "user_agent" variable to the gpodder
	module that holds the value of the "User-agent" header to send to web
	servers when requesting OPMLs, Feeds or download data
	* src/gpodder/opml.py: Add support for sending the User-agent header
	* src/gpodder/services.py: Make the progress column a float column to
	have smoother progress indicuation; add the "acquired" keyword
	argument to s_release(); default 'speed' to a translated "Queued"
	* src/gpodder/libwget.py: Removed
	* doc/dev/redhat-wget-output.txt: Removed

Tue, 18 Sep 2007 02:30:04 +0200 <thp@perli.net>
Refreshed pot files and po templates; updated German translation

	* data/messages.pot: Refreshed from current source
	* data/po/de.po: Refreshed and updated translation
	* data/po/*.po: Refreshed from new .pot file

Tue, 18 Sep 2007 02:19:19 +0200 <thp@perli.net>
Imported updated translations from Rosetta (Launchpad.net)

	* data/po/it.po: Italian translation updated by FFranci72
	* data/po/nl.po: Dutch translation updated by Roel Groeneveld
	* data/po/pt.po: Portuguese translation updated by Joel Calado

Tue, 18 Sep 2007 02:14:19 +0200 <thp@perli.net>
Offline support for feedcache, faster startup, code simplification

	* src/gpodder/cache.py: Add support for "offline" keyword argument
	* src/gpodder/gui.py: Make intelligent use of "offline" keyword
	argument when passed to load_channels(); simplify code for selecting
	the active channel in updateComboBox()
	* src/gpodder/libpodcasts.py: Pass-through of "offline" keyword
	argument in all relevant function calls

Sat, 15 Sep 2007 16:22:28 +0200 <thp@perli.net>
New LocalDB using DOM (removes python-xml dependency); channel context menu

	* bin/gpodder: Don't check for xml.sax package and modules anymore, as
	the dependency on python-xml has been removed with this release
	* data/gpodder.glade: Remove the "info" button for the current channel
	* src/gpodder/gui.py: Remove localdb-related code and adopt code for
	new LocalDB code; add context menu to channel navigator (edit/delete)
	* src/gpodder/libipodsync.py: Don't import "liblocaldb" module
	* src/gpodder/liblocaldb.py: Removed
	* src/gpodder/liblocdbreader.py: Removed
	* src/gpodder/liblocdbwriter.py: Removed
	* src/gpodder/liblogger.py: Add "traceback" keyword argument to the
	log() function; if "True" and in debugging mode, print traceback
	* src/gpodder/libpodcasts.py: Merge code from old liblocaldb and
	liblocdbreader/liblocdbwriter to this module as LocalDBWriter and
	LocalDBReader; customize podcastChannel to new LocalDB code
	* src/gpodder/libwget.py: Remove localdb-specific code (now obsolete)

Wed, 12 Sep 2007 23:07:23 +0200 <thp@perli.net>
Fix a bug when traversing directories with loop symlinks

	* src/gpodder/util.py: Don't dive into subdirectories that are
	symbolic links, this is to avoid a situation where looping symlinks
	result in the function dead-locking in a endless recursive loop,
	thanks to Bjørn Rasmussen <bjoernr@sensewave.com> for pointing that
	out and providing the necessary bug report to fix this issue

Sun, 09 Sep 2007 18:47:20 +0200 <thp@perli.net>
Mark episodes as downloaded/deleted when deleting episodes

	* src/gpodder/gui.py: Rename "Mark [...] as downloaded" to "Mark [...]
	as deleted" and mark episodes as downloaded when removing selected
	episodes that have not been downloaded yet, as suggested by Holger
	Leskien <holger leskien.com>
	* src/gpodder/libpodcasts.py: Fix problem when trying to delete
	episodes that have not been downloaded

Sat, 08 Sep 2007 16:45:21 +0200 <thp@perli.net>
Support for customized file names in MP3 player sync code

	* src/gpodder/gui.py: Add supporting code for reading/setting
	configuration options for the preferences dialog and a help display
	code that displays a guide on how to write custom sync name strings
	* src/gpodder/libgpodder.py: New configuration options:
	custom_sync_name (holds format string) and
	custom_sync_name_enabled (boolean, if the above string should be used)
	* src/gpodder/libipodsync.py: Use custom sync name format string and
	util's object_string_formatter() function to obtain a file name for
	the synchronized episode (or default to episode.title if disabled)
	* src/gpodder/libpodcasts.py: Add new property methods to podcastItem:
	basename (returns the basename of the URL, without extension) and
	published (returns the pubDate of the episode in YYYYMMDD format)
	* src/gpodder/util.py: New object_string_formatter() method that
	replaces {OBJECTNAME.ATTRNAME} substrings in a string with the
	corresponding values of passed-in keyword argument objects
	* data/gpodder.glade: Added preferences GUI elements

Wed, 05 Sep 2007 10:14:09 +0200 <thp@perli.net>
Check for installed python-xml package on startup (hard dependency)

	* bin/gpodder: Add dependency check for PyXML

Sun, 02 Sep 2007 15:01:48 +0200 <thp@perli.net>
Fix bug with default window title in gPodder window

	* src/gpodder/gui.py: Always set gPodder's default_title attribute

Sun, 02 Sep 2007 14:33:21 +0200 <thp@perli.net>
Updated Russian translation from Vladimir Zemlyakov

	* data/po/ru.po: Updated

Sun, 02 Sep 2007 14:23:17 +0200 <thp@perli.net>
More sanitizing hacks for ugly feeds we don't really like

	* src/gpodder/libpodcasts.py: Negotiate which enclosure to select from
	multiple enclosures, if there are more than one available; skip
	episodes with a buggy download URL (i.e. no supported URL scheme)
	* src/gpodder/util.py: Return "(unknown)" if file size cannot be
	determined from the string passed to format_filesize(); return "None"
	in file_type_by_extension() if the extension is an empty string

Fri, 31 Aug 2007 23:38:01 +0200 <thp@perli.net>
Handle enclosures (or lack thereof) better if fields are missing

	* src/gpodder/gui.py: Remove refetch_channel_list() function, as this
	is not called anywhere from the code (uh, how did i miss that?)
	* src/gpodder/libpodcasts.py: Be more liberal to enclosure tags
	without length or mime type; ignore episodes without enclosures (it's
	not len(enclosures) == 0, but the enclosures attribute doesn't even
	exist on entries without enclosures, so make sure to check for that

Fri, 31 Aug 2007 20:03:03 +0200 <thp@perli.net>
Use Python's webbrowser module for URL opening; channel dialog clean-up

	* bin/gpodder: Set version to 0.9.5+svn (this is where we are now)
	* data/gpodder.glade: Remove "cancel" button from gPodderChannel
	* src/gpodder/gui.py: Use "webbrowser" module for URL opening instead
	of relying on "gnome-open" to be available; remove event handler for
	gPodderChannel's "cancel" button

Thu, 30 Aug 2007 21:06:28 +0200 <thp@perli.net>
Dependency check for python-feedparser in bin/gpodder

	* bin/gpodder: Add dependency check and warning (with exit) if
	python-feedparser is not installed, as python-feedparser now is a
	dependency of gPodder

Thu, 30 Aug 2007 20:51:46 +0200 <thp@perli.net>
Support for modifying DownloadHistory and PlaybackHistory in GUI

	* data/gpodder.glade: Added menu items in gPodder main window
	* src/gpodder/gui.py: Add menu items to treeAvailable's context menu
	to toggle/set downloaded and played status on selected episodes
	* src/gpodder/libgpodder.py: Add del_item() function to
	DownloadHistory to support removing items from the history list;
	enhance history_mark_{played,downloaded}() functions for add/delete

Thu, 30 Aug 2007 20:46:48 +0200 <thp@perli.net>
Improved pubDate parsing; episode delete bugfix

	* src/gpodder/libpodcasts.py: Let feedparser parse the pubDate field
	of episodes and use new function in gpodder.util to convert the parsed
	pubDate to a string; bugfix for remove downloaded episode by URL
	* src/gpodder/util.py: Add updated_parsed_to_rfc2822() function that
	converts the "updated_parsed" field from feedparser to a RFC2822
	string

Thu, 30 Aug 2007 12:03:24 +0200 <thp@perli.net>
Remove obsolete documentation in doc/dev; cosmetic changes

	* data/po/Makefile: Upgrade to GPLv3
	* data/po/README: Mention i18n page on gPodder's website
	* doc/dev/build-deps-breezy.txt: Removed
	* doc/dev/debian.txt: Removed
	* doc/dev/i18n.txt: Removed
	* doc/dev/porting.txt: Removed
	* doc/dev/svncl.sed: Upgrade to GPLv3; modify look added and removed
	files

Wed, 29 Aug 2007 20:26:50 +0200 <thp@perli.net>
Upgrade to the GNU General Public License, Version 3

	* bin/gpodder: Upgrade to GPLv3
	* COPYING: Upgrade to GPLv3
	* doc/dev/copyright_notice: Upgrade to GPLv3
	* Makefile: Upgrade to GPLv3
	* README: Upgrade to GPLv3
	* setup.py: Upgrade to GPLv3
	* src/gpodder/*.py: Upgrade to GPLv3 (except for SimpleGladeApp and
	cache, as these are LGPL or other and do not originate from gPodder)

Wed, 29 Aug 2007 19:32:22 +0200 <thp@perli.net>
Integration changes, commit and ChangeLog migration

	* doc/dev/svncl.sed: Use tabs instead of 8 spaces for ChangeLog edit
	* Makefile: Make $EDITOR edit "ChangeLog" directly

Wed, 29 Aug 2007 19:17:36 +0200 <thp@perli.net>
Last batch of experimental change merges (up to svn r398)

	* doc/dev/tepache-howto.txt: Removed
	* doc/dev/tepache: Removed
	* src/gpodder/gui.py.orig: Removed
	* src/gpodder/libwget.py: Send progress = 0.0 on inital status update
	* src/gpodder/libpodcasts.py: Try to get episode metadata from several
	different properties of the corresponding feedparser entries; warn
	user when we couldn't get the episode title and try to get the episode
	title from the filename of the URL if we still have not found an
	episode title
	* src/gpodder/libgpodder.py: Add get_device_name() that returns a
	"nice" representative string of the currently selected device that can
	be used to represent the device in the GUI
	* src/gpodder/util.py: Return "(unknown)" string when bytesize in
	format_filesize() when the size has a negative value; make
	get_tree_icon() catch errors and be more corrent with icon creation;
	add get_first_line() function that extracts the first line of a string
	* src/gpodder/libipodsync.py: Add "divx" to list of video extensions
	* src/gpodder/services.py: DownloadStatusManager has a new observer
	notification: "progress-detail"; add unregister() functionality for
	observers; add request_progress_detail() function that can be used to
	force a "progress-detail" notification to be sent out to all relevant
	observers; remove get_url_by_iter() function as it is not needed
	anymore
	* src/gpodder/gui.py: Clean-up after tepache dependency removal; new
	GladeWidget base class that subclasses SimpleGladeApp and simplifies
	class creation for our gPodder windows; add context menu to
	treeAvailable; re-work play_or_download() and make it return a list of
	boolean indicators on which actions can be performed on the selected
	items; move show_message() and show_confirmation() to GladeWidget;
	disable editing of the URL in the channel info dialog, this simplifies
	code and editing the URL doesn't make so much sense anyway (adding the
	new url and removing the old does the same and is easier, code-wise);
	add support for cancelling downloads in the available podcasts view;
	support live status view and download cancelling in the gPodderEpisode
	dialog window by hooking up to DownloadStatusManager as observer
	* src/gpodder/SimpleGladeApp.py: Customize for gPodder (remove usage
	of weakref for keyword arguments -> properties of new object)
	* bin/gpodder: We're using a experimental development version now
	* data/gpodder.glade: Add progress bar and associated buttons to
	gPodderEpisode dialog
	* MANIFEST.in: Removed gpodder.py.orig inclusion
	* Makefile: Removed support for tepache

Wed, 29 Aug 2007 19:05:57 +0200 <thp@perli.net>
More changes from the experimental branch (up to svn r382)

	* src/gpodder/liblocdbreader.py: Clean-up
	* src/gpodder/libwget.py: Use "gpodder.services" instead of accepting
	a generic download status manager as constructor parameter; remove
	downloadStatusManager class (moved to gpodder.services)
	* src/gpodder/console.py: More clean-ups; use get_new_episodes()
	instead of duplicating code here; simplify the code for wget version
	detection
	* src/gpodder/libpodcasts.py: Improve channel/episode generation from
	feedparser objects (with error handling); utilize download status
	manager from "gpodder.services" instead of accepting a download status
	manager as parameter; clean up unneeded functions and rename some
	functions to make the code more readable; use util.get_tree_icon() for
	compositing a nice icon; remove the "played" column from the
	treemodel; add local_filename to treemodel
	* src/gpodder/liblocdbwriter.py: Clean-up
	* src/gpodder/libgpodder.py: Clean-up
	* src/gpodder/util.py: Add torrent_filename() function that tries to 
	extract the filename of the file a .torrent file contains; add
	file_extension_from_url() function that returns the file extension in
	a URL; add file_type_by_extension() that returns the type of a file
	based on its extension; add get_tree_icon() that loads a named icon
	and optionally adds a bullet to it (unplayed status indicator)
	* src/gpodder/libipodsync.py: Clean-up
	* src/gpodder/services.py: New module that currently contains the
	improved DownloadStatusManager and a single object that servces as
	download status manager for all parts of gpodder
	* src/gpodder/gui.py: Only one column for status/played; use
	"gpodder.services" for the download status manager; clean-up
	* src/gpodder/liblocaldb.py: Clean-up
	* bin/gpodder: Clean-up
	* data/gpodder.glade: Clean-up; removed "show played column"
	preference in gPodderProperties dialog

Wed, 29 Aug 2007 18:49:37 +0200 <thp@perli.net>
First import from experimental branch (up to svn r375)

	* src/gpodder/librssreader.py: Removed in favor of python-feedparser
	* src/gpodder/libwget.py: Percentage is now a float, don't set to 0
	when there has been an error
	* src/gpodder/console.py: Use {load,save}_channels methods; code
	cleanup and simplification
	* src/gpodder/cache.py: Add python-feedcache module from Doug Hellman
	* src/gpodder/libpodcasts.py: Use opml and feedcache for channel list
	and RSS reading; use shelve for new ChannelSettings class; clean-up
	podcastChannel and podcastItem; better TreeModel generator for
	podcastChannel (try to cache the model, only updates icons, etc...);
	remove downloadRss method in podcastChannel; move DownloadHistory and
	Playbackhistory to libgpodder; new load_channels() and save_channels()
	functions to save/load the channel list to an OPML file
	* src/gpodder/libgpodder.py: BIG clean-up; remove gPodderChannelWriter
	and gPodderChannelReader (this is now in libpodcasts as simple
	functions); add DownloadHistory and PlaybackHistory from libpodcasts; 
	* src/gpodder/gui.py: Use new functions for channel list
	loading/saving; only update treemodel for treeAvailable when it's
	really necessary
	* src/gpodder/liblocaldb.py: Remove unnecessary functions that have
	not been used for a while (treemodel-related); use load_channels()
	instead of gPodderChannelReader


Wed, 29 Aug 2007 18:31:16 +0200 <thp@perli.net>
	* ChangeLog: Older changes can be found on the gPodder website at
	http://gpodder.berlios.de/releases/0.9.5/ChangeLog