static UPnPError ParseRelocationMode(string argumentName, string relocateMediaItemsStr, out RelocationMode relocationMode) { switch (relocateMediaItemsStr) { case "None": relocationMode = RelocationMode.None; break; case "Relocate": relocationMode = RelocationMode.Relocate; break; case "ClearAndReImport": relocationMode = RelocationMode.Remove; break; default: relocationMode = RelocationMode.Remove; return new UPnPError(600, string.Format("Argument '{0}' must be of value 'Relocate' or 'ClearAndReImport'", argumentName)); } return null; }
public int UpdateShare(Guid shareId, ResourcePath baseResourcePath, string shareName, IEnumerable <string> mediaCategories, RelocationMode relocationMode) { throw new NotImplementedException(); }
public int UpdateShare(Guid shareId, ResourcePath baseResourcePath, string shareName, IEnumerable<string> mediaCategories, RelocationMode relocationMode) { ServiceRegistration.Get<ILogger>().Info("MediaLibrary: Updating share '{0}': Setting name '{1}', base resource path '{2}' and media categories '{3}'", shareId, shareName, baseResourcePath, StringUtils.Join(", ", mediaCategories)); Share share = GetShare(shareId); TryCancelLocalImportJobs(share); ISQLDatabase database = ServiceRegistration.Get<ISQLDatabase>(); ITransaction transaction = database.BeginTransaction(); try { Share originalShare = GetShare(transaction, shareId); using (IDbCommand command = MediaLibrary_SubSchema.UpdateShareCommand(transaction, shareId, baseResourcePath, shareName)) command.ExecuteNonQuery(); // Update media categories ICollection<string> formerMediaCategories = GetShareMediaCategories(transaction, shareId); ICollection<string> newCategories = new List<string>(); foreach (string mediaCategory in mediaCategories) { newCategories.Add(mediaCategory); if (!formerMediaCategories.Contains(mediaCategory)) AddMediaCategoryToShare(transaction, shareId, mediaCategory); } foreach (string mediaCategory in formerMediaCategories) if (!newCategories.Contains(mediaCategory)) RemoveMediaCategoryFromShare(transaction, shareId, mediaCategory); int numAffected = 0; // Relocate media items switch (relocationMode) { case RelocationMode.Relocate: numAffected = RelocateMediaItems(transaction, originalShare.SystemId, originalShare.BaseResourcePath, baseResourcePath); ServiceRegistration.Get<ILogger>().Info("MediaLibrary: Relocated {0} media items during share update", numAffected); break; case RelocationMode.Remove: numAffected = DeleteAllMediaItemsUnderPath(transaction, originalShare.SystemId, originalShare.BaseResourcePath, true); ServiceRegistration.Get<ILogger>().Info("MediaLibrary: Deleted {0} media items during share update (will be re-imported)", numAffected); Share updatedShare = GetShare(transaction, shareId); TryScheduleLocalShareImport(updatedShare); break; } transaction.Commit(); ContentDirectoryMessaging.SendRegisteredSharesChangedMessage(); return numAffected; } catch (Exception e) { ServiceRegistration.Get<ILogger>().Error("MediaLibrary: Error updating share '{0}'", e, shareId); transaction.Rollback(); throw; } }