示例#1
0
  public static String GetShowCombCategories(Object MediaObject) {
    String category = StringCategory(ShowAPI.GetShowCategory(MediaObject));
    String subcategory = StringCategory(ShowAPI.GetShowSubCategory(MediaObject));
    String categories = "";
    if (category.length() != 0 && subcategory.length() != 0) {
      categories = category + " | " + subcategory;
    } else if (category.length() != 0) {
      categories = category;
    }

    return categories;
  }
示例#2
0
 public static int GetShowDuration(Object MediaObject) {
   long duration = ShowAPI.GetShowDuration(MediaObject);
   int durationint = (int) duration;
   if (durationint > 0) {
     durationint = durationint / 60000;
   }
   return durationint;
 }
示例#3
0
  public static String GetShowTagLine(Object MediaObject) {
    String s1 = ShowAPI.GetShowDescription(MediaObject);
    if (s1.contains(".")) {
      s1 = s1.substring(0, s1.indexOf("."));
    }

    return s1;
  }
示例#4
0
  public static String[] GetShowCategories(Object MediaObject) {
    String Category = StringCategory(ShowAPI.GetShowCategory(MediaObject));
    String SubCategory = StringCategory(ShowAPI.GetShowSubCategory(MediaObject));
    String[] Categories;
    if (SubCategory.length() != 0) {

      Categories = new String[2];
      Categories[0] = Category;
      Categories[1] = SubCategory;

    } else if (Category.length() != 0) {
      Categories = new String[1];
      Categories[0] = Category;
    } else {
      Categories = null;
    }

    return Categories;
  }
示例#5
0
  public static String GetShowDescription(Object MediaObject) {
    String s1 = ShowAPI.GetShowDescription(MediaObject);

    if (s1.contains("---")) {
      s1 = s1.substring(0, s1.indexOf("---"));
    } else if (s1.contains("User")) {

      s1 = s1.substring(0, s1.indexOf("User"));
    }

    return s1;
  }
示例#6
0
  public static String[] GetPeopleInShowRoleWriter(Object MediaObject) {
    String[] writers = ShowAPI.GetPeopleListInShowInRole(MediaObject, "Writer");
    int length = writers.length;
    String[] WriterList = new String[length];

    if (length != 0) {
      for (int i = 0; i < length; i++) {
        String element = writers[i].trim();

        WriterList[i] = element;
      }
    } else {
      WriterList = null;
    }

    return WriterList;
  }
示例#7
0
  public static String[] GetPeopleInShowRoleDirector(Object MediaObject) {
    String[] directors = ShowAPI.GetPeopleListInShowInRole(MediaObject, "Director");
    int length = directors.length;
    String[] directorList = new String[length];

    if (length != 0) {
      for (int i = 0; i < length; i++) {
        String element = directors[i].trim();

        directorList[i] = element;
      }
    } else {
      directorList = null;
    }

    return directorList;
  }
示例#8
0
  public static String[] GetPeopleInShowRoleActor(Object MediaObject) {
    String[] actors = ShowAPI.GetPeopleListInShowInRole(MediaObject, "Actor");
    int length = actors.length;
    String[] actorlist = new String[length];
    if (length != 0) {
      for (int i = 0; i < length; i++) {
        String element = actors[i].trim();
        if (element.contains("--")) {
          actorlist[i] = element.substring(0, element.indexOf("--"));
        } else {
          actorlist[i] = element;
        }
      }
    } else {
      actorlist = null;
    }

    return actorlist;
  }
