Jump to content

Recommended Posts

Debug Mode

Snapshot of GetItemImage generated by ServiceStack on 05.01.2014 18:03:39

 

Response Status

 

Error Code

AggregateException

Message

One or more errors occured

Stack Trace

at System.Threading.Tasks.Task.WaitAll (System.Threading.Tasks.Task[] tasks, Int32 millisecondsTimeout, CancellationToken cancellationToken) [0x00000] in <filename unknown>:0 at System.Threading.Tasks.Task.WaitAll (System.Threading.Tasks.Task[] tasks) [0x00000] in <filename unknown>:0 at MediaBrowser.Api.Images.ImageWriter.WriteTo (System.IO.Stream responseStream) [0x00000] in <filename unknown>:0 at ServiceStack.HttpResponseExtensionsInternal.WriteToOutputStream (IResponse response, System.Object result, System.Byte[] bodyPrefix, System.Byte[] bodySuffix) [0x00000] in <filename unknown>:0 at ServiceStack.HttpResponseExtensionsInternal.WriteToResponse (IResponse response, System.Object result, ServiceStack.Web.ResponseSerializerDelegate defaultAction, IRequest request, System.Byte[] bodyPrefix, System.Byte[] bodySuffix) [0x00000] in <filename unknown>:0

Edited by Debug Mode
Link to post
Share on other sites
Debug Mode

I can see everything now. The date thing persists, but as long as an future update bumps everything existing automatically one day up there shouldn't be any problem.

Thank you!

Link to post
Share on other sites

Could it be a bug that a episode without season is functioning aside from not appearing on the shows site unless its put into a subfolder?

 

Explain a little more? You don't need a season subfolder, however, there is an open issue where if you don't use season folders, and the episode does not have a season number, then it will not show up under any of the seasons.

Link to post
Share on other sites
Debug Mode

Explain a little more? You don't need a season subfolder, however, there is an open issue where if you don't use season folders, and the episode does not have a season number, then it will not show up under any of the seasons.

That's what I meant. I thought that I could do this:

 

>Wish Upon the Pleiades

__- E1

__- E2

__- E3

__- E4

 

But it didn't work until I made a random folder. They showed up afterwards as:

 

>Wish Upon the Pleiades

__o derp

____- ...

Edited by Debug Mode
Link to post
Share on other sites

Yea it's an open issue. We need to create a virtual "unknown season" grouping on the fly. But really the root issue is that the file names are not using. We support quite a few different ones, and they're all listed in the library wiki. So if we're able to pull the season number from the filename, the issue won't occur. 

Link to post
Share on other sites

 

Since we've gotten a little further, to anyone who wants to test -

 

I can provide a build for the linux server, but you will have to be capable of not only installing mono, but building it as well.

 

@@abeloin

 

can you verify these updated instructions, assuming I provide a build for testers:

 

  1. Rebuild Pokorra's Mono src rpms with patch for servicestack v4 issue
  2. Instal Mono, libgdi+

 

Sorry for the late reply, I was on vacation.

 

For fedora:

  1. Rebuild Pokorra's Mono src rpms with patch for servicestack v4 issue
  2. Install mono-opt, libgdiplus and mono-libgdiplus-opt (If system x64, install libgdiplus.i686 not libgdiplus.x86_64)

To develop:

  1. Install monodevelop-opt
Link to post
Share on other sites

So here are our open issues:

 

- The unimplemented methods I emailed you about before your vacation

- Some users unable to use SMB shares and have to create local mounts. Unclear if latest mono resolves this, or if this is something we'll just have to live with because all we're doing is using framework I/O methods.

Link to post
Share on other sites

yea i saw this too. something about libgdi being in usr/iib64 but mono looking for it in usr/lib. or vice versa possibly. nothing to do with the app. might need more instructions from @@abeloin

 

Make sure you install the x86_32 version not the x86_64, in fedora: yum install libgdiplus.i686

 

