private bool ProcessMusicFolderPath(string path) { string[] itunes_music_uri_parts = ConvertToLocalUriFormat(path).Split(Path.DirectorySeparatorChar); string[] library_uri_parts = Path.GetDirectoryName(data.library_uri).Split(Path.DirectorySeparatorChar); string itunes_dir_name = library_uri_parts[library_uri_parts.Length - 1]; int i = 0; bool found = false; for (i = itunes_music_uri_parts.Length - 1; i >= 0; i--) { if (itunes_music_uri_parts[i] == itunes_dir_name) { found = true; break; } } if (!found) { var builder = new StringBuilder(path.Length - 17); for (int j = 3; j < itunes_music_uri_parts.Length; j++) { string part = itunes_music_uri_parts[j]; builder.Append(part); if (part.Length > 0) { builder.Append(Path.DirectorySeparatorChar); } } string local_path = builder.ToString(); System.Threading.Monitor.Enter(mutex); ThreadAssist.ProxyToMain(delegate { System.Threading.Monitor.Enter(mutex); using (var dialog = new ItunesMusicDirectoryDialog(local_path)) { if (dialog.Run() == (int)ResponseType.Ok) { data.local_prefix = dialog.UserMusicDirectory; data.user_provided_prefix = true; data.default_query = local_path; ok = true; } else { ok = false; } dialog.Destroy(); System.Threading.Monitor.Pulse(mutex); System.Threading.Monitor.Exit(mutex); } }); System.Threading.Monitor.Wait(mutex); System.Threading.Monitor.Exit(mutex); if (ok) { return(true); } else { LogError(data.library_uri, "Unable to locate iTunes directory from iTunes URI"); return(false); } } string[] tmp_query_dirs = new string[itunes_music_uri_parts.Length]; string upstream_uri; string tmp_upstream_uri = null; int step = 0; string root = Path.GetPathRoot(data.library_uri); bool same_root = library_uri_parts[0] == root.Split(Path.DirectorySeparatorChar)[0]; do { upstream_uri = tmp_upstream_uri; tmp_upstream_uri = root; for (int j = same_root ? 1 : 0; j < library_uri_parts.Length - step - 1; j++) { tmp_upstream_uri = Path.Combine(tmp_upstream_uri, library_uri_parts[j]); } tmp_upstream_uri = Path.Combine(tmp_upstream_uri, itunes_music_uri_parts[i - step]); data.fallback_dir = tmp_query_dirs[step] = itunes_music_uri_parts[i - step]; step++; } while (Banshee.IO.Directory.Exists(tmp_upstream_uri)); if (upstream_uri == null) { LogError(data.library_uri, "Unable to resolve iTunes URIs to local URIs"); return(false); } data.query_dirs = new string[step - 2]; data.default_query = string.Empty; for (int j = step - 2; j >= 0; j--) { if (j > 0) { data.query_dirs[j - 1] = tmp_query_dirs[j]; } data.default_query += tmp_query_dirs[j] + Path.DirectorySeparatorChar; } data.local_prefix = string.Empty; for (int j = 0; j <= library_uri_parts.Length - step; j++) { data.local_prefix += library_uri_parts[j] + Path.DirectorySeparatorChar; } return(true); }
private bool ProcessMusicFolderPath(string path) { string[] itunes_music_uri_parts = ConvertToLocalUriFormat (path).Split (Path.DirectorySeparatorChar); string[] library_uri_parts = Path.GetDirectoryName (data.library_uri).Split (Path.DirectorySeparatorChar); string itunes_dir_name = library_uri_parts[library_uri_parts.Length - 1]; int i = 0; bool found = false; for (i = itunes_music_uri_parts.Length - 1; i >= 0; i--) { if (itunes_music_uri_parts[i] == itunes_dir_name) { found = true; break; } } if (!found) { var builder = new StringBuilder (path.Length - 17); for (int j = 3; j < itunes_music_uri_parts.Length; j++) { string part = itunes_music_uri_parts[j]; builder.Append (part); if (part.Length > 0) { builder.Append (Path.DirectorySeparatorChar); } } string local_path = builder.ToString (); System.Threading.Monitor.Enter (mutex); ThreadAssist.ProxyToMain (delegate { System.Threading.Monitor.Enter (mutex); using (var dialog = new ItunesMusicDirectoryDialog (local_path)) { if (dialog.Run () == (int)ResponseType.Ok) { data.local_prefix = dialog.UserMusicDirectory; data.user_provided_prefix = true; data.default_query = local_path; ok = true; } else { ok = false; } dialog.Destroy (); System.Threading.Monitor.Pulse (mutex); System.Threading.Monitor.Exit (mutex); } }); System.Threading.Monitor.Wait (mutex); System.Threading.Monitor.Exit (mutex); if (ok) { return true; } else { LogError (data.library_uri, "Unable to locate iTunes directory from iTunes URI"); return false; } } string[] tmp_query_dirs = new string[itunes_music_uri_parts.Length]; string upstream_uri; string tmp_upstream_uri = null; int step = 0; string root = Path.GetPathRoot (data.library_uri); bool same_root = library_uri_parts[0] == root.Split (Path.DirectorySeparatorChar)[0]; do { upstream_uri = tmp_upstream_uri; tmp_upstream_uri = root; for (int j = same_root ? 1 : 0; j < library_uri_parts.Length - step - 1; j++) { tmp_upstream_uri = Path.Combine (tmp_upstream_uri, library_uri_parts[j]); } tmp_upstream_uri = Path.Combine (tmp_upstream_uri, itunes_music_uri_parts[i - step]); data.fallback_dir = tmp_query_dirs[step] = itunes_music_uri_parts[i - step]; step++; } while (Banshee.IO.Directory.Exists (tmp_upstream_uri)); if (upstream_uri == null) { LogError (data.library_uri, "Unable to resolve iTunes URIs to local URIs"); return false; } data.query_dirs = new string[step - 2]; data.default_query = string.Empty; for (int j = step - 2; j >= 0; j--) { if (j > 0) { data.query_dirs[j - 1] = tmp_query_dirs[j]; } data.default_query += tmp_query_dirs[j] + Path.DirectorySeparatorChar; } data.local_prefix = string.Empty; for (int j = 0; j <= library_uri_parts.Length - step; j++) { data.local_prefix += library_uri_parts[j] + Path.DirectorySeparatorChar; } return true; }