示例#9
0
  /**
   * Interface definition for implementation classes that listen for events from the SageTV core
   *
   * <p>Variable types are in brackets[] after the var name unless they are the same as the var name
   * itself. List of known core events:
   *
   * <p>MediaFileImported - vars: MediaFile ImportingStarted ImportingCompleted RecordingCompleted
   * (called when a complete recording is done) vars: MediaFile RecordingStarted (called when any
   * kind of recording is started) vars: MediaFile RecordingStopped (called whenever a recording is
   * stopped for any reason) vars: MediaFile AllPluginsLoaded RecordingScheduleChanged
   * ConflictStatusChanged SystemMessagePosted vars: SystemMessage EPGUpdateCompleted
   * MediaFileRemoved vars: MediaFile PlaybackStopped (called when the file is closed) vars:
   * MediaFile, UIContext[String], Duration[Long], MediaTime[Long], ChapterNum[Integer],
   * TitleNum[Integer] PlaybackFinished (called at the EOF) vars: MediaFile, UIContext[String],
   * Duration[Long], MediaTime[Long], ChapterNum[Integer], TitleNum[Integer] PlaybackStarted vars:
   * MediaFile, UIContext[String], Duration[Long], MediaTime[Long], ChapterNum[Integer],
   * TitleNum[Integer] FavoriteAdded vars: Favorite FavoriteModified vars: Favorite FavoriteRemoved
   * vars: Favorite PlaylistAdded vars: Playlist, UIContext[String] PlaylistModified vars: Playlist,
   * UIContext[String] PlaylistRemoved vars: Playlist, UIContext[String] ClientConnected vars:
   * IPAddress[String], MACAddress[String] (if its a placeshifter/extender, MACAddress is null
   * otherwise) ClientDisconnected vars: IPAddress[String], MACAddress[String] (if its a
   * placeshifter/extender, MACAddress is null otherwise)
   *
   * <p>This is a callback method invoked from the SageTV core for any events the listener has
   * subscribed to. See the sage.SageTVPluginRegistry interface definition for details regarding
   * subscribing and unsubscribing to events. The eventName will be a predefined String which
   * indicates the event type. The eventVars will be a Map of variables specific to the event
   * information. This Map should NOT be modified. The keys to the eventVars Map will generally be
   * Strings; but this may change in the future and plugins that submit events are not required to
   * follow that rule.
   */
  @Override
  public synchronized void sageEvent(String eventName, java.util.Map eventVars) {

    Log.getInstance().write(Log.LOGLEVEL_TRACE, "sageEvent: Event received = " + eventName);

    // Check that we have the right event.
    if (!(eventName.startsWith("RecordingCompleted") || eventName.startsWith("RecordingStopped"))) {
      Log.getInstance()
          .write(Log.LOGLEVEL_WARN, "sageEvent: Unexpected event received = " + eventName);
      return;
    }

    // Check that we have a valid MediaFile.
    Object MediaFile = eventVars.get("MediaFile");

    if (MediaFile == null) {
      Log.getInstance().write(Log.LOGLEVEL_WARN, "sageEvent: null MediaFile");
      return;
    }

    Log.getInstance()
        .write(
            Log.LOGLEVEL_TRACE,
            "sageEvent: Finished recording "
                + AiringAPI.GetAiringTitle(MediaFile)
                + " - "
                + ShowAPI.GetShowEpisode(MediaFile));

    // If it's a Manual, Favorite, or TimedRecord (manual) we do not need to worry about it.
    if (AiringAPI.IsFavorite(MediaFile) || AiringAPI.IsManualRecord(MediaFile)) {
      Log.getInstance().write(Log.LOGLEVEL_TRACE, "sageEvent: Is not an Intelligent Recording.");
      return;
    }

    // Create the DataStore which will allow us to access the data for this MediaFile.
    DataStore store = new DataStore(MediaFile);

    int maxToKeep;

    // If it's monitored keep the number specified. If it's not monitored use the
    // global default.
    if (store.isMonitored()) {
      Log.getInstance().write(Log.LOGLEVEL_TRACE, "sageEvent: Using max for this show.");
      maxToKeep = store.getMax();
    } else {
      Log.getInstance().write(Log.LOGLEVEL_TRACE, "sageEvent: Using global max.");
      maxToKeep = Util.GetIntProperty(PROPERTY_DEFAULT_MAX, DEFAULT_MAX_STRING);
    }

    Log.getInstance()
        .write(
            Log.LOGLEVEL_TRACE,
            "sageEvent: Max to keep = " + (maxToKeep == DEFAULT_MAX ? "unlimited" : maxToKeep));

    // See how many are already recorded.
    int numberRecorded = Util.getNumberRecorded(MediaFile);
    Log.getInstance()
        .write(Log.LOGLEVEL_TRACE, "sageEvent: Number already recorded = " + numberRecorded);

    // If it's unlimited or below the threshhold don't worry about it.
    if (maxToKeep == UNLIMITED || numberRecorded <= maxToKeep) {
      Log.getInstance().write(Log.LOGLEVEL_TRACE, "sageEvent: Below threshhold.");
      return;
    }

    Log.getInstance()
        .write(
            Log.LOGLEVEL_TRACE,
            "sageEvent: Threshhold exceeded. Deleting one or more "
                + AiringAPI.GetAiringTitle(MediaFile));

    // Get the direction to sort.
    boolean keepOldest =
        Configuration.GetServerProperty(PROPERTY_KEEP_OLDEST, "true").equalsIgnoreCase("true");
    Log.getInstance().write(Log.LOGLEVEL_TRACE, "sageEvent: Keep oldest = " + keepOldest);

    // Get all of the recordings in the proper order. Recordings at the beginning of the
    // List will be deleted first.
    List<Object> allRecorded = Util.getAllRecorded(MediaFile, "GetAiringStartTime", keepOldest);

    Log.getInstance()
        .write(Log.LOGLEVEL_TRACE, "sageEvent: Sorted list size = " + allRecorded.size());

    if (Log.getInstance().GetLogLevel() <= Log.LOGLEVEL_VERBOSE) {
      for (Object MF : allRecorded)
        Log.getInstance()
            .write(
                Log.LOGLEVEL_VERBOSE,
                "sageEvent: Date recorded = "
                    + Utility.PrintDateLong(AiringAPI.GetAiringStartTime(MF))
                    + " : "
                    + Utility.PrintTimeLong(AiringAPI.GetAiringStartTime(MF))
                    + " - "
                    + AiringAPI.GetAiringTitle(MF)
                    + " - "
                    + ShowAPI.GetShowEpisode(MF));
    }

    boolean reduceToMax =
        Configuration.GetServerProperty(PROPERTY_REDUCE_TO_MAX, "false").equalsIgnoreCase("true");

    // Calculate how many to delete.
    int numberToDelete = (reduceToMax ? numberRecorded - maxToKeep : 1);

    Log.getInstance().write(Log.LOGLEVEL_TRACE, "sageEvent: Need to delete " + numberToDelete);

    // Sanity check.
    if (allRecorded == null || allRecorded.size() < numberToDelete || numberToDelete < 1) {
      Log.getInstance()
          .write(
              Log.LOGLEVEL_WARN,
              "sageEvent: Internal error. numberToDelete exceeds allRecorded. Deleting this MediaFile.");
      MediaFileAPI.DeleteFile(MediaFile);
      return;
    }

    for (int i = 0; i < numberToDelete; i++) {
      Object MF = allRecorded.get(i);

      // Log.getInstance().write(Log.LOGLEVEL_TRACE, "sageEvent: TESTMODE. Would have deleted " +
      // AiringAPI.GetAiringTitle(MF) + " - " + ShowAPI.GetShowEpisode(MF));
      if (MediaFileAPI.DeleteFile(MF))
        Log.getInstance()
            .write(
                Log.LOGLEVEL_TRACE,
                "sageEvent: Deleted "
                    + AiringAPI.GetAiringTitle(MF)
                    + " - "
                    + ShowAPI.GetShowEpisode(MF));
      else
        Log.getInstance()
            .write(
                Log.LOGLEVEL_WARN,
                "sageEvent: Failed to delete "
                    + AiringAPI.GetAiringTitle(MF)
                    + " - "
                    + ShowAPI.GetShowEpisode(MF));
    }
  }
示例#10
0
 public static String GetShowSubCategory(Object MediaObject) {
   return StringCategory(ShowAPI.GetShowSubCategory(MediaObject));
 }