public override bool TrySave(out MediaItem savedMediaItem, out string message)
        {
            EnsureChildControls();

            if (_fileFileUpload.HasFile)
            {
                try
                {
                    savedMediaItem = _provider.CreateMediaItem(_fileFileUpload.FileContent, _fileFileUpload.FileName, _fileFileUpload.PostedFile.ContentType, _collectionsDropDownList.SelectedValue);

                    message = "File created successfully";

                    return true;
                }
                catch (Exception e)
                {
                    savedMediaItem = null;
                    message = "An error occured creating the media item: " + e.Message;

                    return false;
                }
            }
            else
            {
                savedMediaItem = null;
                message = "No file selected";

                return false;
            }
        }
        public static void ConvertMediaItemToFile(MediaItem mediaItem, string fileName)
        {
            Assert.ArgumentNotNull(mediaItem, "mediaItem");

            if (mediaItem.InnerItem["file path"].Length > 0)
                return;

            // Have to use "blob" field in order to workaround an issue with mediaItem.GetStream()
            // as it uses mediaItem.FileBased property that returns "true" if at least one version has a file based media asset.
            var blobField = mediaItem.InnerItem.Fields["blob"];
            Stream stream = blobField.GetBlobStream();
            if (stream == null)
            {
                //Log.Warn(string.Format("Cannot find media data at item '{0}'", mediaItem.MediaPath), typeof(MediaStorageManager));
                return;
            }

            //string fileName = GetFilename(mediaItem, stream);
            string relativePath = Sitecore.IO.FileUtil.UnmapPath(fileName);
            try
            {
                SaveToFile(stream, fileName);

                stream.Flush();
                stream.Close();

            }
            catch (Exception)
            {
                //Log.Error(string.Format("Cannot convert BLOB stream of '{0}' media item to '{1}' file", mediaItem.MediaPath, relativePath), ex, typeof(MediaStorageManager));
            }
        }
Ejemplo n.º 3
0
 public ImageItem(MediaItem mediaItem) : base(mediaItem)
 {
   MediaItemAspect imageAspect;
   if (mediaItem.Aspects.TryGetValue(ImageAspect.ASPECT_ID, out imageAspect))
   {
     SimpleTitle = Title;
     int? width = (int?) imageAspect[ImageAspect.ATTR_WIDTH];
     int? height = (int?) imageAspect[ImageAspect.ATTR_HEIGHT];
     if (width.HasValue && width.Value > 0 && height.HasValue && height.Value > 0)
     {
       Width = width;
       Height = height;
       Size = width + " x " + height;
     }
   }
   MediaItemAspect resourceAspect;
   if (mediaItem.Aspects.TryGetValue(ProviderResourceAspect.ASPECT_ID, out resourceAspect))
   {
     ResourcePath rp = ResourcePath.Deserialize((string) resourceAspect[ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH]);
     string ext = ProviderPathHelper.GetExtension(rp.FileName);
     if (ext.Length > 1)
       // remove leading '.'
       ext = ext.Substring(1);
     Extension = ext;
   }
   MediaItemAspect mediaAspect;
   if (mediaItem.Aspects.TryGetValue(MediaAspect.ASPECT_ID, out mediaAspect))
   {
     MimeType = (string) mediaAspect[MediaAspect.ATTR_MIME_TYPE];
   }
 }
Ejemplo n.º 4
0
        public static bool ConvertWave2Wma(string waveFilePath, string artist, string title, string genre, int year, out string exceptionMessage)
        {
            //encode
            MediaItem albumItem;
            try
            {
                string jobFilePath = waveFilePath.Replace(".wav", "-job.xej");

                StreamReader reader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("AudioConverter.ExpressionEncoderJob.xej"));
                File.WriteAllText(jobFilePath, reader.ReadToEnd());
                reader.Close();

                Job job = Job.LoadJob(jobFilePath);

                string presetFilePath = waveFilePath.Replace(".wav", "-presets.xml");
                WritePresetFile(presetFilePath, artist, title, genre, year);
                job.MediaItems.Clear();
                albumItem = new MediaItem(waveFilePath);
                job.MediaItems.Add(albumItem);
                job.ApplyPreset(Preset.FromFile(presetFilePath));
                job.Encode();
                exceptionMessage = null;
                return true;
            }
            catch (Exception ex)
            {
                exceptionMessage = ex.Message;
                return false;
            }
        }
Ejemplo n.º 5
0
    public override bool Process(MediaItem mediaItem, out ContentDirectoryMessaging.MediaItemChangeType changeType)
    {
      changeType = ContentDirectoryMessaging.MediaItemChangeType.None;

      var rl = mediaItem.GetResourceLocator();
      using (var ra = rl.CreateAccessor())
      {
        var rad = ra as IResourceDeletor;
        if (rad == null)
          return false;

        // First try to delete the file from storage.
        if (rad.Delete())
        {
          changeType = ContentDirectoryMessaging.MediaItemChangeType.Deleted;

          // If the MediaItem was loaded from ML, remove it there as well.
          if (IsManagedByMediaLibrary(mediaItem))
          {
            IContentDirectory cd = ServiceRegistration.Get<IServerConnectionManager>().ContentDirectory;
            if (cd == null)
              return true;

            cd.DeleteMediaItemOrPath(rl.NativeSystemId, rl.NativeResourcePath, true);
            return true;
          }
        }
      }
      return false;
    }
Ejemplo n.º 6
0
    public static HtmlString RenderParallaxMediaAttributes(this Item item)
    {
      var targetItem = item.TargetItem(Templates.HasParallaxBackground.Fields.BackgroundMedia);
      var targetMedia = new MediaItem(targetItem);
      var attributeDictionary = new Dictionary<string, string>();
      var mimeType = targetMedia.MimeType.Split('/');
      var mediaType = mimeType[0];
      var mediaFormat = mimeType[1];

      attributeDictionary["type"] = mediaType;
      if (mediaType == "video")
        attributeDictionary["format"] = mediaFormat;
        
      attributeDictionary[mediaType == "video" ? $"url-{mediaFormat}" : "url"] = item.MediaUrl(Templates.HasParallaxBackground.Fields.BackgroundMedia);
      var checkboxField = (Sitecore.Data.Fields.CheckboxField)item.Fields[Templates.HasParallaxBackground.Fields.IsParallaxEnabled];
      attributeDictionary["attachment"] = checkboxField.Checked ? "parallax" : "static";
      if (checkboxField.Checked)
      {
        attributeDictionary["parallaxspeed"] = item.Fields[Templates.HasParallaxBackground.Fields.ParallaxSpeed].Value;
      }

      
      var attributes = attributeDictionary.Select(x => $"data-multibackground-layer-0-{x.Key}='{x.Value}'").ToList();
      attributes.Add("data-multibackground");
      return new HtmlString(string.Join(" ", attributes));
    }
 private static string ConfigureProfile(DlnaForthField dlnaField, MediaItem item, string mediaType)
 {
     //TODO: much better type resolution
     switch(mediaType)
     {
         case MediaLibraryHelper.MIMETYPE_AUDIO:
             dlnaField.ProfileParameter.ProfileName = DlnaProfiles.Mp3;
             dlnaField.FlagsParameter.StreamingMode = true;
             dlnaField.FlagsParameter.InteractiveMode = false;
             dlnaField.FlagsParameter.BackgroundMode = true;
             break;
         case MediaLibraryHelper.MIMETYPE_VIDEO:
             dlnaField.ProfileParameter.ProfileName = DlnaProfiles.MpegPsPal;
             dlnaField.FlagsParameter.StreamingMode = true;
             dlnaField.FlagsParameter.InteractiveMode = false;
             dlnaField.FlagsParameter.BackgroundMode = true;
             break;
         case MediaLibraryHelper.MIMETYPE_IMAGE:
             dlnaField.ProfileParameter.ProfileName = DlnaProfiles.JpegLarge;
             dlnaField.FlagsParameter.StreamingMode = false;
             dlnaField.FlagsParameter.InteractiveMode = true;
             dlnaField.FlagsParameter.BackgroundMode = true;
             break;
     }
     return null;
 }
        /// <summary>
        /// Gets the media URL.
        /// </summary>
        /// <param name="itemid">The item ID</param>
        /// <returns>MediaUrl of item</returns>
        public static string GetVideoExtension(this string itemid)
        {
            if (!string.IsNullOrEmpty(itemid))
            {
                Guid guidOutput = new Guid();
                bool isValid = Guid.TryParse(itemid, out guidOutput);
                if (isValid)
                {
                    Item sourceItem = DatabaseUtilities.ContentOrContextDatabase.GetItem(new ID(itemid));
                    if (sourceItem != null)
                    {
                        MediaItem mediaItem = new MediaItem(sourceItem);
                        return mediaItem.Extension;
                    }
                    return itemid;
                }
                else
                {
                    string[] items = itemid.Split('.');
                    return items.LastOrDefault();
                }
            }

            return string.Empty;
        }