If using tpokorra mono-opt package, install mono-libgdiplus-opt which will create a symlink from /usr/lib to /opt/mono/lib. Or manually(something like this): ln -s /opt/mono/lib/libgdiplus.so /usr/lib/libgdiplus.so.0

Edited by abeloin
  • Like 1
Link to post
Share on other sites

So here are our open issues:

 

- Some users unable to use SMB shares and have to create local mounts. Unclear if latest mono resolves this, or if this is something we'll just have to live with because all we're doing is using framework I/O methods.

 

UNC path will not work in Linux as they're a windows kernel feature. It would have to be implemented in MB using something like cifsclient(http://code.google.com/p/cifsclient/) or gnomevfs.

 

MBT works perfectly with localpath folder(ie: /share/mb3/movies)

 

Workaround for XBMB3C require a patch that implement path substitution(ie: /share/video/movies to \\server\mb3\movies) see: http://pastebin.com/RJb6YsUw

I was using an old version of xbmb3c, use the stream option

Edited by abeloin
  • Like 1
Link to post
Share on other sites

UNC path will not work in Linux as they're a windows kernel feature. It would have to be implemented in MB using something like cifsclient(http://code.google.com/p/cifsclient/) or gnomevfs.

 

MBT works perfectly with localpath folder(ie: /share/mb3/movies)

Workaround for XBMB3C require a patch that implement path substitution(ie: /share/video/movies to \\server\mb3\movies)

 

I saw that library but it looks like all of our IO would have to be rewritten. Not impossible thanks to dependency injection but it would be long, painful process. I was thinking of path substitution and I think that might not be a bad idea. User sets up the substitutes in the server dashboard and the api layer handles it so that clients don't have to worry about it. It's a little less flexible than doing it at the client level but probably fits the majority of use cases. MBC, MBT and XBMB3C would all be in the same boat.

Link to post
Share on other sites

RHEL6/CentOS 6 SQL issue isolated:

 

Further VM testing in RHEL6/CentOS6 shows my SQL issue is related to the version of the sqlite3 library: The natively installed version 3.6.x will not work (CentOS 6).   version 3.7.x DOES work (RHEL 7 beta).

 

installing sqlite 3.7.x on RHEl6/CentOS 6 appears to be unsupported.  i.e  its not in the EPEL repository and it may cause other issues

 

Thanks.

 

we'll have to figure out why it's not using our embedded version

 

From https://github.com/MediaBrowser/MediaBrowser/commit/79a5363a7e5d4878e1ff8fad1c5c4f01e9f9fd38:

 

