Merge lp:~zinga/noise/improve-import-large-libraries into lp:~elementary-apps/noise/trunk

Proposed by zinga
Status: Merged
Merged at revision: 1303
Proposed branch: lp:~zinga/noise/improve-import-large-libraries
Merge into: lp:~elementary-apps/noise/trunk
Diff against target: 127 lines (+34/-21) (has conflicts)
2 files modified
src/GStreamer/GStreamerTagger.vala (+22/-18)
src/LibraryManager.vala (+12/-3)
Text conflict in src/LibraryManager.vala
To merge this branch: bzr merge lp:~zinga/noise/improve-import-large-libraries
Reviewer Review Type Date Requested Status
Corentin Noël Approve
Review via email: mp+147575@code.launchpad.net

Description of the change

This fixes updating smart playlists with changed media only (like it was intended by recent changes) in order to decrease import time of large libraries. It doesn't completely fix bug #1082517 yet though.

To post a comment you must log in.
Revision history for this message
Corentin Noël (tintou) :
review: Approve
Revision history for this message
Corentin Noël (tintou) :
review: Approve
Revision history for this message
Corentin Noël (tintou) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/GStreamer/GStreamerTagger.vala'
2--- src/GStreamer/GStreamerTagger.vala 2012-11-26 18:46:20 +0000
3+++ src/GStreamer/GStreamerTagger.vala 2013-02-10 19:04:22 +0000
4@@ -36,8 +36,6 @@
5
6 public GStreamerTagger () {
7 uri_queue = new Gee.LinkedList<string> ();
8-
9- d = create_discoverer ();
10 }
11
12 private Gst.Discoverer? create_discoverer () {
13@@ -50,22 +48,33 @@
14 }
15
16 discoverer.discovered.connect (import_media);
17- discoverer.finished.connect (finished);
18+ discoverer.finished.connect (file_set_finished);
19
20 return discoverer;
21 }
22
23- private void finished () {
24- if (!cancelled && uri_queue.size > 0) {
25- d = create_discoverer ();
26- d.start ();
27-
28- for (int i = 0; i < DISCOVER_SET_SIZE && i < uri_queue.size; i++)
29- d.discover_uri_async (uri_queue.get (i));
30- } else {
31+ private void file_set_finished () {
32+ if (cancelled) {
33+ debug ("import cancelled");
34+ d.stop ();
35+ queue_finished ();
36+ }
37+ else if (uri_queue.size == 0) {
38 debug ("queue finished");
39+ d.stop ();
40 queue_finished ();
41 }
42+ else {
43+ import_next_file_set ();
44+ }
45+ }
46+
47+ private void import_next_file_set () {
48+ d = create_discoverer ();
49+ d.start ();
50+
51+ for (int i = 0; i < DISCOVER_SET_SIZE && i < uri_queue.size; i++)
52+ d.discover_uri_async (uri_queue.get (i));
53 }
54
55 public void cancel_operations () {
56@@ -73,19 +82,14 @@
57 }
58
59 public void discoverer_import_media (Gee.LinkedList<string> uris) {
60- int size = 0;
61 cancelled = false;
62 uri_queue.clear ();
63
64 foreach (string uri in uris) {
65 uri_queue.add (uri);
66-
67- d.start ();
68- if (size < DISCOVER_SET_SIZE) {
69- ++size;
70- d.discover_uri_async (uri);
71- }
72 }
73+
74+ import_next_file_set ();
75 }
76
77 private async void import_media (Gst.DiscovererInfo info, Error err) {
78
79=== modified file 'src/LibraryManager.vala'
80--- src/LibraryManager.vala 2013-02-10 00:42:23 +0000
81+++ src/LibraryManager.vala 2013-02-10 19:04:22 +0000
82@@ -582,14 +582,18 @@
83 debug ("--- MEDIA CLEARED ---");
84 }
85
86- private async void update_smart_playlists_async (Collection<Media> medias) {
87+ private async void update_smart_playlists_async (Collection<Media> media) {
88 Idle.add (update_smart_playlists_async.callback);
89 yield;
90
91 lock (_smart_playlists) {
92 foreach (var p in smart_playlists ()) {
93 lock (_media) {
94+<<<<<<< TREE
95 p.update_medias (medias);
96+=======
97+ p.add_medias (media);
98+>>>>>>> MERGE-SOURCE
99 }
100 }
101 }
102@@ -735,9 +739,14 @@
103 if (new_media.size < 1) // happens more often than you would think
104 return;
105
106+ // make a copy of the media list so that it doesn't get modified before
107+ // the async code (e.g. updating the smart playlists) is done with it
108+ var media = new Gee.LinkedList<Media> ();
109 var added = new Gee.LinkedList<int> ();
110
111 foreach (var s in new_media) {
112+ media.add(s);
113+
114 if (s.rowid == 0) {
115 s.rowid = _media_rowid;
116 _media_rowid++;
117@@ -749,8 +758,8 @@
118 }
119 media_added (added);
120
121- dbm.add_media (new_media);
122- update_smart_playlists_async.begin (new_media);
123+ dbm.add_media (media);
124+ update_smart_playlists_async.begin (media);
125 }
126
127 public void remove_media (Gee.LinkedList<Media> toRemove, bool trash) {

Subscribers

People subscribed via source and target branches