Ejemplo n.º 9
0
    public override int Compare(MediaItem item1, MediaItem item2)
    {
      MediaItemAspect seriesAspectX;
      MediaItemAspect seriesAspectY;
      if (item1.Aspects.TryGetValue(SeriesAspect.ASPECT_ID, out seriesAspectX) && item2.Aspects.TryGetValue(SeriesAspect.ASPECT_ID, out seriesAspectY))
      {
        int seasonX = (int) (seriesAspectX.GetAttributeValue(SeriesAspect.ATTR_SEASON) ?? 0);
        int seasonY = (int) (seriesAspectY.GetAttributeValue(SeriesAspect.ATTR_SEASON) ?? 0);
        int seasonRes = seasonX.CompareTo(seasonY);
        if (seasonRes != 0)
          return seasonRes;

        IEnumerable<int> episodesX = seriesAspectX.GetCollectionAttribute<int>(SeriesAspect.ATTR_EPISODE);
        IEnumerable<int> episodesY = seriesAspectY.GetCollectionAttribute<int>(SeriesAspect.ATTR_EPISODE);
        
        int episodeX = 0;
        int episodeY = 0;
        if (episodesX != null)
          episodeX = episodesX.FirstOrDefault();
        if (episodesY != null)
          episodeY = episodesY.FirstOrDefault();

        int episodeRes = episodeX.CompareTo(episodeY);
        if (episodeRes != 0)
          return episodeRes;
      }
      return base.Compare(item1, item2);
    }
 /// <summary>
 /// Gets a media URL.
 /// </summary>
 /// <param name="item">The media item.</param>
 /// <param name="options">The query string.</param>
 /// <returns>
 /// The media URL.
 /// </returns>
 public override string GetMediaUrl(MediaItem item, MediaUrlOptions options)
 {
     Assert.ArgumentNotNull(item, "item");
     Assert.ArgumentNotNull(options, "options");
     var flag = options.Thumbnail || HasMediaContent(item);
     if (!flag && item.InnerItem["path"].Length > 0)
     {
         if (!options.LowercaseUrls)
             return item.InnerItem["path"];
         return item.InnerItem["path"].ToLowerInvariant();
     }
     if (options.UseDefaultIcon && !flag)
     {
         return !options.LowercaseUrls ? Themes.MapTheme(Settings.DefaultIcon) : Themes.MapTheme(Settings.DefaultIcon).ToLowerInvariant();
     }
     Assert.IsTrue(Config.MediaPrefixes[0].Length > 0, "media prefixes are not configured properly.");
     var str1 = MediaLinkPrefix;
     if (options.AbsolutePath)
         str1 = options.VirtualFolder + str1;
     else if (str1.StartsWith("/", StringComparison.InvariantCulture))
         str1 = StringUtil.Mid(str1, 1);
     var part2 = MainUtil.EncodePath(str1, '/');
     if (options.AlwaysIncludeServerUrl)
         part2 = FileUtil.MakePath(string.IsNullOrEmpty(options.MediaLinkServerUrl) ? WebUtil.GetServerUrl() : options.MediaLinkServerUrl, part2, '/');
     var str2 = StringUtil.EnsurePrefix('.', StringUtil.GetString(options.RequestExtension, item.Extension, "ashx"));
     var str3 = options.ToString();
     if (str3.Length > 0)
         str2 = str2 + "?" + str3;
     const string str4 = "/sitecore/media library/";
     var path = item.InnerItem.Paths.Path;
     var str5 = MainUtil.EncodePath(!options.UseItemPath || !path.StartsWith(str4, StringComparison.OrdinalIgnoreCase) ? item.ID.ToShortID().ToString() : StringUtil.Mid(path, str4.Length), '/');
     var str6 = part2 + str5 + (options.IncludeExtension ? str2 : string.Empty);
     return !options.LowercaseUrls ? str6 : str6.ToLowerInvariant();
 }
      private MediaItem UploadMediaItemToAlbum(MediaItem mediaItem, string albumPath)
      {
         string relativeUploadUrl = GenerateRelativeUploadUrl( albumPath );

         QueryParameterList paramaters = new QueryParameterList();
         paramaters.Add( new QueryParameter( _format, "xml" ) );
         paramaters.Add( new QueryParameter( _type, mediaItem.Type ) );
         if (string.IsNullOrEmpty( mediaItem.Description ) == false)
         {
            paramaters.Add( new QueryParameter( _description, OAuth.UrlEncode(mediaItem.Description) ) );
         }
         if (string.IsNullOrEmpty( mediaItem.Title ) == false)
         {
            paramaters.Add( new QueryParameter( _title, OAuth.UrlEncode(mediaItem.Title) ) );
         }

         QueryParameterList mediaParamaters = OAuth.GenerateOAuthParamaters( relativeUploadUrl, _uploadMediaMethod, Token, paramaters );

         string uploadMediaItemUrl = ApiUrl + relativeUploadUrl + "?format=xml";

         XmlResponseMessage uploadMediaItemResponse = GetResponseForUploadMediaItem( uploadMediaItemUrl, mediaItem, mediaParamaters );

         MediaItem newMediaItem = new MediaItem( uploadMediaItemResponse.ResponseXml );
         _currentUser.MediaList.Add(newMediaItem);
         return newMediaItem;
      }
        protected override String getKey(MediaItem item)
        {
            String key = "";

            if (item is YoutubeVideoItem)
            {
                YoutubeVideoItem videoItem = item as YoutubeVideoItem;

                YoutubeItemMetadata metadata = item.Metadata as YoutubeItemMetadata;

                if (metadata.Height >= 2160)
                {
                    key += "4";
                }
                else if (metadata.Height >= 1080)
                {
                    key += "0";
                }

                if (videoItem.IsEmbeddedOnly || !videoItem.HasPlayableStreams)
                {
                    key += "1";
                }
            }
            else if (item is YoutubeChannelItem)
            {
                key += "2";
            }
            else if (item is YoutubePlaylistItem)
            {
                key += "3";
            }

            return key;
        }
Ejemplo n.º 13
0
 private static byte[] AutoRotateThumb(MediaItem mediaItem, byte[] textureData)
 {
   ImageRotation miRotation;
   bool flipX;
   bool flipY;
   if (ImageAspect.GetOrientationMetadata(mediaItem, out miRotation, out flipX, out flipY) && (miRotation != ImageRotation.Rot_0))
   {
     try
     {
       using (MemoryStream rotatedStream = new MemoryStream())
       using (MemoryStream inputStream = new MemoryStream(textureData))
       using (Image bitmap = Image.FromStream(inputStream))
       {
         if (miRotation == ImageRotation.Rot_180)
           bitmap.RotateFlip(RotateFlipType.Rotate180FlipNone);
         if (miRotation == ImageRotation.Rot_90)
           bitmap.RotateFlip(RotateFlipType.Rotate90FlipNone);
         if (miRotation == ImageRotation.Rot_270)
           bitmap.RotateFlip(RotateFlipType.Rotate270FlipNone);
         bitmap.Save(rotatedStream, ImageFormat.Jpeg);
         textureData = rotatedStream.ToArray();
       }
     }
     catch (Exception)
     {
     }
   }
   return textureData;
 }
Ejemplo n.º 14
0
    /// <summary>
    /// Constructs a <see cref="BinaryTextureImageSource"/> for thumbnails of the given size from MediaItems.
    /// </summary>
    /// <param name="mediaItem">MediaItem to create thumbnail for.</param>
    /// <param name="thumbnailSize">Requested thumbnail size.</param>
    public static BinaryTextureImageSource CreateThumbnailImageSource(MediaItem mediaItem, int thumbnailSize)
    {
      Guid id = mediaItem.MediaItemId;
      // Local media items don't have an item id
      string key = (id == Guid.Empty ? Guid.NewGuid() : id).ToString();
      byte[] textureData = null;

      // Each resolution is cached separately. If we read cache only and our favourite resolution is not yet in cache,
      // we try to find any other existing.
      if (thumbnailSize <= 96)
      {
        if (mediaItem.Aspects.ContainsKey(ThumbnailSmallAspect.ASPECT_ID))
          textureData = (byte[]) mediaItem.Aspects[ThumbnailSmallAspect.ASPECT_ID].GetAttributeValue(ThumbnailSmallAspect.ATTR_THUMBNAIL);

        if (textureData == null && mediaItem.Aspects.ContainsKey(ThumbnailLargeAspect.ASPECT_ID))
          textureData = (byte[]) mediaItem.Aspects[ThumbnailLargeAspect.ASPECT_ID].GetAttributeValue(ThumbnailLargeAspect.ATTR_THUMBNAIL);
      }
      else
      {
        if (mediaItem.Aspects.ContainsKey(ThumbnailLargeAspect.ASPECT_ID))
          textureData = (byte[]) mediaItem.Aspects[ThumbnailLargeAspect.ASPECT_ID].GetAttributeValue(ThumbnailLargeAspect.ATTR_THUMBNAIL);
        
        if (textureData == null && mediaItem.Aspects.ContainsKey(ThumbnailSmallAspect.ASPECT_ID))
          textureData = (byte[]) mediaItem.Aspects[ThumbnailSmallAspect.ASPECT_ID].GetAttributeValue(ThumbnailSmallAspect.ATTR_THUMBNAIL);
      }
      ImageRotation miRotation;
      bool flipX;
      bool flipY;
      ImageAspect.GetOrientationMetadata(mediaItem, out miRotation, out flipX, out flipY);
      RightAngledRotation rotation = RotationTranslator.TranslateToRightAngledRotation(miRotation);
      return new BinaryTextureImageSource(textureData, rotation, key);
    }
        public override string GetMediaUrl(MediaItem item, MediaUrlOptions options)
        {
            string mediaUrl = base.GetMediaUrl(item, options);
            if (string.IsNullOrEmpty(mediaUrl)) return mediaUrl;

            int versionNumber = item.InnerItem.Version.Number;
            string langIsoCode = item.InnerItem.Language.CultureInfo.TwoLetterISOLanguageName;
            string updatedDate = item.InnerItem.Statistics.Updated.ToString("s");
            NameValueCollection parameters = new NameValueCollection
            {
                {"v", versionNumber.ToString()},
                {"lang", langIsoCode},
                {"modified", updatedDate}
            };
            if (options.AlwaysIncludeServerUrl)
            {
                UriBuilder uriBuilder = new UriBuilder(mediaUrl);
                NameValueCollection queryString = HttpUtility.ParseQueryString(uriBuilder.Query);
                queryString.Add(parameters);
                uriBuilder.Query = ToQueryString(queryString);
                return uriBuilder.ToString();
            }
            StringBuilder sb = new StringBuilder(mediaUrl);
            string seperator = "?";
            if (mediaUrl.Contains(seperator)) seperator = "&";
            foreach (string key in parameters.Keys)
            {
                sb.AppendFormat("{0}{1}={2}", seperator, key, parameters[key]);
                seperator = "&";
            }
            return sb.ToString();
        }