Depending of the OS, System.Data.SQLite will look for: (See http://www.mono-project.com/Interop_with_Native_Libraries for more info)

  •   sqlite3.dll in Windows(Provided with the project)
  •   libsqlite3.so.0 in Linux(Need to be installed. ie yum install sqlite.i686)
  •   libsqlite3.dylib in MacOS X(!?)

 

For CentOS 6, try to build the new version of sqlite(configure & make but not install) and place it in the same folder as MediaBrowser.Server.Mono.exe

 

If it still doesn't work, try adding Mediabrowser path to LD:

export LD_LIBRARY_PATH=/opt/mediabrowser:$LD_LIBRARY_PATH

If all else fail, try running in verbose mode:(http://www.mono-project.com/DllNotFoundException)

MONO_LOG_LEVEL=debug mono MediaBrowser.Server.Mono.exe

And you will see the order mono load the so file :

Mono-INFO: DllImport loading location: './libgdiplus.dll.so'.
Link to post
Share on other sites

The plugin trakt is not working, I get a System.NotImplementedException.

 

Edit: Oops forgot to add the exception

	This method must be implemented in derived classes
	System.NotImplementedException
	  at System.Net.WebRequest.set_ImpersonationLevel (TokenImpersonationLevel value) [0x00000] in <filename unknown>:0 
	  at (wrapper remoting-invoke-with-check) System.Net.WebRequest:set_ImpersonationLevel (System.Security.Principal.TokenImpersonationLevel)
	  at System.Net.Http.WebRequestHandler.CreateWebRequest (System.Net.Http.HttpRequestMessage request) [0x00000] in <filename unknown>:0 
	  at System.Net.Http.HttpClientHandler+<SendAsync>c__async0.MoveNext () [0x00000] in <filename unknown>:0 
	--- End of stack trace from previous location where exception was thrown ---
	  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x00000] in <filename unknown>:0 
	  at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Net.Http.HttpResponseMessage].GetResult () [0x00000] in <filename unknown>:0 
	  at System.Net.Http.HttpClient+<SendAsyncWorker>c__async0.MoveNext () [0x00000] in <filename unknown>:0 
	--- End of stack trace from previous location where exception was thrown ---
	  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x00000] in <filename unknown>:0 
	  at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Net.Http.HttpResponseMessage].GetResult () [0x00000] in <filename unknown>:0 
	  at Trakt.Net.HttpClientManager+<PostInternal>c__async2.MoveNext () [0x00000] in <filename unknown>:0 
	--- End of stack trace from previous location where exception was thrown ---
	  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x00000] in <filename unknown>:0 
	  at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.IO.Stream].GetResult () [0x00000] in <filename unknown>:0 
	  at Trakt.Net.HttpClientManager+<Post>c__async0.MoveNext () [0x00000] in <filename unknown>:0 
	--- End of stack trace from previous location where exception was thrown ---
	  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x00000] in <filename unknown>:0 
	  at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.IO.Stream].GetResult () [0x00000] in <filename unknown>:0 
	  at Trakt.Api.TraktApi+<SendGetAllMoviesRequest>c__asyncC.MoveNext () [0x00000] in <filename unknown>:0 
	--- End of stack trace from previous location where exception was thrown ---
	  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x00000] in <filename unknown>:0 
	  at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Collections.Generic.List`1[Trakt.Api.DataContracts.TraktMovieDataContract]].GetResult () [0x00000] in <filename unknown>:0 
	  at Trakt.ScheduledTasks.SyncFromTraktTask+<SyncTraktDataForUser>c__async1.MoveNext () [0x00000] in <filename unknown>:0 
Edited by abeloin
Link to post
Share on other sites
Redshirt

The plugin trakt is not working, I get a System.NotImplementedException.

 

There's gotta be more info than that...

Link to post
Share on other sites
Redshirt

I can't remember the specifics, but I moved away from the internal http client because it was mangling my json and escaping characters it didn't need to.

Link to post
Share on other sites

WebRequestHandler seems incomplete in mono, see https://bugzilla.xamarin.com/show_bug.cgi?id=12546

 

As a workaround but not tested in Windows:

diff --git a/Trakt/Net/HttpClientManager.cs b/Trakt/Net/HttpClientManager.cs
index cefd449..673d00e 100644
--- a/Trakt/Net/HttpClientManager.cs
+++ b/Trakt/Net/HttpClientManager.cs
@@ -15,6 +15,11 @@ namespace Trakt.Net
 {
     public class HttpClientManager
     {
+        public static bool IsRunningOnMono ()
+        {
+            return Type.GetType ("Mono.Runtime") != null;
+        }
+
         private readonly ILogger _logger;

         public HttpClientManager(ILogger logger)
@@ -92,13 +97,18 @@ namespace Trakt.Net
                 await resourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
             }

-            var handler = new WebRequestHandler
+            var client = new HttpClient();
+
+            if (!IsRunningOnMono())
             {
-                CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore),
-                AutomaticDecompression = DecompressionMethods.None
-            };
+                var handler = new WebRequestHandler
+                {
+                    CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore),
+                    AutomaticDecompression = DecompressionMethods.None
+                };

-            var client = new HttpClient(handler);
+                client = new HttpClient(handler);
+            }

             try
             {

Link to post
Share on other sites
Redshirt

Luke. Can you overload Post and provide the ability for me to just pass in a string rather than a Dictionary<string,string>.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...