Ejemplo n.º 16
0
        private static File GetFromXml(XmlNode node)
        {
            var mediaId = GetAttribute(node, "mediaid");
              var src = GetAttribute(node, "src");
              var file = new File
              {
            MediaId = mediaId,
            Source = src
              };
              if (string.IsNullOrEmpty(file.MediaId))
              {
            return file;
              }
              var mediaItemFromMediaId = DatabaseRepository.GetActiveDatabase().GetItem(file.MediaId);

              if (mediaItemFromMediaId == null)
              {
            return file;
              }

              var mediaItem = new MediaItem(mediaItemFromMediaId);
              file.Title = string.IsNullOrEmpty(mediaItem.Title)
            ? mediaItem.DisplayName
            : mediaItem.Title;
              file.Extension = mediaItem.Extension;
              file.FileSize = mediaItem.Size;
              return file;
        }
Ejemplo n.º 17
0
        protected override String getKey(MediaItem item)
        {
            String key = "";

            if (item.Metadata != null)
            {
                if (item.Metadata.IsImported)
                {
                    key += '0';
                }

                if (!item.Metadata.SupportsXMPMetadata)
                {
                    key += '1';
                }
            }

            if (item.HasTags)
            {
                key += '2';
            }

            if (item.HasGeoTag)
            {
                key += '3';
            }

            if (item.IsReadOnly)
            {
                key += '4';
            }

            return (key);
        }
        /// <summary>
        ///     Gets the media URL.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="mediaUrlOptions">The media URL options.</param>
        /// <returns></returns>
        public override string GetMediaUrl(MediaItem item, MediaUrlOptions mediaUrlOptions)
        {
            Assert.ArgumentNotNull(item, "item");
            Assert.ArgumentNotNull(mediaUrlOptions, "mediaUrlOptions");

            //Return the standard image if any of the following conditions are met
            if (!IsImage(item) || Context.Database == null || Context.Site.Name == "shell" || !Context.PageMode.IsNormal || !((Item)item).HasChildren)
                return base.GetMediaUrl(item, mediaUrlOptions);

            double pixelDensity = GetCookiePixelDensity();
            if (pixelDensity <= 1)
                return base.GetMediaUrl(item, mediaUrlOptions);

            //Get the first child of the media item (It should be the retina version of the image)
            Item retinaItem = ((Item)item).Children.FirstOrDefault();
            //Return the standard image if width and height are not set on the retina media items
            if (retinaItem == null || String.IsNullOrEmpty(retinaItem["Width"]) || String.IsNullOrEmpty(retinaItem["Height"]))
                return base.GetMediaUrl(item, mediaUrlOptions);
            int retinaWidth = System.Convert.ToInt32(retinaItem["Width"]);
            int retinaHeight = System.Convert.ToInt32(retinaItem["Height"]);
            if (mediaUrlOptions.Width > 0 && mediaUrlOptions.Height > 0
                && retinaWidth >= (mediaUrlOptions.Width * pixelDensity) && retinaHeight >= (mediaUrlOptions.Height * pixelDensity))
            {
                mediaUrlOptions.Width = System.Convert.ToInt32(mediaUrlOptions.Width * pixelDensity);
                mediaUrlOptions.Height = System.Convert.ToInt32(mediaUrlOptions.Height * pixelDensity);
                //Return the retina version with width and height parameters adjusted accordingly
                return base.GetMediaUrl(retinaItem, mediaUrlOptions);
            }
            //Return the retina version
            return base.GetMediaUrl(retinaItem, mediaUrlOptions);
        }
Ejemplo n.º 19
0
        public static void EncodeVideo(FileInfo inputFile, FileInfo outputFile)
        {
            DirectoryInfo outDir = outputFile.Directory;
            if (!outDir.Exists)
            {
                outDir.Create();
            }
            MediaItem mediaItem = new MediaItem(inputFile.FullName);
            int bitrate = GetBitrate(mediaItem);

            using (Job job = new Job())
            {
                job.OutputDirectory = outDir.FullName;
                job.CreateSubfolder = false;
                job.MediaItems.Add(mediaItem);

                SetProfile(mediaItem);

                // We can also use some of the presets. In that case comment the SetProfile line above for something like the one below:

                //    //H264VimeoSD preset settings: Output Format: MP4. Container: MP4. Video Codec: H.264 - Main.
                //    //Video size: 640, 480. Video Bitrate: 2500 Kbps. Video Encoding: CBR SinglePass.
                //    //Audio Codec: AAC. Audio Channels: Stereo. Audio Bitrate: 128 Kbps. Audio Encoding: CBR Single Pass
                //    job.ApplyPreset(Presets.H264VimeoSD);

                job.Encode();
            }
            if (!outputFile.FullName.Equals(mediaItem.ActualOutputFileFullPath, StringComparison.InvariantCultureIgnoreCase))
            {
                throw new Exception(String.Format("The output file specified: '{0}' does not match the actual output file '{1}'", outputFile.FullName, mediaItem.ActualOutputFileFullPath));
            }
        }
    /// <summary>
    /// Loads selected item parameters into the selector.
    /// </summary>
    /// <param name="properties">Name-value collection representing item to load</param>
    /// <param name="hideLinkText">Indicates if link text textbox shoul be hidden</param>
    public void LoadSelectedItem(Hashtable properties, bool hideLinkText)
    {
        if ((properties != null) && (properties.Count > 0))
        {
            if (!IsBB)
            {
                if (hideLinkText)
                {
                    propLinkProperties.LoadItemProperties(properties);
                }
                else
                {
                    MediaItem mi = new MediaItem();
                    mi.Url = properties[DialogParameters.LINK_URL].ToString();
                    if ((properties[DialogParameters.LINK_TEXT] == null) || (String.IsNullOrEmpty(properties[DialogParameters.LINK_TEXT].ToString())))
                    {
                        mi.Name = properties[DialogParameters.LINK_NAME].ToString();
                    }
                    else
                    {
                        mi.Name = properties[DialogParameters.LINK_TEXT].ToString();
                    }
                    propLinkProperties.LoadSelectedItems(mi, properties);
                }
            }

            urlSelectElem.LinkTextEnabled = !hideLinkText;
            string url = ValidationHelper.GetString(properties[DialogParameters.LINK_URL], "");
            urlSelectElem.LinkURL = URLHelper.RemoveProtocol(url);
            urlSelectElem.LinkText = ValidationHelper.GetString(properties[DialogParameters.LINK_TEXT], "");
            urlSelectElem.LinkProtocol = ValidationHelper.GetString(properties[DialogParameters.LINK_PROTOCOL], "http://");
        }
    }
        /// <summary>
        /// We require the command line parameters for the web browser host
        /// Util should be an implementation of IBrowserSiteUtil
        /// </summary>
        /// <param name="mediaItem"></param>
        public void Prepare(MediaItem mediaItem)
        {
            bool useIE = false;

            string siteName;
            SiteUtilBase util;
            if (!MediaItemAspect.TryGetAttribute(mediaItem.Aspects, OnlineVideosAspect.ATTR_SITEUTIL, out siteName) || !OnlineVideoSettings.Instance.SiteUtilsList.TryGetValue(siteName, out util))
            {
                throw new ArgumentException("Could not determine used site util, can't start playback!");
            }

            var browserConfig = util as IBrowserSiteUtil;
            if (browserConfig != null)
            {
                _automationType = browserConfig.ConnectorEntityTypeName;
                _username = browserConfig.UserName;
                _password = browserConfig.Password;
            }
            var emulationSite = util as IBrowserVersionEmulation;
            if (emulationSite != null)
            {
                _emulationLevel = emulationSite.EmulatedVersion;
                useIE = _emulationLevel > 10000;
            }

            _lastError = string.Empty;

            _callback.OnBrowserClosing += _callback_OnBrowserHostClosing;
            _callback.OnBrowserKeyPress += _callback_OnBrowserKeyPress;

            var processName = useIE ? HOST_PROCESS_NAME_IE : HOST_PROCESS_NAME;
            _processPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), processName + ".exe");

            GetRunningProcess(processName);
        }
Ejemplo n.º 22
0
        public List<WpPost> GetPosts(WpImportOptions options)
        {
            Item mediaInnerItem = _db.GetItem(_mediaItemId);
            if (mediaInnerItem == null)
            {
                Logger.Error(String.Format("Media item for import could not be found (id: {0}, db: {1})", _mediaItemId, _db.Name));
                return new List<WpPost>(0);
            }
            MediaItem mediaItem = new MediaItem(mediaInnerItem);

            XmlDocument xmdDoc = new XmlDocument();
            var mediaStream = MediaManager.GetMedia(mediaItem).GetStream();
            if (mediaStream == null || mediaStream.MimeType != "text/xml")
            {
                Logger.Error(String.Format("MediaStream for imported item is null or uploaded file has is incorrect format (id: {0}, db: {1})", _mediaItemId, _db.Name));
                return new List<WpPost>(0);
            }

            xmdDoc.Load(mediaStream.Stream);
            using (var nodeReader = new XmlNodeReader(xmdDoc))
            {
                nodeReader.MoveToContent();
                var xDocument = XDocument.Load(nodeReader);

                var posts = (from item in xDocument.Descendants("item")
                             select new WpPost(item, options)).ToList();
                return posts;
            }
        }
Ejemplo n.º 23
0
 public IPlayer GetPlayer(MediaItem mediaItem)
 {
   string mimeType;
   string title;
   if (!mediaItem.GetPlayData(out mimeType, out title))
     return null;
   IResourceLocator locator = mediaItem.GetResourceLocator();
   if (!ImagePlayer.CanPlay(locator, mimeType))
     return null;
   ImagePlayer player = new ImagePlayer();
   try
   {
     if (!player.NextItem(mediaItem, StartTime.AtOnce))
     {
       player.Dispose();
       return null;
     }
   }
   catch (Exception e)
   {
     ServiceRegistration.Get<ILogger>().Warn("ImagePlayerBuilder: Error playing media item '{0}'", e, locator);
     player.Dispose();
     return null;
   }
   return player;
 }
Ejemplo n.º 24
0
        public static void GenerateThumbnail(FileInfo mediaFile, string thumbnailFilePath, int width, int height)
        {
            int thumbWidth = width;
            int thumbHeight = height;
            var video = new MediaItem(mediaFile.FullName);
            var videoSize = video.MainMediaFile.VideoStreams[0].VideoSize;

            if (videoSize.Width > videoSize.Height)
            {
                thumbHeight = Decimal.ToInt32(((Decimal)videoSize.Height / videoSize.Width) * thumbWidth);
                if (thumbHeight > height)
                {
                    thumbHeight = height;
                }
            }
            else
            {
                thumbWidth = Decimal.ToInt32(((Decimal)videoSize.Width / videoSize.Height) * thumbHeight);
                if (thumbWidth > width)
                {
                    thumbWidth = width;
                }
            }

            using (var bitmap = video.MainMediaFile.GetThumbnail(
                new TimeSpan(0, 0, 5),
                new System.Drawing.Size(thumbWidth, thumbHeight)))
            {
                bitmap.Save(thumbnailFilePath,ImageFormat.Jpeg);
            }
        }
Ejemplo n.º 25
0
 public static bool IsValidVideo(MediaItem mediaItem)
 {
   if (mediaItem == null)
     return false;
   string mimeType;
   return MediaItemAspect.TryGetAttribute(mediaItem.Aspects, MediaAspect.ATTR_MIME_TYPE, out mimeType) && mimeType.StartsWith("video/");
 }
Ejemplo n.º 26
0
        private static Image GetFromXml(XmlNode node)
        {
            var mediaId = GetAttribute(node, "mediaid");
              var src = GetAttribute(node, "src");
              var mediaPath = GetAttribute(node, "mediapath");
              var alt = GetAttribute(node, "alt");
              var width = GetAttribute(node, "width");
              var height = GetAttribute(node, "height");
              var vspace = GetAttribute(node, "vspace");
              var hspace = GetAttribute(node, "hspace");

              var image = new Image
              {
            MediaId = mediaId,
            Source = src,
            MediaPath = mediaPath,
            AlternateText = alt
              };

              if (!string.IsNullOrEmpty(width))
              {
            image.Width = int.Parse(width);
              }
              if (!string.IsNullOrEmpty(height))
              {
            image.Height = int.Parse(height);
              }
              if (!string.IsNullOrEmpty(vspace))
              {
            image.VerticalSpace = int.Parse(vspace);
              }
              if (!string.IsNullOrEmpty(hspace))
              {
            image.HorisontalSpace = int.Parse(hspace);
              }

              if (string.IsNullOrEmpty(image.MediaId))
              {
            return image;
              }

              var mediaIdItem = DatabaseRepository.GetActiveDatabase().GetItem(image.MediaId);
              if (mediaIdItem == null)
              {
            return image;
              }

              var mediaItem = new MediaItem(mediaIdItem);
              image.Title = string.IsNullOrEmpty(mediaItem.Title)
            ? mediaItem.DisplayName
            : mediaItem.Title;
              image.Extension = mediaItem.Extension;
              image.FileSize = mediaItem.Size;
              if (string.IsNullOrEmpty(image.AlternateText))
              {
            image.AlternateText = mediaItem.Alt;
              }
              return image;
        }
Ejemplo n.º 27
0
    public MovieItem(MediaItem mediaItem) : base(mediaItem)
    {
      MediaItemAspect movieAspect;
      if (!mediaItem.Aspects.TryGetValue(MovieAspect.ASPECT_ID, out movieAspect)) 
        return;

      MovieName = (string) movieAspect[MovieAspect.ATTR_MOVIE_NAME] ?? string.Empty;
    }
Ejemplo n.º 28
0
 /// <summary>
 /// Tries to show actions for the given <paramref name="mediaItem"/>. This method can also be called from other models.
 /// </summary>
 /// <param name="mediaItem">MediaItem</param>
 public void ShowMediaItemActions(MediaItem mediaItem)
 {
   IWorkflowManager workflowManager = ServiceRegistration.Get<IWorkflowManager>();
   workflowManager.NavigatePush(Consts.WF_STATE_ID_CHECK_MEDIA_ITEM_ACTION, new NavigationContextConfig
   {
     AdditionalContextVariables = new Dictionary<string, object> { { KEY_MEDIA_ITEM, mediaItem } }
   });
 }
    public override int Compare(MediaItem x, MediaItem y)
    {
      DateTime startTimeX;
      DateTime startTimeY;
      if (!MediaItemAspect.TryGetAttribute(x.Aspects, RecordingAspect.ATTR_STARTTIME, out startTimeX) || !MediaItemAspect.TryGetAttribute(y.Aspects, RecordingAspect.ATTR_STARTTIME, out startTimeY))
        return base.Compare(x, y);

      return -startTimeX.CompareTo(startTimeY);
    }
Ejemplo n.º 30
0
 public override bool Process(MediaItem mediaItem, out ContentDirectoryMessaging.MediaItemChangeType changeType)
 {
   changeType = ContentDirectoryMessaging.MediaItemChangeType.None;
   WorkflowAction action;
   if (!ServiceRegistration.Get<IWorkflowManager>().MenuStateActions.TryGetValue(ACTION_ID_ADD_ALL_TO_PLAYLIST, out action))
     return false;
   action.Execute();
   return true;
 }
Ejemplo n.º 31
0
 private void StopAudio(MediaItem mediaItem)
 {
     _audioManager.StopAudio(mediaItem.Id);
 }
Ejemplo n.º 32
0
 private bool IsVideoOrAudio(MediaItem mediaItem)
 {
     return
         (mediaItem.MediaType.Classification == MediaClassification.Audio ||
          mediaItem.MediaType.Classification == MediaClassification.Video);
 }
Ejemplo n.º 33
0
 private void StartSlideshow(MediaItem mediaItem)
 {
     mediaItem.CurrentSlideshowIndex = 0;
     _imageDisplayManager.StartSlideshow(mediaItem.FilePath, mediaItem.Id);
 }
Ejemplo n.º 34
0
        /// <summary>
        /// Gets a list of <see cref="FanArtImage"/>s for a requested <paramref name="mediaType"/>, <paramref name="fanArtType"/> and <paramref name="name"/>.
        /// The name can be: Series name, Actor name, Artist name depending on the <paramref name="mediaType"/>.
        /// </summary>
        /// <param name="mediaType">Requested FanArtMediaType</param>
        /// <param name="fanArtType">Requested FanArtType</param>
        /// <param name="name">Requested name of Series, Actor, Artist...</param>
        /// <param name="maxWidth">Maximum width for image. <c>0</c> returns image in original size.</param>
        /// <param name="maxHeight">Maximum height for image. <c>0</c> returns image in original size.</param>
        /// <param name="singleRandom">If <c>true</c> only one random image URI will be returned</param>
        /// <param name="result">Result if return code is <c>true</c>.</param>
        /// <returns><c>true</c> if at least one match was found.</returns>
        public bool TryGetFanArt(string mediaType, string fanArtType, string name, int maxWidth, int maxHeight, bool singleRandom, out IList <IResourceLocator> result)
        {
            result = null;
            Guid mediaItemId;

            if (mediaType != FanArtMediaTypes.Undefined)
            {
                return(false);
            }

            if (!Guid.TryParse(name, out mediaItemId))
            {
                return(false);
            }

            IMediaLibrary mediaLibrary = ServiceRegistration.Get <IMediaLibrary>(false);

            if (mediaLibrary == null)
            {
                return(false);
            }

            IFilter           filter        = new MediaItemIdFilter(mediaItemId);
            IList <MediaItem> items         = null;
            List <Guid>       necessaryMias = new List <Guid>(NECESSARY_MIAS);

            MediaItemQuery mediaQuery = new MediaItemQuery(necessaryMias, filter);

            mediaQuery.Limit = 1;
            items            = mediaLibrary.Search(mediaQuery, false, null, false);
            if (items == null || items.Count == 0)
            {
                return(false);
            }

            MediaItem mediaItem = items.First();

            // Virtual resources won't have any local fanart
            if (mediaItem.IsVirtual)
            {
                return(false);
            }
            var mediaIteamLocator = mediaItem.GetResourceLocator();
            var fanArtPaths       = new List <ResourcePath>();
            var files             = new List <IResourceLocator>();

            // File based access
            try
            {
                var mediaItemDirectoryPath = mediaIteamLocator.NativeResourcePath;
                using (var directoryRa = new ResourceLocator(mediaIteamLocator.NativeSystemId, mediaItemDirectoryPath).CreateAccessor())
                {
                    var directoryFsra = directoryRa as IFileSystemResourceAccessor;
                    if (directoryFsra != null)
                    {
                        var potentialFanArtFiles = LocalFanartHelper.GetPotentialFanArtFiles(directoryFsra);

                        if (fanArtType == FanArtTypes.Thumbnail)
                        {
                            fanArtPaths.AddRange(
                                from potentialFanArtFile in potentialFanArtFiles
                                let potentialFanArtFileNameWithoutExtension = ResourcePathHelper.GetFileNameWithoutExtension(potentialFanArtFile.ToString()).ToLowerInvariant()
                                                                              where potentialFanArtFileNameWithoutExtension == "folder"
                                                                              select potentialFanArtFile);
                        }

                        if (fanArtType == FanArtTypes.FanArt)
                        {
                            fanArtPaths.AddRange(
                                from potentialFanArtFile in potentialFanArtFiles
                                let potentialFanArtFileNameWithoutExtension = ResourcePathHelper.GetFileNameWithoutExtension(potentialFanArtFile.ToString()).ToLowerInvariant()
                                                                              where potentialFanArtFileNameWithoutExtension == "backdrop" || potentialFanArtFileNameWithoutExtension == "fanart"
                                                                              select potentialFanArtFile);

                            if (directoryFsra.ResourceExists("ExtraFanArt/"))
                            {
                                using (var extraFanArtDirectoryFsra = directoryFsra.GetResource("ExtraFanArt/"))
                                    fanArtPaths.AddRange(LocalFanartHelper.GetPotentialFanArtFiles(extraFanArtDirectoryFsra));
                            }
                        }

                        files.AddRange(fanArtPaths.Select(path => new ResourceLocator(mediaIteamLocator.NativeSystemId, path)));
                    }
                }
            }
            catch (Exception ex)
            {
#if DEBUG
                ServiceRegistration.Get <ILogger>().Warn("LocalContainerFanArtProvider: Error while searching fanart of type '{0}' for '{1}'", ex, fanArtType, mediaIteamLocator);
#endif
            }
            result = files;
            return(files.Count > 0);
        }
Ejemplo n.º 35
0
        protected bool GetPattern(FanArtConstants.FanArtMediaType mediaType, FanArtConstants.FanArtType fanArtType, Guid mediaItemId, string name, out string[] patterns)
        {
            patterns = null;
            string basePath = null;

            if (mediaItemId != Guid.Empty)
            {
                IMediaLibrary mediaLibrary = ServiceRegistration.Get <IMediaLibrary>(false);
                if (mediaLibrary == null)
                {
                    return(false);
                }

                IFilter           filter = new MediaItemIdFilter(mediaItemId);
                IList <MediaItem> items  = mediaLibrary.Search(new MediaItemQuery(NECESSARY_MIAS, filter), false);
                if (items == null || items.Count == 0)
                {
                    return(false);
                }

                MediaItem mediaItem = items.First();
                int       movieDbId;
                if (MediaItemAspect.TryGetAttribute(mediaItem.Aspects, MovieAspect.ATTR_TMDB_ID, out movieDbId))
                {
                    switch (mediaType)
                    {
                    case FanArtConstants.FanArtMediaType.Undefined:
                    case FanArtConstants.FanArtMediaType.Movie:
                        basePath = Path.Combine(MovieTheMovieDbMatcher.CACHE_PATH, movieDbId.ToString());
                        break;
                    }
                }
            }
            else
            {
                switch (mediaType)
                {
                case FanArtConstants.FanArtMediaType.Undefined:
                case FanArtConstants.FanArtMediaType.Movie:
                    int movieDbId;
                    basePath = !MovieTheMovieDbMatcher.Instance.TryGetMovieDbId(name, out movieDbId) ? null : Path.Combine(MovieTheMovieDbMatcher.CACHE_PATH, movieDbId.ToString());
                    break;

                case FanArtConstants.FanArtMediaType.MovieCollection:
                    int collectionId;
                    basePath = !MovieTheMovieDbMatcher.Instance.TryGetCollectionId(name, out collectionId) ? null : Path.Combine(MovieTheMovieDbMatcher.CACHE_PATH, "COLL_" + collectionId);
                    break;
                }
            }

            if (string.IsNullOrWhiteSpace(basePath))
            {
                return(false);
            }

            switch (fanArtType)
            {
            case FanArtConstants.FanArtType.Thumbnail:
            case FanArtConstants.FanArtType.Poster:
                patterns = new[] { Path.Combine(basePath, "Posters\\*.jpg") };
                return(true);

            case FanArtConstants.FanArtType.FanArt:
                patterns = new[] { Path.Combine(basePath, "Backdrops\\*.jpg") };
                return(true);
            }
            return(false);
        }
Ejemplo n.º 36
0
        /// <summary>
        /// Main process method for the InnerBlock
        /// </summary>
        /// <remarks>
        /// - SingleResources are just passed to the next DataflowBlock
        /// - If it's not a SingleResource
        ///   - it finds all the files in the current directory,
        ///   - in case of a RefreshImport
        ///     - it deletes all the files in the MediaLibrary that do not exist anymore in the filesystem,
        ///     - it stores the DateOfLastImport of all the files in the <see cref="PendingImportResourceNewGen"/>
        /// </remarks>
        /// <param name="importResource"><see cref="PendingImportResourceNewGen"/> to be processed</param>
        /// <returns>
        /// a HashSet of <see cref="PendingImportResourceNewGen"/>s containing the current <see cref="PendingImportResource"/>
        /// after processing as well as <see cref="PendingImportResourceNewGen"/>s for all files in the current directory
        /// </returns>
        private async Task <IEnumerable <PendingImportResourceNewGen> > ProcessDirectory(PendingImportResourceNewGen importResource)
        {
            var result = new HashSet <PendingImportResourceNewGen> {
                importResource
            };

            try
            {
                ICollection <IFileSystemResourceAccessor> files;
                ICollection <IFileSystemResourceAccessor> stubFiles           = new HashSet <IFileSystemResourceAccessor>();
                IDictionary <ResourcePath, DateTime>      path2LastImportDate = new Dictionary <ResourcePath, DateTime>();
                IDictionary <ResourcePath, Guid>          path2MediaItem      = new Dictionary <ResourcePath, Guid>();
                IEnumerable <MediaItem> mediaItems = null;
                if (importResource.IsSingleResource)
                {
                    files = new HashSet <IFileSystemResourceAccessor> {
                        importResource.ResourceAccessor
                    };
                    MediaItem mi = await LoadLocalItem(importResource.PendingResourcePath, PROVIDERRESOURCE_IMPORTER_MIA_ID_ENUMERATION, null).ConfigureAwait(false);

                    if (mi != null)
                    {
                        mediaItems = new List <MediaItem>(new MediaItem[] { mi });
                        importResource.MediaItemId = mi.MediaItemId;
                    }
                }
                else
                {
                    files = FileSystemResourceNavigator.GetFiles(importResource.ResourceAccessor, false, false) ?? new HashSet <IFileSystemResourceAccessor>();
                    SingleMediaItemAspect directoryAspect;
                    // ReSharper disable once PossibleInvalidOperationException
                    // TODO: Rework this
                    mediaItems = (await Browse(importResource.MediaItemId.Value, PROVIDERRESOURCE_IMPORTER_MIA_ID_ENUMERATION, DIRECTORY_MIA_ID_ENUMERATION).ConfigureAwait(false))
                                 .Where(mi => !MediaItemAspect.TryGetAspect(mi.Aspects, DirectoryAspect.Metadata, out directoryAspect));
                }
                if (mediaItems != null)
                {
                    foreach (MediaItem mi in mediaItems)
                    {
                        //Check metadata and files:
                        // 1. Last import date is lower than file change date => Refresh needed
                        // 2. Media item ID is empty => Reimport/import needed
                        // 3. Media item is dirty => Reimport/import needed
                        IList <MultipleMediaItemAspect> providerAspects = null;
                        if (MediaItemAspect.TryGetAspects(mi.Aspects, ProviderResourceAspect.Metadata, out providerAspects))
                        {
                            foreach (var pra in providerAspects)
                            {
                                bool         isStub = pra.GetAttributeValue <int>(ProviderResourceAspect.ATTR_TYPE) == ProviderResourceAspect.TYPE_STUB;
                                ResourcePath path   = ResourcePath.Deserialize(pra.GetAttributeValue <String>(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH));
                                if (!path2LastImportDate.ContainsKey(path) && importResource.PendingResourcePath.IsSameOrParentOf(path))
                                {
                                    //If last refresh is equal to added date, it has never been through the refresh cycle, so set low last change date
                                    //All media items must be added because the paths are later used to delete no longer existing media items
                                    var lastImportDate = mi.Aspects[ImporterAspect.ASPECT_ID][0].GetAttributeValue <DateTime>(ImporterAspect.ATTR_LAST_IMPORT_DATE);
                                    if (mi.Aspects[ImporterAspect.ASPECT_ID][0].GetAttributeValue <bool>(ImporterAspect.ATTR_DIRTY)) //If it is dirty, refresh is needed
                                    {
                                        path2LastImportDate.Add(path, DateTime.MinValue);
                                    }
                                    else
                                    {
                                        path2LastImportDate.Add(path, lastImportDate);
                                    }
                                }
                                if (!importResource.IsSingleResource && !isStub && !path2MediaItem.ContainsKey(path))
                                {
                                    path2MediaItem.Add(path, mi.MediaItemId);
                                }

                                // Stub items need their media item id because the do no have a unique path
                                // So add them now as long as the needed info is known
                                if (isStub)
                                {
                                    IFileSystemResourceAccessor file = null;
                                    try
                                    {
                                        IResourceAccessor ra;
                                        if (path.TryCreateLocalResourceAccessor(out ra))
                                        {
                                            file = ra as IFileSystemResourceAccessor;
                                        }
                                    }
                                    catch { }

                                    // Only add it if it still exists
                                    if (files.Where(f => file != null && f.CanonicalLocalResourcePath == file.CanonicalLocalResourcePath).Any())
                                    {
                                        stubFiles.Add(file);

                                        DateTime dateTime;
                                        PendingImportResourceNewGen pir = new PendingImportResourceNewGen(importResource.ResourceAccessor.CanonicalLocalResourcePath, file, ToString(),
                                                                                                          ParentImportJobController, importResource.MediaItemId, mi.MediaItemId, true);
                                        pir.ExistingAspects = mi.Aspects;
                                        if (ImportJobInformation.JobType == ImportJobType.Refresh)
                                        {
                                            if (path2LastImportDate.TryGetValue(pir.PendingResourcePath, out dateTime))
                                            {
                                                pir.DateOfLastImport = dateTime;
                                            }
                                        }
                                        result.Add(pir);
                                    }
                                }
                            }
                        }
                    }
                    await DeleteNoLongerExistingFilesFromMediaLibrary(files, path2LastImportDate.Keys).ConfigureAwait(false);
                }

                //Add new stub items
                foreach (var file in files.Where(f => !path2LastImportDate.Keys.Contains(f.CanonicalLocalResourcePath)))
                {
                    if (await IsStubResource(file).ConfigureAwait(false))
                    {
                        stubFiles.Add(file);

                        DateTime dateTime;
                        var      stubAspects = await ExtractStubItems(file).ConfigureAwait(false);

                        if (stubAspects != null)
                        {
                            foreach (var aspects in stubAspects)
                            {
                                PendingImportResourceNewGen pir = new PendingImportResourceNewGen(importResource.ResourceAccessor.CanonicalLocalResourcePath, file, ToString(),
                                                                                                  ParentImportJobController, importResource.MediaItemId, null, true);
                                pir.ExistingAspects = aspects;
                                if (ImportJobInformation.JobType == ImportJobType.Refresh)
                                {
                                    if (path2LastImportDate.TryGetValue(pir.PendingResourcePath, out dateTime))
                                    {
                                        pir.DateOfLastImport = dateTime;
                                    }
                                }
                                result.Add(pir);
                            }
                        }
                    }
                }

                //Remove stub files from files collection so they don't get added again
                foreach (IFileSystemResourceAccessor file in stubFiles)
                {
                    IFileSystemResourceAccessor stub = files.Where(f => f.CanonicalLocalResourcePath == file.CanonicalLocalResourcePath).FirstOrDefault();
                    if (stub != null)
                    {
                        files.Remove(stub);
                    }
                }

                //Add importers for files if any
                if (!importResource.IsSingleResource)
                {
                    if (ImportJobInformation.JobType == ImportJobType.Import)
                    {
                        //Only import new files so only add non existing paths
                        result.UnionWith(files.Where(f => !path2LastImportDate.Keys.Contains(f.CanonicalLocalResourcePath)).
                                         Select(f => new PendingImportResourceNewGen(importResource.ResourceAccessor.CanonicalLocalResourcePath, f, ToString(), ParentImportJobController, importResource.MediaItemId)));
                    }
                    else
                    {
                        result.UnionWith(files.Select(f => new PendingImportResourceNewGen(importResource.ResourceAccessor.CanonicalLocalResourcePath, f, ToString(), ParentImportJobController, importResource.MediaItemId,
                                                                                           path2MediaItem.ContainsKey(f.CanonicalLocalResourcePath) ? path2MediaItem[f.CanonicalLocalResourcePath] : (Guid?)null)));
                    }
                }

                // If this is a RefreshImport and we found files of the current directory in the MediaLibrary,
                // store the DateOfLastImport in the PendingImportResource
                if (ImportJobInformation.JobType == ImportJobType.Refresh)
                {
                    DateTime dateTime;
                    if (path2LastImportDate != null)
                    {
                        foreach (var pir in result)
                        {
                            if (path2LastImportDate.TryGetValue(pir.PendingResourcePath, out dateTime))
                            {
                                pir.DateOfLastImport = dateTime;
                            }
                        }
                    }
                }

                return(result);
            }
            catch (TaskCanceledException)
            {
                return(result);
            }
            catch (Exception ex)
            {
                ServiceRegistration.Get <ILogger>().Warn("ImporterWorker.{0}.{1}: Error while processing {2}", ex, ParentImportJobController, ToString(), importResource);
                importResource.IsValid = false;
                return(result);
            }
        }
Ejemplo n.º 37
0
 public override bool IsAvailable(MediaItem mediaItem)
 {
     return(!IsRecording(mediaItem) && IsResourceDeletor(mediaItem));
 }
 public static MvcHtmlString Media(this HtmlHelper helper, MediaItem media, double aspect, string cssClass = null)
 {
     return(Media(helper, media, null, aspect, cssClass));
 }
Ejemplo n.º 39
0
        public void OnImportsSatisfied()
        {
            ShellViewModel = new ShellViewModel(MediaFileWatcher.Instance, RegionManager, EventAggregator);

            DataContext = ShellViewModel;

            this.RegionManager.RegisterViewWithRegion(RegionNames.MainNavigationToolBarRegion, typeof(ImageNavigationItemView));
            this.RegionManager.RegisterViewWithRegion(RegionNames.MainNavigationToolBarRegion, typeof(VideoNavigationItemView));
            this.RegionManager.RegisterViewWithRegion(RegionNames.MainNavigationToolBarRegion, typeof(MediaFileBrowserNavigationItemView));
            this.RegionManager.RegisterViewWithRegion(RegionNames.MainNavigationToolBarRegion, typeof(SettingsNavigationItemView));

            EventAggregator.GetEvent <TitleChangedEvent>().Subscribe((title) =>
            {
                if (!String.IsNullOrEmpty(title))
                {
                    this.Title = "MediaViewer - " + title;
                }
                else
                {
                    this.Title = "MediaViewer";
                }
            }, ThreadOption.UIThread);

            EventAggregator.GetEvent <ToggleFullScreenEvent>().Subscribe((isFullscreen) =>
            {
                if (isFullscreen)
                {
                    prevWindowState         = WindowState;
                    WindowState             = System.Windows.WindowState.Maximized;
                    WindowStyle             = System.Windows.WindowStyle.None;
                    toolBarPanel.Visibility = Visibility.Collapsed;
                }
                else
                {
                    WindowState             = prevWindowState;
                    WindowStyle             = System.Windows.WindowStyle.SingleBorderWindow;
                    toolBarPanel.Visibility = Visibility.Visible;
                }
            }, ThreadOption.UIThread);


            // initialize several settings
            ServiceLocator.Current.GetInstance(typeof(DbSettingsViewModel));
            ServiceLocator.Current.GetInstance(typeof(AboutViewModel));

            try {
                String location = App.Args.Count() > 0 ? FileUtils.getProperFilePathCapitalization(App.Args[0]) : "";

                if (MediaViewer.Model.Utils.MediaFormatConvert.isImageFile(location))
                {
                    MediaFileWatcher.Instance.Path = FileUtils.getPathWithoutFileName(location);
                    MediaItem item = MediaItemFactory.create(location);
                    ShellViewModel.navigateToImageView(item);
                }
                else if (MediaFormatConvert.isVideoFile(location))
                {
                    MediaFileWatcher.Instance.Path = FileUtils.getPathWithoutFileName(location);
                    MediaItem item = MediaItemFactory.create(location);
                    ShellViewModel.navigateToVideoView(item);
                }
                else
                {
                    ShellViewModel.navigateToMediaFileBrowser();
                }
            } catch (Exception e) {
                Logger.Log.Error("Error in command line argument: " + App.Args[0], e);
                ShellViewModel.navigateToMediaFileBrowser();
            }
        }
 public static MvcHtmlString Media(this HtmlHelper helper, MediaItem media, string widthFactor = null, string cssClass = null)
 {
     return(Media(helper, media, widthFactor, SiteConfiguration.MediaHelper.DefaultMediaAspect, cssClass));
 }
        protected override ValidatorResult Evaluate()
        {
            int?maxWords = this.GetIntParam("MaxWords");
            int?minWords = this.GetIntParam("MinWords");
            int?minWarn  = this.GetIntParam("MinWarn");
            int?maxWarn  = this.GetIntParam("MaxWarn");

            if (minWarn == null && maxWarn == null && maxWords == null && minWords == null)
            {
                this.Text = Translate.Text("No thresholds defined for " + this.Name);
                return(ValidatorResult.Warning);
            }

            if (string.IsNullOrEmpty(this.ControlValidationValue))
            {
                return(ValidatorResult.Valid);
            }

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(this.ControlValidationValue);
            Item folder = Sitecore.Context.ContentDatabase.GetItem(
                doc.DocumentElement.Attributes["mediaid"].Value);

            if (folder == null || !folder.HasChildren)
            {
                return(ValidatorResult.Valid);
            }

            foreach (Item child in folder.Children)
            {
                MediaItem mediaItem = new MediaItem(child);

                using (WordprocessingDocument document = WordprocessingDocument.Open(
                           mediaItem.GetMediaStream(),
                           false /*isEditable*/))
                {
                    int words = int.Parse(
                        document.ExtendedFilePropertiesPart.Properties.Words.Text);

                    if (minWords != null && words < minWords)
                    {
                        this.Text = Translate.Text(
                            ".docx should contain at least {0} words (currently {1}).",
                            MainUtil.FormatLong(minWords.Value),
                            MainUtil.FormatLong(words));
                        return(this.GetMaxValidatorResult());
                    }

                    if (maxWords != null && words > maxWords)
                    {
                        this.Text = Translate.Text(
                            ".docx should contain less than {0} words (currently {1}).",
                            MainUtil.FormatLong(maxWords.Value),
                            MainUtil.FormatLong(words));
                        return(this.GetMaxValidatorResult());
                    }

                    if (minWarn != null && words > minWarn)
                    {
                        this.Text = Translate.Text(
                            ".docx contains more than {0} words (currently {1}).",
                            MainUtil.FormatLong(minWarn.Value),
                            MainUtil.FormatLong(words));
                        return(ValidatorResult.Warning);
                    }

                    if (maxWarn == null || words < maxWarn)
                    {
                        continue;
                    }

                    this.Text = Translate.Text(
                        ".docx file contains {0} words; approaching excessive length.",
                        MainUtil.FormatLong(words));

                    if (maxWords != null)
                    {
                        this.Text += " " + Translate.Text(
                            ".docx cannot contain more than {0} words.",
                            MainUtil.FormatLong(maxWords.Value));
                    }

                    return(ValidatorResult.Warning);
                }
            }

            return(ValidatorResult.Valid);
        }
Ejemplo n.º 42
0
        public override async Task <AsyncResult <ContentDirectoryMessaging.MediaItemChangeType> > ProcessAsync(MediaItem mediaItem)
        {
            // If the MediaItem was loaded from ML, remove it there as well.
            if (IsManagedByMediaLibrary(mediaItem))
            {
                IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory;
                if (cd == null)
                {
                    return(new AsyncResult <ContentDirectoryMessaging.MediaItemChangeType>(false, ContentDirectoryMessaging.MediaItemChangeType.None));
                }

                MediaItemMatchModel           mimm    = ServiceRegistration.Get <IWorkflowManager>().GetModel(MediaItemMatchModel.MODEL_ID_MIMATCH) as MediaItemMatchModel;
                IEnumerable <MediaItemAspect> aspects = await mimm.OpenSelectMatchDialogAsync(mediaItem).ConfigureAwait(false);

                if (aspects != null)
                {
                    await cd.ReimportMediaItemMetadataAsync(mediaItem.MediaItemId, aspects);

                    //After refresh is completed on server a change message will be fired
                    return(new AsyncResult <ContentDirectoryMessaging.MediaItemChangeType>(true, ContentDirectoryMessaging.MediaItemChangeType.None));
                }
            }
            return(new AsyncResult <ContentDirectoryMessaging.MediaItemChangeType>(false, ContentDirectoryMessaging.MediaItemChangeType.None));
        }
Ejemplo n.º 43
0
        public void SetMediaItem(IResourceLocator locator, string mediaItemTitle, MediaItem mediaItem)
        {
            _mediaItem = mediaItem;

            // free previous opened resource
            FilterGraphTools.TryDispose(ref _resourceAccessor);
            FilterGraphTools.TryDispose(ref _rot);

            _state    = PlayerState.Active;
            _isPaused = true;
            try
            {
                _resourceLocator = locator;
                _mediaItemTitle  = mediaItemTitle;
                CreateResourceAccessor();

                // Create a DirectShow FilterGraph
                CreateGraphBuilder();

                // Add it in ROT (Running Object Table) for debug purpose, it allows to view the Graph from outside (i.e. graphedit)
                _rot = new DsROTEntry(_graphBuilder);

                // Add a notification handler (see WndProc)
                _instancePtr = Marshal.AllocCoTaskMem(4);
                IMediaEventEx mee = _graphBuilder as IMediaEventEx;
                if (mee != null)
                {
                    mee.SetNotifyWindow(SkinContext.Form.Handle, WM_GRAPHNOTIFY, _instancePtr);
                }

                // Create the Allocator / Presenter object
                AddPresenter();

                ServiceRegistration.Get <ILogger>().Debug("{0}: Adding audio renderer", PlayerTitle);
                AddAudioRenderer();

                ServiceRegistration.Get <ILogger>().Debug("{0}: Adding preferred codecs", PlayerTitle);
                AddPreferredCodecs();

                ServiceRegistration.Get <ILogger>().Debug("{0}: Adding source filter", PlayerTitle);
                AddSourceFilter();

                ServiceRegistration.Get <ILogger>().Debug("{0}: Adding subtitle filter", PlayerTitle);
                AddSubtitleFilter(true);

                ServiceRegistration.Get <ILogger>().Debug("{0}: Run graph", PlayerTitle);

                //This needs to be done here before we check if the evr pins are connected
                //since this method gives players the chance to render the last bits of the graph
                OnBeforeGraphRunning();

                // Now run the graph, i.e. the DVD player needs a running graph before getting informations from dvd filter.
                IMediaControl mc = (IMediaControl)_graphBuilder;
                int           hr = mc.Run();
                new HRESULT(hr).Throw();

                _initialized = true;
                OnGraphRunning();
            }
            catch (Exception)
            {
                Shutdown();
                throw;
            }
        }
        public override int Compare(MediaItem x, MediaItem y)
        {
            SingleMediaItemAspect aspectX;
            SingleMediaItemAspect aspectY;

            // Check audio
            if (!MediaItemAspect.TryGetAspect(x.Aspects, AudioAspect.Metadata, out aspectX))
            {
                aspectX = null;
            }
            if (!MediaItemAspect.TryGetAspect(y.Aspects, AudioAspect.Metadata, out aspectY))
            {
                aspectY = null;
            }
            if (aspectX != null && aspectY != null)
            {
                // Both are audio items - compare to each other
                return(_audioComparer.Compare(x, y));
            }
            if (aspectX != null || aspectY != null)
            {
                // One of them is an audio item - order that item first
                return(CompareDifferentTypes(aspectX, aspectY));
            }
            // None of them is an audio item

            // Check video
            if (!MediaItemAspect.TryGetAspect(x.Aspects, VideoAspect.Metadata, out aspectX))
            {
                aspectX = null;
            }
            if (!MediaItemAspect.TryGetAspect(y.Aspects, VideoAspect.Metadata, out aspectY))
            {
                aspectY = null;
            }
            if (aspectX != null && aspectY != null)
            {
                // Both are vido items - compare to each other
                return(_videoComparer.Compare(x, y));
            }
            if (aspectX != null || aspectY != null)
            {
                // One of them is a video item - order that item first
                return(CompareDifferentTypes(aspectX, aspectY));
            }
            // None of them is a video item

            // Check image
            if (!MediaItemAspect.TryGetAspect(x.Aspects, ImageAspect.Metadata, out aspectX))
            {
                aspectX = null;
            }
            if (!MediaItemAspect.TryGetAspect(y.Aspects, ImageAspect.Metadata, out aspectY))
            {
                aspectY = null;
            }
            if (aspectX != null && aspectY != null)
            {
                // Both are image items - compare to each other
                return(_imageComparer.Compare(x, y));
            }
            if (aspectX != null || aspectY != null)
            {
                // One of them is an image item - order that item first
                return(CompareDifferentTypes(aspectX, aspectY));
            }
            // None of them is an image item

            // Fallback
            return(base.Compare(x, y));
        }
Ejemplo n.º 45
0
 protected static bool IsRecording(MediaItem mediaItem)
 {
     return(mediaItem.Aspects.ContainsKey(new Guid("8DB70262-0DCE-4C80-AD03-FB1CDF7E1913") /* RecordingAspect.ASPECT_ID*/));
 }
 public override object GetGroupByValue(MediaItem item)
 {
     return(null);
 }
Ejemplo n.º 47
0
        /// <summary>
        /// Gets a list of <see cref="FanArtImage"/>s for a requested <paramref name="mediaType"/>, <paramref name="fanArtType"/> and <paramref name="name"/>.
        /// The name can be: Series name, Actor name, Artist name depending on the <paramref name="mediaType"/>.
        /// </summary>
        /// <param name="mediaType">Requested FanArtMediaType</param>
        /// <param name="fanArtType">Requested FanArtType</param>
        /// <param name="name">Requested name of Series, Actor, Artist...</param>
        /// <param name="maxWidth">Maximum width for image. <c>0</c> returns image in original size.</param>
        /// <param name="maxHeight">Maximum height for image. <c>0</c> returns image in original size.</param>
        /// <param name="singleRandom">If <c>true</c> only one random image URI will be returned</param>
        /// <param name="result">Result if return code is <c>true</c>.</param>
        /// <returns><c>true</c> if at least one match was found.</returns>
        public bool TryGetFanArt(string mediaType, string fanArtType, string name, int maxWidth, int maxHeight, bool singleRandom, out IList <IResourceLocator> result)
        {
            result = null;

            if (!VALID_MEDIA_TYPES.Contains(mediaType) || !VALID_FANART_TYPES.Contains(fanArtType))
            {
                return(false);
            }

            if (string.IsNullOrWhiteSpace(name))
            {
                return(false);
            }

            Guid mediaItemId;

            if (Guid.TryParse(name, out mediaItemId) == false)
            {
                return(false);
            }

            IFanArtCache fanArtCache = ServiceRegistration.Get <IFanArtCache>();

            List <string> fanArtFiles = new List <string>();

            fanArtFiles.AddRange(fanArtCache.GetFanArtFiles(mediaItemId, fanArtType));
            if (fanArtFiles.Count == 0 && fanArtType == FanArtTypes.Poster)
            {
                fanArtFiles.AddRange(fanArtCache.GetFanArtFiles(mediaItemId, FanArtTypes.Cover));
            }

            // Try fallback
            if (fanArtFiles.Count == 0 && (mediaType == FanArtMediaTypes.Audio || mediaType == FanArtMediaTypes.Album))
            {
                IMediaLibrary mediaLibrary = ServiceRegistration.Get <IMediaLibrary>(false);
                if (mediaLibrary == null)
                {
                    return(false);
                }

                IFilter           filter = new MediaItemIdFilter(mediaItemId);
                IList <MediaItem> items  = mediaLibrary.Search(new MediaItemQuery(NECESSARY_MIAS, OPTIONAL_MIAS, filter), false, null, true);
                if (items == null || items.Count == 0)
                {
                    return(false);
                }

                MediaItem mediaItem = items.First();

                IList <MultipleMediaItemAspect> relationAspects;
                if (mediaType == FanArtMediaTypes.Audio && fanArtType == FanArtTypes.FanArt)
                {
                    //No FanArt exists for Audio so use Artists
                    if (MediaItemAspect.TryGetAspects(mediaItem.Aspects, RelationshipAspect.Metadata, out relationAspects))
                    {
                        //Artist fallback
                        foreach (MultipleMediaItemAspect relation in relationAspects)
                        {
                            if ((Guid?)relation[RelationshipAspect.ATTR_LINKED_ROLE] == PersonAspect.ROLE_ARTIST)
                            {
                                fanArtFiles.AddRange(fanArtCache.GetFanArtFiles((Guid)relation[RelationshipAspect.ATTR_LINKED_ID], fanArtType));
                                if (fanArtFiles.Count > 0)
                                {
                                    break;
                                }
                            }
                        }
                    }
                }
                else if (mediaType == FanArtMediaTypes.Album && fanArtType == FanArtTypes.FanArt)
                {
                    //No FanArt exists for Album so use Artists
                    if (MediaItemAspect.TryGetAspects(mediaItem.Aspects, RelationshipAspect.Metadata, out relationAspects))
                    {
                        //Album artist fallback
                        foreach (MultipleMediaItemAspect relation in relationAspects)
                        {
                            if ((Guid?)relation[RelationshipAspect.ATTR_LINKED_ROLE] == PersonAspect.ROLE_ALBUMARTIST)
                            {
                                fanArtFiles.AddRange(fanArtCache.GetFanArtFiles((Guid)relation[RelationshipAspect.ATTR_LINKED_ID], fanArtType));
                                if (fanArtFiles.Count > 0)
                                {
                                    break;
                                }
                            }
                        }
                    }
                }
                else if (mediaItem.Aspects.ContainsKey(AudioAspect.ASPECT_ID))
                {
                    if (MediaItemAspect.TryGetAspects(mediaItem.Aspects, RelationshipAspect.Metadata, out relationAspects))
                    {
                        //Album fallback
                        foreach (MultipleMediaItemAspect relation in relationAspects)
                        {
                            if ((Guid?)relation[RelationshipAspect.ATTR_LINKED_ROLE] == AudioAlbumAspect.ROLE_ALBUM)
                            {
                                fanArtFiles.AddRange(fanArtCache.GetFanArtFiles((Guid)relation[RelationshipAspect.ATTR_LINKED_ID], fanArtType));
                                if (fanArtFiles.Count > 0)
                                {
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            List <IResourceLocator> files = new List <IResourceLocator>();

            try
            {
                files.AddRange(fanArtFiles
                               .Select(fileName => new ResourceLocator(ResourcePath.BuildBaseProviderPath(LocalFsResourceProviderBase.LOCAL_FS_RESOURCE_PROVIDER_ID, fileName)))
                               );
                result = files;
                return(result.Count > 0);
            }
            catch (Exception) { }
            return(false);
        }
Ejemplo n.º 48
0
        public async Task Play(MediaItem channel)
        {
            try
            {
                _opening = true;
                var plugin = _core.PluginLoader.GetPlugins <IVlcBinariesPlugin>().FirstOrDefault();
                if (plugin == null)
                {
                    throw new Exception("No VLC binaries plugin found");
                }
                var binariesPath = plugin.GetBinariesPath();

                _currentChannel = channel;

                IsPlaying    = true;
                HasSubtitles = false;
                IsPlaying    = false;

                CleanUp();
                _cts = new CancellationTokenSource();
                var cts = _cts;
                await SetupPipe(cts);

                if (cts.IsCancellationRequested)
                {
                    return;
                }
                if (_subProcess != null)
                {
                    HasNextChanged?.Invoke(this, false);
                    HasPreviousChanged?.Invoke(this, false);


                    var res = await _subProcess.Pipe.CallAsync("initialize", binariesPath, VlcParameters);

                    if (cts.IsCancellationRequested)
                    {
                        return;
                    }
                    //CaptureMousePanel.BringToFront();
                    if (res == null)
                    {
                        OnError(new Exception("Could not initialize"));
                        CleanUp();
                        return;
                    }

                    res = await _subProcess.Pipe.CallAsync("handle", pictureBox.Handle);

                    if (cts.IsCancellationRequested)
                    {
                        return;
                    }
                    if (res == null)
                    {
                        OnError(new Exception("Could not set handle"));
                        CleanUp();
                        return;
                    }

                    await SendToSubProcess("play", channel.GetMRL() + " " + channel.GetExtras());
                }
                else
                {
                    throw new Exception("Pipe not connected");
                }
            }
            catch (AggregateException ex)
            {
                if (ex.InnerException is ObjectDisposedException)
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                OnError(ex);
            }
            finally
            {
            }
        }
Ejemplo n.º 49
0
 public void SetScreen(int index)
 {
     mediaItem         = DataManager.Instance.MediaData.MediaItems[index];
     renderer.material = mediaItem.Material;
 }
 public DetectFacesArgs(Item item)
 {
     MediaItem = new MediaItem(item);
 }
Ejemplo n.º 51
0
        /// <summary>
        /// Gets the correct URL for a media item according to SDN as of SC 6.4
        /// </summary>
        public static string GetMediaUrl(MediaItem item)
        {
            Assert.ArgumentNotNull(item, "item");

            return(StringUtil.EnsurePrefix('/', MediaManager.GetMediaUrl(item)));
        }
Ejemplo n.º 52
0
 public static string PrimaryProviderResourcePath(this MediaItem mediaItem)
 {
     return(mediaItem.PrimaryProviderResourceAspect().GetAttributeValue <string>(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH));
 }
Ejemplo n.º 53
0
 private void StopSlideshow(MediaItem mediaItem)
 {
     _imageDisplayManager.StopSlideshow(mediaItem.Id);
 }
Ejemplo n.º 54
0
 public static MultipleMediaItemAspect PrimaryProviderResourceAspect(this MediaItem mediaItem)
 {
     return(mediaItem.PrimaryResources[mediaItem.ActiveResourceLocatorIndex]);
 }
Ejemplo n.º 55
0
 private void StopWeb(MediaItem mediaItem)
 {
     _webDisplayManager.HideWeb();
 }
Ejemplo n.º 56
0
 public static MediaItemAspect GetAspect(this MediaItem mediaItem, MediaItemAspectMetadata aspectMetadata)
 {
     return(mediaItem[aspectMetadata.AspectId]?.FirstOrDefault());
 }
Ejemplo n.º 57
0
 private void ShowImage(MediaItem mediaItem)
 {
     _imageDisplayManager.ShowSingleImage(mediaItem.FilePath, mediaItem.Id, mediaItem.IsBlankScreen);
 }
Ejemplo n.º 58
0
        public override bool Process(MediaItem mediaItem, out ContentDirectoryMessaging.MediaItemChangeType changeType)
        {
            IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory;
            bool removeFromML    = IsManagedByMediaLibrary(mediaItem) && cd != null;

            changeType = ContentDirectoryMessaging.MediaItemChangeType.None;

            // Support multi-resource media items and secondary resources
            IList <MultipleMediaItemAspect> providerAspects;

            if (!MediaItemAspect.TryGetAspects(mediaItem.Aspects, ProviderResourceAspect.Metadata, out providerAspects))
            {
                return(false);
            }

            foreach (MultipleMediaItemAspect providerAspect in providerAspects)
            {
                string systemId             = (string)providerAspect[ProviderResourceAspect.ATTR_SYSTEM_ID];
                string resourceAccessorPath = (string)providerAspect[ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH];
                var    rl = new ResourceLocator(systemId, ResourcePath.Deserialize(resourceAccessorPath));
                using (var ra = rl.CreateAccessor())
                {
                    var rad = ra as IResourceDeletor;
                    if (rad == null)
                    {
                        return(false);
                    }

                    // First try to delete the file from storage.
                    if (!rad.Delete())
                    {
                        return(false);
                    }

                    changeType = ContentDirectoryMessaging.MediaItemChangeType.Deleted;

                    // If the MediaItem was loaded from ML, remove it there as well.
                    if (removeFromML)
                    {
                        cd.DeleteMediaItemOrPath(rl.NativeSystemId, rl.NativeResourcePath, true);
                    }
                }
            }

            // Check for special cases here:
            // 1) Recordings have an additional .xml attached
            // 2) Deleting files could lead to empty folders that should be also removed
            foreach (DeleteRule rule in _defaultRules.Where(r => r.IsEnabled))
            {
                if (mediaItem.Aspects.ContainsKey(rule.HasAspectGuid))
                {
                    var tsPath = mediaItem.GetResourceLocator().NativeResourcePath.ToString();
                    foreach (string otherExtension in rule.DeleteOtherExtensions)
                    {
                        string            otherFilePath = ProviderPathHelper.ChangeExtension(tsPath, otherExtension);
                        IResourceAccessor ra;
                        if (!ResourcePath.Deserialize(otherFilePath).TryCreateLocalResourceAccessor(out ra))
                        {
                            continue;
                        }

                        // Delete other file. We do not check here for existance of file, the Delete needs to handle this.
                        using (ra)
                        {
                            var rad = ra as IResourceDeletor;
                            rad?.Delete();
                        }
                    }

                    if (rule.DeleteEmptyFolders)
                    {
                        var folderPath = ProviderPathHelper.GetDirectoryName(tsPath);
                        IResourceAccessor ra;
                        if (!ResourcePath.Deserialize(folderPath).TryCreateLocalResourceAccessor(out ra))
                        {
                            continue;
                        }

                        // Delete folder if empty
                        using (ra)
                        {
                            IFileSystemResourceAccessor fsra = ra as IFileSystemResourceAccessor;
                            if (fsra != null)
                            {
                                var isEmpty = fsra.GetFiles().Count == 0 && fsra.GetChildDirectories().Count == 0;
                                if (isEmpty)
                                {
                                    var rad = ra as IResourceDeletor;
                                    rad?.Delete();
                                }
                            }
                        }
                    }
                }
            }

            return(true);
        }
Ejemplo n.º 59
0
            public IList <Guid> Execute(IList <string> mediaFiles, ShareLocation shareLocation)
            {
                NumFiles = mediaFiles.Count;
                IServerConnectionManager scm = ServiceRegistration.Get <IServerConnectionManager>();
                IContentDirectory        cd  = scm.ContentDirectory;
                string systemId = shareLocation == ShareLocation.Local ? ServiceRegistration.Get <ISystemResolver>().LocalSystemId : scm.HomeServerSystemId;

                Guid[] necessaryAudioAspectIds = null;
                Guid[] optionalAudioAspectIds  = null;

                ILogger        logger        = ServiceRegistration.Get <ILogger>();
                IScreenManager screenManager = ServiceRegistration.Get <IScreenManager>();
                Guid?          dialogId      = screenManager.ShowDialog(Consts.DIALOG_IMPORT_PLAYLIST_PROGRESS, (dialogName, dialogInstanceId) => Cancel());

                if (!dialogId.HasValue)
                {
                    logger.Warn("ImportPlaylistOperation: Error showing progress dialog");
                    return(null);
                }

                Guid?           userProfile = null;
                IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>();

                if (userProfileDataManagement != null && userProfileDataManagement.IsValidUser)
                {
                    userProfile = userProfileDataManagement.CurrentUser.ProfileId;
                }

                IList <Guid> result = new List <Guid>();

                NumMatched   = 0;
                NumProcessed = 0;
                NumMatched   = 0;
                UpdateScreenData();
                try
                {
                    foreach (string localMediaFile in mediaFiles)
                    {
                        if (IsCancelled)
                        {
                            return(null);
                        }
                        CheckUpdateScreenData();
                        MediaItem item = cd.LoadItemAsync(systemId, LocalFsResourceProviderBase.ToResourcePath(localMediaFile),
                                                          necessaryAudioAspectIds, optionalAudioAspectIds, userProfile).Result;
                        NumProcessed++;
                        if (item == null)
                        {
                            logger.Warn("ImportPlaylistOperation: Media item '{0}' was not found in the media library", localMediaFile);
                            continue;
                        }
                        logger.Debug("ImportPlaylistOperation: Matched media item '{0}' in media library", localMediaFile);
                        NumMatched++;
                        result.Add(item.MediaItemId);
                    }
                }
                catch (Exception e)
                {
                    logger.Warn("ImportPlaylistOperation: Error importing playlist", e);
                }
                screenManager.CloseDialog(dialogId.Value);
                return(result);
            }
Ejemplo n.º 60
0
 public AlbumFilterItem(MediaItem mediaItem)
 {
     MediaItem = mediaItem;
 }